Merge commit 'f4bcd8ccddb02833340652e9f46f5127828eb79d' into x86/build
Bring in upstream merge of x86/kaslr for future patches. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
commit
4064e0ea3c
|
@ -0,0 +1,20 @@
|
||||||
|
What: /sys/firmware/efi/fw_vendor
|
||||||
|
Date: December 2013
|
||||||
|
Contact: Dave Young <dyoung@redhat.com>
|
||||||
|
Description: It shows the physical address of firmware vendor field in the
|
||||||
|
EFI system table.
|
||||||
|
Users: Kexec
|
||||||
|
|
||||||
|
What: /sys/firmware/efi/runtime
|
||||||
|
Date: December 2013
|
||||||
|
Contact: Dave Young <dyoung@redhat.com>
|
||||||
|
Description: It shows the physical address of runtime service table entry in
|
||||||
|
the EFI system table.
|
||||||
|
Users: Kexec
|
||||||
|
|
||||||
|
What: /sys/firmware/efi/config_table
|
||||||
|
Date: December 2013
|
||||||
|
Contact: Dave Young <dyoung@redhat.com>
|
||||||
|
Description: It shows the physical address of config table entry in the EFI
|
||||||
|
system table.
|
||||||
|
Users: Kexec
|
|
@ -0,0 +1,34 @@
|
||||||
|
What: /sys/firmware/efi/runtime-map/
|
||||||
|
Date: December 2013
|
||||||
|
Contact: Dave Young <dyoung@redhat.com>
|
||||||
|
Description: Switching efi runtime services to virtual mode requires
|
||||||
|
that all efi memory ranges which have the runtime attribute
|
||||||
|
bit set to be mapped to virtual addresses.
|
||||||
|
|
||||||
|
The efi runtime services can only be switched to virtual
|
||||||
|
mode once without rebooting. The kexec kernel must maintain
|
||||||
|
the same physical to virtual address mappings as the first
|
||||||
|
kernel. The mappings are exported to sysfs so userspace tools
|
||||||
|
can reassemble them and pass them into the kexec kernel.
|
||||||
|
|
||||||
|
/sys/firmware/efi/runtime-map/ is the directory the kernel
|
||||||
|
exports that information in.
|
||||||
|
|
||||||
|
subdirectories are named with the number of the memory range:
|
||||||
|
|
||||||
|
/sys/firmware/efi/runtime-map/0
|
||||||
|
/sys/firmware/efi/runtime-map/1
|
||||||
|
/sys/firmware/efi/runtime-map/2
|
||||||
|
/sys/firmware/efi/runtime-map/3
|
||||||
|
...
|
||||||
|
|
||||||
|
Each subdirectory contains five files:
|
||||||
|
|
||||||
|
attribute : The attributes of the memory range.
|
||||||
|
num_pages : The size of the memory range in pages.
|
||||||
|
phys_addr : The physical address of the memory range.
|
||||||
|
type : The type of the memory range.
|
||||||
|
virt_addr : The virtual address of the memory range.
|
||||||
|
|
||||||
|
Above values are all hexadecimal numbers with the '0x' prefix.
|
||||||
|
Users: Kexec
|
|
@ -0,0 +1,38 @@
|
||||||
|
What: /sys/kernel/boot_params
|
||||||
|
Date: December 2013
|
||||||
|
Contact: Dave Young <dyoung@redhat.com>
|
||||||
|
Description: The /sys/kernel/boot_params directory contains two
|
||||||
|
files: "data" and "version" and one subdirectory "setup_data".
|
||||||
|
It is used to export the kernel boot parameters of an x86
|
||||||
|
platform to userspace for kexec and debugging purpose.
|
||||||
|
|
||||||
|
If there's no setup_data in boot_params the subdirectory will
|
||||||
|
not be created.
|
||||||
|
|
||||||
|
"data" file is the binary representation of struct boot_params.
|
||||||
|
|
||||||
|
"version" file is the string representation of boot
|
||||||
|
protocol version.
|
||||||
|
|
||||||
|
"setup_data" subdirectory contains the setup_data data
|
||||||
|
structure in boot_params. setup_data is maintained in kernel
|
||||||
|
as a link list. In "setup_data" subdirectory there's one
|
||||||
|
subdirectory for each link list node named with the number
|
||||||
|
of the list nodes. The list node subdirectory contains two
|
||||||
|
files "type" and "data". "type" file is the string
|
||||||
|
representation of setup_data type. "data" file is the binary
|
||||||
|
representation of setup_data payload.
|
||||||
|
|
||||||
|
The whole boot_params directory structure is like below:
|
||||||
|
/sys/kernel/boot_params
|
||||||
|
|__ data
|
||||||
|
|__ setup_data
|
||||||
|
| |__ 0
|
||||||
|
| | |__ data
|
||||||
|
| | |__ type
|
||||||
|
| |__ 1
|
||||||
|
| |__ data
|
||||||
|
| |__ type
|
||||||
|
|__ version
|
||||||
|
|
||||||
|
Users: Kexec
|
|
@ -396,14 +396,14 @@ o Each element of the form "3/3 ..>. 0:7 ^0" represents one rcu_node
|
||||||
|
|
||||||
The output of "cat rcu/rcu_sched/rcu_pending" looks as follows:
|
The output of "cat rcu/rcu_sched/rcu_pending" looks as follows:
|
||||||
|
|
||||||
0!np=26111 qsp=29 rpq=5386 cbr=1 cng=570 gpc=3674 gps=577 nn=15903
|
0!np=26111 qsp=29 rpq=5386 cbr=1 cng=570 gpc=3674 gps=577 nn=15903 ndw=0
|
||||||
1!np=28913 qsp=35 rpq=6097 cbr=1 cng=448 gpc=3700 gps=554 nn=18113
|
1!np=28913 qsp=35 rpq=6097 cbr=1 cng=448 gpc=3700 gps=554 nn=18113 ndw=0
|
||||||
2!np=32740 qsp=37 rpq=6202 cbr=0 cng=476 gpc=4627 gps=546 nn=20889
|
2!np=32740 qsp=37 rpq=6202 cbr=0 cng=476 gpc=4627 gps=546 nn=20889 ndw=0
|
||||||
3 np=23679 qsp=22 rpq=5044 cbr=1 cng=415 gpc=3403 gps=347 nn=14469
|
3 np=23679 qsp=22 rpq=5044 cbr=1 cng=415 gpc=3403 gps=347 nn=14469 ndw=0
|
||||||
4!np=30714 qsp=4 rpq=5574 cbr=0 cng=528 gpc=3931 gps=639 nn=20042
|
4!np=30714 qsp=4 rpq=5574 cbr=0 cng=528 gpc=3931 gps=639 nn=20042 ndw=0
|
||||||
5 np=28910 qsp=2 rpq=5246 cbr=0 cng=428 gpc=4105 gps=709 nn=18422
|
5 np=28910 qsp=2 rpq=5246 cbr=0 cng=428 gpc=4105 gps=709 nn=18422 ndw=0
|
||||||
6!np=38648 qsp=5 rpq=7076 cbr=0 cng=840 gpc=4072 gps=961 nn=25699
|
6!np=38648 qsp=5 rpq=7076 cbr=0 cng=840 gpc=4072 gps=961 nn=25699 ndw=0
|
||||||
7 np=37275 qsp=2 rpq=6873 cbr=0 cng=868 gpc=3416 gps=971 nn=25147
|
7 np=37275 qsp=2 rpq=6873 cbr=0 cng=868 gpc=3416 gps=971 nn=25147 ndw=0
|
||||||
|
|
||||||
The fields are as follows:
|
The fields are as follows:
|
||||||
|
|
||||||
|
@ -432,6 +432,10 @@ o "gpc" is the number of times that an old grace period had
|
||||||
o "gps" is the number of times that a new grace period had started,
|
o "gps" is the number of times that a new grace period had started,
|
||||||
but this CPU was not yet aware of it.
|
but this CPU was not yet aware of it.
|
||||||
|
|
||||||
|
o "ndw" is the number of times that a wakeup of an rcuo
|
||||||
|
callback-offload kthread had to be deferred in order to avoid
|
||||||
|
deadlock.
|
||||||
|
|
||||||
o "nn" is the number of times that this CPU needed nothing.
|
o "nn" is the number of times that this CPU needed nothing.
|
||||||
|
|
||||||
|
|
||||||
|
@ -443,7 +447,7 @@ The output of "cat rcu/rcuboost" looks as follows:
|
||||||
balk: nt=0 egt=6541 bt=0 nb=0 ny=126 nos=0
|
balk: nt=0 egt=6541 bt=0 nb=0 ny=126 nos=0
|
||||||
|
|
||||||
This information is output only for rcu_preempt. Each two-line entry
|
This information is output only for rcu_preempt. Each two-line entry
|
||||||
corresponds to a leaf rcu_node strcuture. The fields are as follows:
|
corresponds to a leaf rcu_node structure. The fields are as follows:
|
||||||
|
|
||||||
o "n:m" is the CPU-number range for the corresponding two-line
|
o "n:m" is the CPU-number range for the corresponding two-line
|
||||||
entry. In the sample output above, the first entry covers
|
entry. In the sample output above, the first entry covers
|
||||||
|
|
|
@ -45,11 +45,22 @@ directory apei/einj. The following files are provided.
|
||||||
injection. Before this, please specify all necessary error
|
injection. Before this, please specify all necessary error
|
||||||
parameters.
|
parameters.
|
||||||
|
|
||||||
|
- flags
|
||||||
|
Present for kernel version 3.13 and above. Used to specify which
|
||||||
|
of param{1..4} are valid and should be used by BIOS during injection.
|
||||||
|
Value is a bitmask as specified in ACPI5.0 spec for the
|
||||||
|
SET_ERROR_TYPE_WITH_ADDRESS data structure:
|
||||||
|
Bit 0 - Processor APIC field valid (see param3 below)
|
||||||
|
Bit 1 - Memory address and mask valid (param1 and param2)
|
||||||
|
Bit 2 - PCIe (seg,bus,dev,fn) valid (param4 below)
|
||||||
|
If set to zero, legacy behaviour is used where the type of injection
|
||||||
|
specifies just one bit set, and param1 is multiplexed.
|
||||||
|
|
||||||
- param1
|
- param1
|
||||||
This file is used to set the first error parameter value. Effect of
|
This file is used to set the first error parameter value. Effect of
|
||||||
parameter depends on error_type specified. For example, if error
|
parameter depends on error_type specified. For example, if error
|
||||||
type is memory related type, the param1 should be a valid physical
|
type is memory related type, the param1 should be a valid physical
|
||||||
memory address.
|
memory address. [Unless "flag" is set - see above]
|
||||||
|
|
||||||
- param2
|
- param2
|
||||||
This file is used to set the second error parameter value. Effect of
|
This file is used to set the second error parameter value. Effect of
|
||||||
|
@ -58,6 +69,12 @@ directory apei/einj. The following files are provided.
|
||||||
address mask. Linux requires page or narrower granularity, say,
|
address mask. Linux requires page or narrower granularity, say,
|
||||||
0xfffffffffffff000.
|
0xfffffffffffff000.
|
||||||
|
|
||||||
|
- param3
|
||||||
|
Used when the 0x1 bit is set in "flag" to specify the APIC id
|
||||||
|
|
||||||
|
- param4
|
||||||
|
Used when the 0x4 bit is set in "flag" to specify target PCIe device
|
||||||
|
|
||||||
- notrigger
|
- notrigger
|
||||||
The EINJ mechanism is a two step process. First inject the error, then
|
The EINJ mechanism is a two step process. First inject the error, then
|
||||||
perform some actions to trigger it. Setting "notrigger" to 1 skips the
|
perform some actions to trigger it. Setting "notrigger" to 1 skips the
|
||||||
|
|
|
@ -160,6 +160,7 @@ The producer will look something like this:
|
||||||
spin_lock(&producer_lock);
|
spin_lock(&producer_lock);
|
||||||
|
|
||||||
unsigned long head = buffer->head;
|
unsigned long head = buffer->head;
|
||||||
|
/* The spin_unlock() and next spin_lock() provide needed ordering. */
|
||||||
unsigned long tail = ACCESS_ONCE(buffer->tail);
|
unsigned long tail = ACCESS_ONCE(buffer->tail);
|
||||||
|
|
||||||
if (CIRC_SPACE(head, tail, buffer->size) >= 1) {
|
if (CIRC_SPACE(head, tail, buffer->size) >= 1) {
|
||||||
|
@ -168,9 +169,8 @@ The producer will look something like this:
|
||||||
|
|
||||||
produce_item(item);
|
produce_item(item);
|
||||||
|
|
||||||
smp_wmb(); /* commit the item before incrementing the head */
|
smp_store_release(buffer->head,
|
||||||
|
(head + 1) & (buffer->size - 1));
|
||||||
buffer->head = (head + 1) & (buffer->size - 1);
|
|
||||||
|
|
||||||
/* wake_up() will make sure that the head is committed before
|
/* wake_up() will make sure that the head is committed before
|
||||||
* waking anyone up */
|
* waking anyone up */
|
||||||
|
@ -183,9 +183,14 @@ This will instruct the CPU that the contents of the new item must be written
|
||||||
before the head index makes it available to the consumer and then instructs the
|
before the head index makes it available to the consumer and then instructs the
|
||||||
CPU that the revised head index must be written before the consumer is woken.
|
CPU that the revised head index must be written before the consumer is woken.
|
||||||
|
|
||||||
Note that wake_up() doesn't have to be the exact mechanism used, but whatever
|
Note that wake_up() does not guarantee any sort of barrier unless something
|
||||||
is used must guarantee a (write) memory barrier between the update of the head
|
is actually awakened. We therefore cannot rely on it for ordering. However,
|
||||||
index and the change of state of the consumer, if a change of state occurs.
|
there is always one element of the array left empty. Therefore, the
|
||||||
|
producer must produce two elements before it could possibly corrupt the
|
||||||
|
element currently being read by the consumer. Therefore, the unlock-lock
|
||||||
|
pair between consecutive invocations of the consumer provides the necessary
|
||||||
|
ordering between the read of the index indicating that the consumer has
|
||||||
|
vacated a given element and the write by the producer to that same element.
|
||||||
|
|
||||||
|
|
||||||
THE CONSUMER
|
THE CONSUMER
|
||||||
|
@ -195,21 +200,20 @@ The consumer will look something like this:
|
||||||
|
|
||||||
spin_lock(&consumer_lock);
|
spin_lock(&consumer_lock);
|
||||||
|
|
||||||
unsigned long head = ACCESS_ONCE(buffer->head);
|
/* Read index before reading contents at that index. */
|
||||||
|
unsigned long head = smp_load_acquire(buffer->head);
|
||||||
unsigned long tail = buffer->tail;
|
unsigned long tail = buffer->tail;
|
||||||
|
|
||||||
if (CIRC_CNT(head, tail, buffer->size) >= 1) {
|
if (CIRC_CNT(head, tail, buffer->size) >= 1) {
|
||||||
/* read index before reading contents at that index */
|
|
||||||
smp_read_barrier_depends();
|
|
||||||
|
|
||||||
/* extract one item from the buffer */
|
/* extract one item from the buffer */
|
||||||
struct item *item = buffer[tail];
|
struct item *item = buffer[tail];
|
||||||
|
|
||||||
consume_item(item);
|
consume_item(item);
|
||||||
|
|
||||||
smp_mb(); /* finish reading descriptor before incrementing tail */
|
/* Finish reading descriptor before incrementing tail. */
|
||||||
|
smp_store_release(buffer->tail,
|
||||||
buffer->tail = (tail + 1) & (buffer->size - 1);
|
(tail + 1) & (buffer->size - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock(&consumer_lock);
|
spin_unlock(&consumer_lock);
|
||||||
|
@ -218,12 +222,17 @@ This will instruct the CPU to make sure the index is up to date before reading
|
||||||
the new item, and then it shall make sure the CPU has finished reading the item
|
the new item, and then it shall make sure the CPU has finished reading the item
|
||||||
before it writes the new tail pointer, which will erase the item.
|
before it writes the new tail pointer, which will erase the item.
|
||||||
|
|
||||||
|
Note the use of ACCESS_ONCE() and smp_load_acquire() to read the
|
||||||
Note the use of ACCESS_ONCE() in both algorithms to read the opposition index.
|
opposition index. This prevents the compiler from discarding and
|
||||||
This prevents the compiler from discarding and reloading its cached value -
|
reloading its cached value - which some compilers will do across
|
||||||
which some compilers will do across smp_read_barrier_depends(). This isn't
|
smp_read_barrier_depends(). This isn't strictly needed if you can
|
||||||
strictly needed if you can be sure that the opposition index will _only_ be
|
be sure that the opposition index will _only_ be used the once.
|
||||||
used the once.
|
The smp_load_acquire() additionally forces the CPU to order against
|
||||||
|
subsequent memory references. Similarly, smp_store_release() is used
|
||||||
|
in both algorithms to write the thread's index. This documents the
|
||||||
|
fact that we are writing to something that can be read concurrently,
|
||||||
|
prevents the compiler from tearing the store, and enforces ordering
|
||||||
|
against previous accesses.
|
||||||
|
|
||||||
|
|
||||||
===============
|
===============
|
||||||
|
|
|
@ -159,6 +159,8 @@ clock which they consume.
|
||||||
mixer 343
|
mixer 343
|
||||||
hdmi 344
|
hdmi 344
|
||||||
g2d 345
|
g2d 345
|
||||||
|
mdma0 346
|
||||||
|
smmu_mdma0 347
|
||||||
|
|
||||||
|
|
||||||
[Clock Muxes]
|
[Clock Muxes]
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
Allwinner SoCs High Speed Timer Controller
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
|
||||||
|
- compatible : should be "allwinner,sun5i-a13-hstimer" or
|
||||||
|
"allwinner,sun7i-a20-hstimer"
|
||||||
|
- reg : Specifies base physical address and size of the registers.
|
||||||
|
- interrupts : The interrupts of these timers (2 for the sun5i IP, 4 for the sun7i
|
||||||
|
one)
|
||||||
|
- clocks: phandle to the source clock (usually the AHB clock)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
timer@01c60000 {
|
||||||
|
compatible = "allwinner,sun7i-a20-hstimer";
|
||||||
|
reg = <0x01c60000 0x1000>;
|
||||||
|
interrupts = <0 51 1>,
|
||||||
|
<0 52 1>,
|
||||||
|
<0 53 1>,
|
||||||
|
<0 54 1>;
|
||||||
|
clocks = <&ahb1_gates 19>;
|
||||||
|
};
|
|
@ -774,6 +774,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
disable= [IPV6]
|
disable= [IPV6]
|
||||||
See Documentation/networking/ipv6.txt.
|
See Documentation/networking/ipv6.txt.
|
||||||
|
|
||||||
|
disable_cpu_apicid= [X86,APIC,SMP]
|
||||||
|
Format: <int>
|
||||||
|
The number of initial APIC ID for the
|
||||||
|
corresponding CPU to be disabled at boot,
|
||||||
|
mostly used for the kdump 2nd kernel to
|
||||||
|
disable BSP to wake up multiple CPUs without
|
||||||
|
causing system reset or hang due to sending
|
||||||
|
INIT from AP to BSP.
|
||||||
|
|
||||||
disable_ddw [PPC/PSERIES]
|
disable_ddw [PPC/PSERIES]
|
||||||
Disable Dynamic DMA Window support. Use this if
|
Disable Dynamic DMA Window support. Use this if
|
||||||
to workaround buggy firmware.
|
to workaround buggy firmware.
|
||||||
|
@ -881,6 +890,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
|
|
||||||
The xen output can only be used by Xen PV guests.
|
The xen output can only be used by Xen PV guests.
|
||||||
|
|
||||||
|
edac_report= [HW,EDAC] Control how to report EDAC event
|
||||||
|
Format: {"on" | "off" | "force"}
|
||||||
|
on: enable EDAC to report H/W event. May be overridden
|
||||||
|
by other higher priority error reporting module.
|
||||||
|
off: disable H/W event reporting through EDAC.
|
||||||
|
force: enforce the use of EDAC to report H/W event.
|
||||||
|
default: on.
|
||||||
|
|
||||||
ekgdboc= [X86,KGDB] Allow early kernel console debugging
|
ekgdboc= [X86,KGDB] Allow early kernel console debugging
|
||||||
ekgdboc=kbd
|
ekgdboc=kbd
|
||||||
|
|
||||||
|
@ -890,6 +907,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
edd= [EDD]
|
edd= [EDD]
|
||||||
Format: {"off" | "on" | "skip[mbr]"}
|
Format: {"off" | "on" | "skip[mbr]"}
|
||||||
|
|
||||||
|
efi= [EFI]
|
||||||
|
Format: { "old_map" }
|
||||||
|
old_map [X86-64]: switch to the old ioremap-based EFI
|
||||||
|
runtime services mapping. 32-bit still uses this one by
|
||||||
|
default.
|
||||||
|
|
||||||
efi_no_storage_paranoia [EFI; X86]
|
efi_no_storage_paranoia [EFI; X86]
|
||||||
Using this parameter you can use more than 50% of
|
Using this parameter you can use more than 50% of
|
||||||
your efi variable storage. Use this parameter only if
|
your efi variable storage. Use this parameter only if
|
||||||
|
@ -1994,6 +2017,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
noapic [SMP,APIC] Tells the kernel to not make use of any
|
noapic [SMP,APIC] Tells the kernel to not make use of any
|
||||||
IOAPICs that may be present in the system.
|
IOAPICs that may be present in the system.
|
||||||
|
|
||||||
|
nokaslr [X86]
|
||||||
|
Disable kernel base offset ASLR (Address Space
|
||||||
|
Layout Randomization) if built into the kernel.
|
||||||
|
|
||||||
noautogroup Disable scheduler automatic task group creation.
|
noautogroup Disable scheduler automatic task group creation.
|
||||||
|
|
||||||
nobats [PPC] Do not use BATs for mapping kernel lowmem
|
nobats [PPC] Do not use BATs for mapping kernel lowmem
|
||||||
|
@ -2627,7 +2654,6 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
for RCU-preempt, and "s" for RCU-sched, and "N"
|
for RCU-preempt, and "s" for RCU-sched, and "N"
|
||||||
is the CPU number. This reduces OS jitter on the
|
is the CPU number. This reduces OS jitter on the
|
||||||
offloaded CPUs, which can be useful for HPC and
|
offloaded CPUs, which can be useful for HPC and
|
||||||
|
|
||||||
real-time workloads. It can also improve energy
|
real-time workloads. It can also improve energy
|
||||||
efficiency for asymmetric multiprocessors.
|
efficiency for asymmetric multiprocessors.
|
||||||
|
|
||||||
|
@ -2643,8 +2669,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
periodically wake up to do the polling.
|
periodically wake up to do the polling.
|
||||||
|
|
||||||
rcutree.blimit= [KNL]
|
rcutree.blimit= [KNL]
|
||||||
Set maximum number of finished RCU callbacks to process
|
Set maximum number of finished RCU callbacks to
|
||||||
in one batch.
|
process in one batch.
|
||||||
|
|
||||||
rcutree.rcu_fanout_leaf= [KNL]
|
rcutree.rcu_fanout_leaf= [KNL]
|
||||||
Increase the number of CPUs assigned to each
|
Increase the number of CPUs assigned to each
|
||||||
|
@ -2663,8 +2689,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
value is one, and maximum value is HZ.
|
value is one, and maximum value is HZ.
|
||||||
|
|
||||||
rcutree.qhimark= [KNL]
|
rcutree.qhimark= [KNL]
|
||||||
Set threshold of queued
|
Set threshold of queued RCU callbacks beyond which
|
||||||
RCU callbacks over which batch limiting is disabled.
|
batch limiting is disabled.
|
||||||
|
|
||||||
rcutree.qlowmark= [KNL]
|
rcutree.qlowmark= [KNL]
|
||||||
Set threshold of queued RCU callbacks below which
|
Set threshold of queued RCU callbacks below which
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
/*?
|
||||||
|
* Text: "Cryptographic device %x failed and was set offline\n"
|
||||||
|
* Severity: Error
|
||||||
|
* Parameter:
|
||||||
|
* @1: device index
|
||||||
|
* Description:
|
||||||
|
* A cryptographic device failed to process a cryptographic request.
|
||||||
|
* The cryptographic device driver could not correct the error and
|
||||||
|
* set the device offline. The application that issued the
|
||||||
|
* request received an indication that the request has failed.
|
||||||
|
* User action:
|
||||||
|
* Use the lszcrypt command to confirm that the cryptographic
|
||||||
|
* hardware is still configured to your LPAR or z/VM guest virtual
|
||||||
|
* machine. If the device is available to your Linux instance the
|
||||||
|
* command output contains a line that begins with 'card<device index>',
|
||||||
|
* where <device index> is the two-digit decimal number in the message text.
|
||||||
|
* After ensuring that the device is available, use the chzcrypt command to
|
||||||
|
* set it online again.
|
||||||
|
* If the error persists, contact your support organization.
|
||||||
|
*/
|
File diff suppressed because it is too large
Load Diff
|
@ -146,8 +146,8 @@ On removal:
|
||||||
1) set the 'list_op_pending' word to the address of the 'lock entry'
|
1) set the 'list_op_pending' word to the address of the 'lock entry'
|
||||||
to be removed,
|
to be removed,
|
||||||
2) remove the lock entry for this lock from the 'head' list,
|
2) remove the lock entry for this lock from the 'head' list,
|
||||||
2) release the futex lock, and
|
3) release the futex lock, and
|
||||||
2) clear the 'lock_op_pending' word.
|
4) clear the 'lock_op_pending' word.
|
||||||
|
|
||||||
On exit, the kernel will consider the address stored in
|
On exit, the kernel will consider the address stored in
|
||||||
'list_op_pending' and the address of each 'lock word' found by walking
|
'list_op_pending' and the address of each 'lock word' found by walking
|
||||||
|
|
|
@ -428,11 +428,6 @@ rate for each task.
|
||||||
numa_balancing_scan_size_mb is how many megabytes worth of pages are
|
numa_balancing_scan_size_mb is how many megabytes worth of pages are
|
||||||
scanned for a given scan.
|
scanned for a given scan.
|
||||||
|
|
||||||
numa_balancing_settle_count is how many scan periods must complete before
|
|
||||||
the schedule balancer stops pushing the task towards a preferred node. This
|
|
||||||
gives the scheduler a chance to place the task on an alternative node if the
|
|
||||||
preferred node is overloaded.
|
|
||||||
|
|
||||||
numa_balancing_migrate_deferred is how many page migrations get skipped
|
numa_balancing_migrate_deferred is how many page migrations get skipped
|
||||||
unconditionally, after a page migration is skipped because a page is shared
|
unconditionally, after a page migration is skipped because a page is shared
|
||||||
with other tasks. This reduces page migration overhead, and determines
|
with other tasks. This reduces page migration overhead, and determines
|
||||||
|
|
|
@ -608,6 +608,9 @@ Protocol: 2.12+
|
||||||
- If 1, the kernel supports the 64-bit EFI handoff entry point
|
- If 1, the kernel supports the 64-bit EFI handoff entry point
|
||||||
given at handover_offset + 0x200.
|
given at handover_offset + 0x200.
|
||||||
|
|
||||||
|
Bit 4 (read): XLF_EFI_KEXEC
|
||||||
|
- If 1, the kernel supports kexec EFI boot with EFI runtime support.
|
||||||
|
|
||||||
Field name: cmdline_size
|
Field name: cmdline_size
|
||||||
Type: read
|
Type: read
|
||||||
Offset/size: 0x238/4
|
Offset/size: 0x238/4
|
||||||
|
|
|
@ -28,4 +28,11 @@ reference.
|
||||||
Current X86-64 implementations only support 40 bits of address space,
|
Current X86-64 implementations only support 40 bits of address space,
|
||||||
but we support up to 46 bits. This expands into MBZ space in the page tables.
|
but we support up to 46 bits. This expands into MBZ space in the page tables.
|
||||||
|
|
||||||
|
->trampoline_pgd:
|
||||||
|
|
||||||
|
We map EFI runtime services in the aforementioned PGD in the virtual
|
||||||
|
range of 64Gb (arbitrarily set, can be raised if needed)
|
||||||
|
|
||||||
|
0xffffffef00000000 - 0xffffffff00000000
|
||||||
|
|
||||||
-Andi Kleen, Jul 2004
|
-Andi Kleen, Jul 2004
|
||||||
|
|
|
@ -95,8 +95,9 @@ The treatment of these regions depends on the type of Zorro space:
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
linux/include/linux/zorro.h
|
linux/include/linux/zorro.h
|
||||||
linux/include/asm-{m68k,ppc}/zorro.h
|
linux/include/uapi/linux/zorro.h
|
||||||
linux/include/linux/zorro_ids.h
|
linux/include/uapi/linux/zorro_ids.h
|
||||||
|
linux/arch/m68k/include/asm/zorro.h
|
||||||
linux/drivers/zorro
|
linux/drivers/zorro
|
||||||
/proc/bus/zorro
|
/proc/bus/zorro
|
||||||
|
|
||||||
|
|
25
MAINTAINERS
25
MAINTAINERS
|
@ -783,7 +783,7 @@ F: arch/arm/boot/dts/sama*.dts
|
||||||
F: arch/arm/boot/dts/sama*.dtsi
|
F: arch/arm/boot/dts/sama*.dtsi
|
||||||
|
|
||||||
ARM/CALXEDA HIGHBANK ARCHITECTURE
|
ARM/CALXEDA HIGHBANK ARCHITECTURE
|
||||||
M: Rob Herring <rob.herring@calxeda.com>
|
M: Rob Herring <robh@kernel.org>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/mach-highbank/
|
F: arch/arm/mach-highbank/
|
||||||
|
@ -1368,6 +1368,9 @@ T: git git://git.xilinx.com/linux-xlnx.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: arch/arm/mach-zynq/
|
F: arch/arm/mach-zynq/
|
||||||
F: drivers/cpuidle/cpuidle-zynq.c
|
F: drivers/cpuidle/cpuidle-zynq.c
|
||||||
|
N: zynq
|
||||||
|
N: xilinx
|
||||||
|
F: drivers/clocksource/cadence_ttc_timer.c
|
||||||
|
|
||||||
ARM SMMU DRIVER
|
ARM SMMU DRIVER
|
||||||
M: Will Deacon <will.deacon@arm.com>
|
M: Will Deacon <will.deacon@arm.com>
|
||||||
|
@ -2825,8 +2828,10 @@ F: include/uapi/drm/
|
||||||
|
|
||||||
INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
|
INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
|
||||||
M: Daniel Vetter <daniel.vetter@ffwll.ch>
|
M: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||||
|
M: Jani Nikula <jani.nikula@linux.intel.com>
|
||||||
L: intel-gfx@lists.freedesktop.org
|
L: intel-gfx@lists.freedesktop.org
|
||||||
L: dri-devel@lists.freedesktop.org
|
L: dri-devel@lists.freedesktop.org
|
||||||
|
Q: http://patchwork.freedesktop.org/project/intel-gfx/
|
||||||
T: git git://people.freedesktop.org/~danvet/drm-intel
|
T: git git://people.freedesktop.org/~danvet/drm-intel
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/gpu/drm/i915/
|
F: drivers/gpu/drm/i915/
|
||||||
|
@ -5136,6 +5141,11 @@ F: drivers/lguest/
|
||||||
F: include/linux/lguest*.h
|
F: include/linux/lguest*.h
|
||||||
F: tools/lguest/
|
F: tools/lguest/
|
||||||
|
|
||||||
|
LIBLOCKDEP
|
||||||
|
M: Sasha Levin <sasha.levin@oracle.com>
|
||||||
|
S: Maintained
|
||||||
|
F: tools/lib/lockdep/
|
||||||
|
|
||||||
LINUX FOR IBM pSERIES (RS/6000)
|
LINUX FOR IBM pSERIES (RS/6000)
|
||||||
M: Paul Mackerras <paulus@au.ibm.com>
|
M: Paul Mackerras <paulus@au.ibm.com>
|
||||||
W: http://www.ibm.com/linux/ltc/projects/ppc
|
W: http://www.ibm.com/linux/ltc/projects/ppc
|
||||||
|
@ -6256,7 +6266,7 @@ F: drivers/i2c/busses/i2c-ocores.c
|
||||||
|
|
||||||
OPEN FIRMWARE AND FLATTENED DEVICE TREE
|
OPEN FIRMWARE AND FLATTENED DEVICE TREE
|
||||||
M: Grant Likely <grant.likely@linaro.org>
|
M: Grant Likely <grant.likely@linaro.org>
|
||||||
M: Rob Herring <rob.herring@calxeda.com>
|
M: Rob Herring <robh+dt@kernel.org>
|
||||||
L: devicetree@vger.kernel.org
|
L: devicetree@vger.kernel.org
|
||||||
W: http://fdt.secretlab.ca
|
W: http://fdt.secretlab.ca
|
||||||
T: git git://git.secretlab.ca/git/linux-2.6.git
|
T: git git://git.secretlab.ca/git/linux-2.6.git
|
||||||
|
@ -6268,7 +6278,7 @@ K: of_get_property
|
||||||
K: of_match_table
|
K: of_match_table
|
||||||
|
|
||||||
OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
|
OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
|
||||||
M: Rob Herring <rob.herring@calxeda.com>
|
M: Rob Herring <robh+dt@kernel.org>
|
||||||
M: Pawel Moll <pawel.moll@arm.com>
|
M: Pawel Moll <pawel.moll@arm.com>
|
||||||
M: Mark Rutland <mark.rutland@arm.com>
|
M: Mark Rutland <mark.rutland@arm.com>
|
||||||
M: Ian Campbell <ijc+devicetree@hellion.org.uk>
|
M: Ian Campbell <ijc+devicetree@hellion.org.uk>
|
||||||
|
@ -7094,6 +7104,12 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
|
||||||
F: Documentation/RCU/torture.txt
|
F: Documentation/RCU/torture.txt
|
||||||
F: kernel/rcu/torture.c
|
F: kernel/rcu/torture.c
|
||||||
|
|
||||||
|
RCUTORTURE TEST FRAMEWORK
|
||||||
|
M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
|
||||||
|
S: Supported
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu.git
|
||||||
|
F: tools/testing/selftests/rcutorture
|
||||||
|
|
||||||
RDC R-321X SoC
|
RDC R-321X SoC
|
||||||
M: Florian Fainelli <florian@openwrt.org>
|
M: Florian Fainelli <florian@openwrt.org>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -9226,6 +9242,7 @@ F: include/media/videobuf2-*
|
||||||
|
|
||||||
VIRTIO CONSOLE DRIVER
|
VIRTIO CONSOLE DRIVER
|
||||||
M: Amit Shah <amit.shah@redhat.com>
|
M: Amit Shah <amit.shah@redhat.com>
|
||||||
|
L: virtio-dev@lists.oasis-open.org
|
||||||
L: virtualization@lists.linux-foundation.org
|
L: virtualization@lists.linux-foundation.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/char/virtio_console.c
|
F: drivers/char/virtio_console.c
|
||||||
|
@ -9235,6 +9252,7 @@ F: include/uapi/linux/virtio_console.h
|
||||||
VIRTIO CORE, NET AND BLOCK DRIVERS
|
VIRTIO CORE, NET AND BLOCK DRIVERS
|
||||||
M: Rusty Russell <rusty@rustcorp.com.au>
|
M: Rusty Russell <rusty@rustcorp.com.au>
|
||||||
M: "Michael S. Tsirkin" <mst@redhat.com>
|
M: "Michael S. Tsirkin" <mst@redhat.com>
|
||||||
|
L: virtio-dev@lists.oasis-open.org
|
||||||
L: virtualization@lists.linux-foundation.org
|
L: virtualization@lists.linux-foundation.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/virtio/
|
F: drivers/virtio/
|
||||||
|
@ -9247,6 +9265,7 @@ F: include/uapi/linux/virtio_*.h
|
||||||
VIRTIO HOST (VHOST)
|
VIRTIO HOST (VHOST)
|
||||||
M: "Michael S. Tsirkin" <mst@redhat.com>
|
M: "Michael S. Tsirkin" <mst@redhat.com>
|
||||||
L: kvm@vger.kernel.org
|
L: kvm@vger.kernel.org
|
||||||
|
L: virtio-dev@lists.oasis-open.org
|
||||||
L: virtualization@lists.linux-foundation.org
|
L: virtualization@lists.linux-foundation.org
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
22
Makefile
22
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 13
|
PATCHLEVEL = 13
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc6
|
EXTRAVERSION =
|
||||||
NAME = One Giant Leap for Frogkind
|
NAME = One Giant Leap for Frogkind
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -595,10 +595,24 @@ ifneq ($(CONFIG_FRAME_WARN),0)
|
||||||
KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
|
KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Force gcc to behave correct even for buggy distributions
|
# Handle stack protector mode.
|
||||||
ifndef CONFIG_CC_STACKPROTECTOR
|
ifdef CONFIG_CC_STACKPROTECTOR_REGULAR
|
||||||
KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
|
stackp-flag := -fstack-protector
|
||||||
|
ifeq ($(call cc-option, $(stackp-flag)),)
|
||||||
|
$(warning Cannot use CONFIG_CC_STACKPROTECTOR: \
|
||||||
|
-fstack-protector not supported by compiler))
|
||||||
|
endif
|
||||||
|
else ifdef CONFIG_CC_STACKPROTECTOR_STRONG
|
||||||
|
stackp-flag := -fstack-protector-strong
|
||||||
|
ifeq ($(call cc-option, $(stackp-flag)),)
|
||||||
|
$(warning Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: \
|
||||||
|
-fstack-protector-strong not supported by compiler)
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
# Force off for distro compilers that enable stack protector by default.
|
||||||
|
stackp-flag := $(call cc-option, -fno-stack-protector)
|
||||||
endif
|
endif
|
||||||
|
KBUILD_CFLAGS += $(stackp-flag)
|
||||||
|
|
||||||
# This warning generated too much noise in a regular build.
|
# This warning generated too much noise in a regular build.
|
||||||
# Use make W=1 to enable this warning (see scripts/Makefile.build)
|
# Use make W=1 to enable this warning (see scripts/Makefile.build)
|
||||||
|
|
67
arch/Kconfig
67
arch/Kconfig
|
@ -336,6 +336,73 @@ config SECCOMP_FILTER
|
||||||
|
|
||||||
See Documentation/prctl/seccomp_filter.txt for details.
|
See Documentation/prctl/seccomp_filter.txt for details.
|
||||||
|
|
||||||
|
config HAVE_CC_STACKPROTECTOR
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
An arch should select this symbol if:
|
||||||
|
- its compiler supports the -fstack-protector option
|
||||||
|
- it has implemented a stack canary (e.g. __stack_chk_guard)
|
||||||
|
|
||||||
|
config CC_STACKPROTECTOR
|
||||||
|
def_bool n
|
||||||
|
help
|
||||||
|
Set when a stack-protector mode is enabled, so that the build
|
||||||
|
can enable kernel-side support for the GCC feature.
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "Stack Protector buffer overflow detection"
|
||||||
|
depends on HAVE_CC_STACKPROTECTOR
|
||||||
|
default CC_STACKPROTECTOR_NONE
|
||||||
|
help
|
||||||
|
This option turns on the "stack-protector" GCC feature. This
|
||||||
|
feature puts, at the beginning of functions, a canary value on
|
||||||
|
the stack just before the return address, and validates
|
||||||
|
the value just before actually returning. Stack based buffer
|
||||||
|
overflows (that need to overwrite this return address) now also
|
||||||
|
overwrite the canary, which gets detected and the attack is then
|
||||||
|
neutralized via a kernel panic.
|
||||||
|
|
||||||
|
config CC_STACKPROTECTOR_NONE
|
||||||
|
bool "None"
|
||||||
|
help
|
||||||
|
Disable "stack-protector" GCC feature.
|
||||||
|
|
||||||
|
config CC_STACKPROTECTOR_REGULAR
|
||||||
|
bool "Regular"
|
||||||
|
select CC_STACKPROTECTOR
|
||||||
|
help
|
||||||
|
Functions will have the stack-protector canary logic added if they
|
||||||
|
have an 8-byte or larger character array on the stack.
|
||||||
|
|
||||||
|
This feature requires gcc version 4.2 or above, or a distribution
|
||||||
|
gcc with the feature backported ("-fstack-protector").
|
||||||
|
|
||||||
|
On an x86 "defconfig" build, this feature adds canary checks to
|
||||||
|
about 3% of all kernel functions, which increases kernel code size
|
||||||
|
by about 0.3%.
|
||||||
|
|
||||||
|
config CC_STACKPROTECTOR_STRONG
|
||||||
|
bool "Strong"
|
||||||
|
select CC_STACKPROTECTOR
|
||||||
|
help
|
||||||
|
Functions will have the stack-protector canary logic added in any
|
||||||
|
of the following conditions:
|
||||||
|
|
||||||
|
- local variable's address used as part of the right hand side of an
|
||||||
|
assignment or function argument
|
||||||
|
- local variable is an array (or union containing an array),
|
||||||
|
regardless of array type or length
|
||||||
|
- uses register local variables
|
||||||
|
|
||||||
|
This feature requires gcc version 4.9 or above, or a distribution
|
||||||
|
gcc with the feature backported ("-fstack-protector-strong").
|
||||||
|
|
||||||
|
On an x86 "defconfig" build, this feature adds canary checks to
|
||||||
|
about 20% of all kernel functions, which increases the kernel code
|
||||||
|
size by about 2%.
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
config HAVE_CONTEXT_TRACKING
|
config HAVE_CONTEXT_TRACKING
|
||||||
bool
|
bool
|
||||||
help
|
help
|
||||||
|
|
|
@ -3,33 +3,18 @@
|
||||||
|
|
||||||
#include <asm/compiler.h>
|
#include <asm/compiler.h>
|
||||||
|
|
||||||
#define mb() \
|
#define mb() __asm__ __volatile__("mb": : :"memory")
|
||||||
__asm__ __volatile__("mb": : :"memory")
|
#define rmb() __asm__ __volatile__("mb": : :"memory")
|
||||||
|
#define wmb() __asm__ __volatile__("wmb": : :"memory")
|
||||||
|
|
||||||
#define rmb() \
|
#define read_barrier_depends() __asm__ __volatile__("mb": : :"memory")
|
||||||
__asm__ __volatile__("mb": : :"memory")
|
|
||||||
|
|
||||||
#define wmb() \
|
|
||||||
__asm__ __volatile__("wmb": : :"memory")
|
|
||||||
|
|
||||||
#define read_barrier_depends() \
|
|
||||||
__asm__ __volatile__("mb": : :"memory")
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
#define __ASM_SMP_MB "\tmb\n"
|
#define __ASM_SMP_MB "\tmb\n"
|
||||||
#define smp_mb() mb()
|
|
||||||
#define smp_rmb() rmb()
|
|
||||||
#define smp_wmb() wmb()
|
|
||||||
#define smp_read_barrier_depends() read_barrier_depends()
|
|
||||||
#else
|
#else
|
||||||
#define __ASM_SMP_MB
|
#define __ASM_SMP_MB
|
||||||
#define smp_mb() barrier()
|
|
||||||
#define smp_rmb() barrier()
|
|
||||||
#define smp_wmb() barrier()
|
|
||||||
#define smp_read_barrier_depends() do { } while (0)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define set_mb(var, value) \
|
#include <asm-generic/barrier.h>
|
||||||
do { var = value; mb(); } while (0)
|
|
||||||
|
|
||||||
#endif /* __BARRIER_H */
|
#endif /* __BARRIER_H */
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
generic-y += auxvec.h
|
generic-y += auxvec.h
|
||||||
|
generic-y += barrier.h
|
||||||
generic-y += bugs.h
|
generic-y += bugs.h
|
||||||
generic-y += bitsperlong.h
|
generic-y += bitsperlong.h
|
||||||
generic-y += clkdev.h
|
generic-y += clkdev.h
|
||||||
|
|
|
@ -190,6 +190,11 @@ static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
|
||||||
|
|
||||||
#endif /* !CONFIG_ARC_HAS_LLSC */
|
#endif /* !CONFIG_ARC_HAS_LLSC */
|
||||||
|
|
||||||
|
#define smp_mb__before_atomic_dec() barrier()
|
||||||
|
#define smp_mb__after_atomic_dec() barrier()
|
||||||
|
#define smp_mb__before_atomic_inc() barrier()
|
||||||
|
#define smp_mb__after_atomic_inc() barrier()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* __atomic_add_unless - add unless the number is a given value
|
* __atomic_add_unless - add unless the number is a given value
|
||||||
* @v: pointer of type atomic_t
|
* @v: pointer of type atomic_t
|
||||||
|
|
|
@ -30,11 +30,6 @@
|
||||||
#define smp_wmb() barrier()
|
#define smp_wmb() barrier()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define smp_mb__before_atomic_dec() barrier()
|
|
||||||
#define smp_mb__after_atomic_dec() barrier()
|
|
||||||
#define smp_mb__before_atomic_inc() barrier()
|
|
||||||
#define smp_mb__after_atomic_inc() barrier()
|
|
||||||
|
|
||||||
#define smp_read_barrier_depends() do { } while (0)
|
#define smp_read_barrier_depends() do { } while (0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -30,6 +30,7 @@ config ARM
|
||||||
select HAVE_BPF_JIT
|
select HAVE_BPF_JIT
|
||||||
select HAVE_CONTEXT_TRACKING
|
select HAVE_CONTEXT_TRACKING
|
||||||
select HAVE_C_RECORDMCOUNT
|
select HAVE_C_RECORDMCOUNT
|
||||||
|
select HAVE_CC_STACKPROTECTOR
|
||||||
select HAVE_DEBUG_KMEMLEAK
|
select HAVE_DEBUG_KMEMLEAK
|
||||||
select HAVE_DMA_API_DEBUG
|
select HAVE_DMA_API_DEBUG
|
||||||
select HAVE_DMA_ATTRS
|
select HAVE_DMA_ATTRS
|
||||||
|
@ -1856,18 +1857,6 @@ config SECCOMP
|
||||||
and the task is only allowed to execute a few safe syscalls
|
and the task is only allowed to execute a few safe syscalls
|
||||||
defined by each seccomp mode.
|
defined by each seccomp mode.
|
||||||
|
|
||||||
config CC_STACKPROTECTOR
|
|
||||||
bool "Enable -fstack-protector buffer overflow detection (EXPERIMENTAL)"
|
|
||||||
help
|
|
||||||
This option turns on the -fstack-protector GCC feature. This
|
|
||||||
feature puts, at the beginning of functions, a canary value on
|
|
||||||
the stack just before the return address, and validates
|
|
||||||
the value just before actually returning. Stack based buffer
|
|
||||||
overflows (that need to overwrite this return address) now also
|
|
||||||
overwrite the canary, which gets detected and the attack is then
|
|
||||||
neutralized via a kernel panic.
|
|
||||||
This feature requires gcc version 4.2 or above.
|
|
||||||
|
|
||||||
config SWIOTLB
|
config SWIOTLB
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
|
|
|
@ -40,10 +40,6 @@ ifeq ($(CONFIG_FRAME_POINTER),y)
|
||||||
KBUILD_CFLAGS +=-fno-omit-frame-pointer -mapcs -mno-sched-prolog
|
KBUILD_CFLAGS +=-fno-omit-frame-pointer -mapcs -mno-sched-prolog
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_CC_STACKPROTECTOR),y)
|
|
||||||
KBUILD_CFLAGS +=-fstack-protector
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifeq ($(CONFIG_CPU_BIG_ENDIAN),y)
|
ifeq ($(CONFIG_CPU_BIG_ENDIAN),y)
|
||||||
KBUILD_CPPFLAGS += -mbig-endian
|
KBUILD_CPPFLAGS += -mbig-endian
|
||||||
AS += -EB
|
AS += -EB
|
||||||
|
|
|
@ -127,6 +127,18 @@ asmlinkage void __div0(void)
|
||||||
error("Attempting division by 0!");
|
error("Attempting division by 0!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned long __stack_chk_guard;
|
||||||
|
|
||||||
|
void __stack_chk_guard_setup(void)
|
||||||
|
{
|
||||||
|
__stack_chk_guard = 0x000a0dff;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __stack_chk_fail(void)
|
||||||
|
{
|
||||||
|
error("stack-protector: Kernel stack is corrupted\n");
|
||||||
|
}
|
||||||
|
|
||||||
extern int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
|
extern int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
|
||||||
|
|
||||||
|
|
||||||
|
@ -137,6 +149,8 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
__stack_chk_guard_setup();
|
||||||
|
|
||||||
output_data = (unsigned char *)output_start;
|
output_data = (unsigned char *)output_start;
|
||||||
free_mem_ptr = free_mem_ptr_p;
|
free_mem_ptr = free_mem_ptr_p;
|
||||||
free_mem_end_ptr = free_mem_ptr_end_p;
|
free_mem_end_ptr = free_mem_ptr_end_p;
|
||||||
|
|
|
@ -559,7 +559,7 @@
|
||||||
compatible = "arm,pl330", "arm,primecell";
|
compatible = "arm,pl330", "arm,primecell";
|
||||||
reg = <0x10800000 0x1000>;
|
reg = <0x10800000 0x1000>;
|
||||||
interrupts = <0 33 0>;
|
interrupts = <0 33 0>;
|
||||||
clocks = <&clock 271>;
|
clocks = <&clock 346>;
|
||||||
clock-names = "apb_pclk";
|
clock-names = "apb_pclk";
|
||||||
#dma-cells = <1>;
|
#dma-cells = <1>;
|
||||||
#dma-channels = <8>;
|
#dma-channels = <8>;
|
||||||
|
|
|
@ -332,5 +332,12 @@
|
||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
timer@01c60000 {
|
||||||
|
compatible = "allwinner,sun5i-a13-hstimer";
|
||||||
|
reg = <0x01c60000 0x1000>;
|
||||||
|
interrupts = <82>, <83>;
|
||||||
|
clocks = <&ahb_gates 28>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -273,5 +273,12 @@
|
||||||
clock-frequency = <100000>;
|
clock-frequency = <100000>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
timer@01c60000 {
|
||||||
|
compatible = "allwinner,sun5i-a13-hstimer";
|
||||||
|
reg = <0x01c60000 0x1000>;
|
||||||
|
interrupts = <82>, <83>;
|
||||||
|
clocks = <&ahb_gates 28>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -395,6 +395,16 @@
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
hstimer@01c60000 {
|
||||||
|
compatible = "allwinner,sun7i-a20-hstimer";
|
||||||
|
reg = <0x01c60000 0x1000>;
|
||||||
|
interrupts = <0 81 1>,
|
||||||
|
<0 82 1>,
|
||||||
|
<0 83 1>,
|
||||||
|
<0 84 1>;
|
||||||
|
clocks = <&ahb_gates 28>;
|
||||||
|
};
|
||||||
|
|
||||||
gic: interrupt-controller@01c81000 {
|
gic: interrupt-controller@01c81000 {
|
||||||
compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
|
compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";
|
||||||
reg = <0x01c81000 0x1000>,
|
reg = <0x01c81000 0x1000>,
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
# define VFP_ABI_FRAME 0
|
# define VFP_ABI_FRAME 0
|
||||||
# define BSAES_ASM_EXTENDED_KEY
|
# define BSAES_ASM_EXTENDED_KEY
|
||||||
# define XTS_CHAIN_TWEAK
|
# define XTS_CHAIN_TWEAK
|
||||||
# define __ARM_ARCH__ __LINUX_ARM_ARCH__
|
# define __ARM_ARCH__ 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __thumb__
|
#ifdef __thumb__
|
||||||
|
|
|
@ -701,7 +701,7 @@ $code.=<<___;
|
||||||
# define VFP_ABI_FRAME 0
|
# define VFP_ABI_FRAME 0
|
||||||
# define BSAES_ASM_EXTENDED_KEY
|
# define BSAES_ASM_EXTENDED_KEY
|
||||||
# define XTS_CHAIN_TWEAK
|
# define XTS_CHAIN_TWEAK
|
||||||
# define __ARM_ARCH__ __LINUX_ARM_ARCH__
|
# define __ARM_ARCH__ 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __thumb__
|
#ifdef __thumb__
|
||||||
|
|
|
@ -59,6 +59,21 @@
|
||||||
#define smp_wmb() dmb(ishst)
|
#define smp_wmb() dmb(ishst)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define smp_store_release(p, v) \
|
||||||
|
do { \
|
||||||
|
compiletime_assert_atomic_type(*p); \
|
||||||
|
smp_mb(); \
|
||||||
|
ACCESS_ONCE(*p) = (v); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define smp_load_acquire(p) \
|
||||||
|
({ \
|
||||||
|
typeof(*p) ___p1 = ACCESS_ONCE(*p); \
|
||||||
|
compiletime_assert_atomic_type(*p); \
|
||||||
|
smp_mb(); \
|
||||||
|
___p1; \
|
||||||
|
})
|
||||||
|
|
||||||
#define read_barrier_depends() do { } while(0)
|
#define read_barrier_depends() do { } while(0)
|
||||||
#define smp_read_barrier_depends() do { } while(0)
|
#define smp_read_barrier_depends() do { } while(0)
|
||||||
|
|
||||||
|
|
|
@ -329,7 +329,7 @@ extern void _memset_io(volatile void __iomem *, int, size_t);
|
||||||
*/
|
*/
|
||||||
#define ioremap(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
#define ioremap(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
||||||
#define ioremap_nocache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
#define ioremap_nocache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE)
|
||||||
#define ioremap_cached(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_CACHED)
|
#define ioremap_cache(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_CACHED)
|
||||||
#define ioremap_wc(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_WC)
|
#define ioremap_wc(cookie,size) __arm_ioremap((cookie), (size), MT_DEVICE_WC)
|
||||||
#define iounmap __arm_iounmap
|
#define iounmap __arm_iounmap
|
||||||
|
|
||||||
|
|
|
@ -347,7 +347,8 @@ static inline __deprecated void *bus_to_virt(unsigned long x)
|
||||||
#define ARCH_PFN_OFFSET PHYS_PFN_OFFSET
|
#define ARCH_PFN_OFFSET PHYS_PFN_OFFSET
|
||||||
|
|
||||||
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
|
#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
|
||||||
#define virt_addr_valid(kaddr) ((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory)
|
#define virt_addr_valid(kaddr) (((unsigned long)(kaddr) >= PAGE_OFFSET && (unsigned long)(kaddr) < (unsigned long)high_memory) \
|
||||||
|
&& pfn_valid(__pa(kaddr) >> PAGE_SHIFT) )
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
|
|
||||||
#include <uapi/asm/unistd.h>
|
#include <uapi/asm/unistd.h>
|
||||||
|
|
||||||
#define __NR_syscalls (380)
|
#define __NR_syscalls (384)
|
||||||
#define __ARM_NR_cmpxchg (__ARM_NR_BASE+0x00fff0)
|
#define __ARM_NR_cmpxchg (__ARM_NR_BASE+0x00fff0)
|
||||||
|
|
||||||
#define __ARCH_WANT_STAT64
|
#define __ARCH_WANT_STAT64
|
||||||
|
|
|
@ -117,6 +117,6 @@ static inline bool set_phys_to_machine(unsigned long pfn, unsigned long mfn)
|
||||||
return __set_phys_to_machine(pfn, mfn);
|
return __set_phys_to_machine(pfn, mfn);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define xen_remap(cookie, size) ioremap_cached((cookie), (size));
|
#define xen_remap(cookie, size) ioremap_cache((cookie), (size));
|
||||||
|
|
||||||
#endif /* _ASM_ARM_XEN_PAGE_H */
|
#endif /* _ASM_ARM_XEN_PAGE_H */
|
||||||
|
|
|
@ -406,6 +406,8 @@
|
||||||
#define __NR_process_vm_writev (__NR_SYSCALL_BASE+377)
|
#define __NR_process_vm_writev (__NR_SYSCALL_BASE+377)
|
||||||
#define __NR_kcmp (__NR_SYSCALL_BASE+378)
|
#define __NR_kcmp (__NR_SYSCALL_BASE+378)
|
||||||
#define __NR_finit_module (__NR_SYSCALL_BASE+379)
|
#define __NR_finit_module (__NR_SYSCALL_BASE+379)
|
||||||
|
#define __NR_sched_setattr (__NR_SYSCALL_BASE+380)
|
||||||
|
#define __NR_sched_getattr (__NR_SYSCALL_BASE+381)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This may need to be greater than __NR_last_syscall+1 in order to
|
* This may need to be greater than __NR_last_syscall+1 in order to
|
||||||
|
|
|
@ -389,6 +389,8 @@
|
||||||
CALL(sys_process_vm_writev)
|
CALL(sys_process_vm_writev)
|
||||||
CALL(sys_kcmp)
|
CALL(sys_kcmp)
|
||||||
CALL(sys_finit_module)
|
CALL(sys_finit_module)
|
||||||
|
/* 380 */ CALL(sys_sched_setattr)
|
||||||
|
CALL(sys_sched_getattr)
|
||||||
#ifndef syscalls_counted
|
#ifndef syscalls_counted
|
||||||
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
||||||
#define syscalls_counted
|
#define syscalls_counted
|
||||||
|
|
|
@ -171,7 +171,7 @@ void __init arm_dt_init_cpu_maps(void)
|
||||||
|
|
||||||
bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
|
bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
|
||||||
{
|
{
|
||||||
return (phys_id & MPIDR_HWID_BITMASK) == cpu_logical_map(cpu);
|
return phys_id == cpu_logical_map(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const void * __init arch_get_next_mach(const char *const **match)
|
static const void * __init arch_get_next_mach(const char *const **match)
|
||||||
|
|
|
@ -99,10 +99,6 @@ int armpmu_event_set_period(struct perf_event *event)
|
||||||
s64 period = hwc->sample_period;
|
s64 period = hwc->sample_period;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
/* The period may have been changed by PERF_EVENT_IOC_PERIOD */
|
|
||||||
if (unlikely(period != hwc->last_period))
|
|
||||||
left = period - (hwc->last_period - left);
|
|
||||||
|
|
||||||
if (unlikely(left <= -period)) {
|
if (unlikely(left <= -period)) {
|
||||||
left = period;
|
left = period;
|
||||||
local64_set(&hwc->period_left, left);
|
local64_set(&hwc->period_left, left);
|
||||||
|
|
|
@ -254,7 +254,7 @@ static int probe_current_pmu(struct arm_pmu *pmu)
|
||||||
static int cpu_pmu_device_probe(struct platform_device *pdev)
|
static int cpu_pmu_device_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
const struct of_device_id *of_id;
|
const struct of_device_id *of_id;
|
||||||
int (*init_fn)(struct arm_pmu *);
|
const int (*init_fn)(struct arm_pmu *);
|
||||||
struct device_node *node = pdev->dev.of_node;
|
struct device_node *node = pdev->dev.of_node;
|
||||||
struct arm_pmu *pmu;
|
struct arm_pmu *pmu;
|
||||||
int ret = -ENODEV;
|
int ret = -ENODEV;
|
||||||
|
|
|
@ -36,7 +36,13 @@
|
||||||
#include <asm/system_misc.h>
|
#include <asm/system_misc.h>
|
||||||
#include <asm/opcodes.h>
|
#include <asm/opcodes.h>
|
||||||
|
|
||||||
static const char *handler[]= { "prefetch abort", "data abort", "address exception", "interrupt" };
|
static const char *handler[]= {
|
||||||
|
"prefetch abort",
|
||||||
|
"data abort",
|
||||||
|
"address exception",
|
||||||
|
"interrupt",
|
||||||
|
"undefined instruction",
|
||||||
|
};
|
||||||
|
|
||||||
void *vectors_page;
|
void *vectors_page;
|
||||||
|
|
||||||
|
@ -425,9 +431,10 @@ asmlinkage void __exception do_undefinstr(struct pt_regs *regs)
|
||||||
instr2 = __mem_to_opcode_thumb16(instr2);
|
instr2 = __mem_to_opcode_thumb16(instr2);
|
||||||
instr = __opcode_thumb32_compose(instr, instr2);
|
instr = __opcode_thumb32_compose(instr, instr2);
|
||||||
}
|
}
|
||||||
} else if (get_user(instr, (u32 __user *)pc)) {
|
} else {
|
||||||
|
if (get_user(instr, (u32 __user *)pc))
|
||||||
|
goto die_sig;
|
||||||
instr = __mem_to_opcode_arm(instr);
|
instr = __mem_to_opcode_arm(instr);
|
||||||
goto die_sig;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (call_undef_hook(regs, instr) == 0)
|
if (call_undef_hook(regs, instr) == 0)
|
||||||
|
|
|
@ -96,11 +96,12 @@ static struct irqaction footbridge_timer_irq = {
|
||||||
void __init footbridge_timer_init(void)
|
void __init footbridge_timer_init(void)
|
||||||
{
|
{
|
||||||
struct clock_event_device *ce = &ckevt_dc21285;
|
struct clock_event_device *ce = &ckevt_dc21285;
|
||||||
|
unsigned rate = DIV_ROUND_CLOSEST(mem_fclk_21285, 16);
|
||||||
|
|
||||||
clocksource_register_hz(&cksrc_dc21285, (mem_fclk_21285 + 8) / 16);
|
clocksource_register_hz(&cksrc_dc21285, rate);
|
||||||
|
|
||||||
setup_irq(ce->irq, &footbridge_timer_irq);
|
setup_irq(ce->irq, &footbridge_timer_irq);
|
||||||
|
|
||||||
ce->cpumask = cpumask_of(smp_processor_id());
|
ce->cpumask = cpumask_of(smp_processor_id());
|
||||||
clockevents_config_and_register(ce, mem_fclk_21285, 0x4, 0xffffff);
|
clockevents_config_and_register(ce, rate, 0x4, 0xffffff);
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,7 @@ static void __init highbank_scu_map_io(void)
|
||||||
|
|
||||||
static void highbank_l2x0_disable(void)
|
static void highbank_l2x0_disable(void)
|
||||||
{
|
{
|
||||||
|
outer_flush_all();
|
||||||
/* Disable PL310 L2 Cache controller */
|
/* Disable PL310 L2 Cache controller */
|
||||||
highbank_smc1(0x102, 0x0);
|
highbank_smc1(0x102, 0x0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,6 +162,7 @@ void __iomem *omap4_get_l2cache_base(void)
|
||||||
|
|
||||||
static void omap4_l2x0_disable(void)
|
static void omap4_l2x0_disable(void)
|
||||||
{
|
{
|
||||||
|
outer_flush_all();
|
||||||
/* Disable PL310 L2 Cache controller */
|
/* Disable PL310 L2 Cache controller */
|
||||||
omap_smc1(0x102, 0x0);
|
omap_smc1(0x102, 0x0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -483,7 +483,7 @@ static struct platform_device lcdc0_device = {
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &lcdc0_info,
|
.platform_data = &lcdc0_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -580,7 +580,7 @@ static struct platform_device hdmi_lcdc_device = {
|
||||||
.id = 1,
|
.id = 1,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &hdmi_lcdc_info,
|
.platform_data = &hdmi_lcdc_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -334,7 +334,7 @@ static struct platform_device lcdc_device = {
|
||||||
.resource = lcdc_resources,
|
.resource = lcdc_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &lcdc_info,
|
.platform_data = &lcdc_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -409,7 +409,7 @@ static struct platform_device lcdc_device = {
|
||||||
.resource = lcdc_resources,
|
.resource = lcdc_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &lcdc_info,
|
.platform_data = &lcdc_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -499,7 +499,7 @@ static struct platform_device hdmi_lcdc_device = {
|
||||||
.id = 1,
|
.id = 1,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &hdmi_lcdc_info,
|
.platform_data = &hdmi_lcdc_info,
|
||||||
.coherent_dma_mask = ~0,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -12,3 +12,4 @@ config ARCH_SUNXI
|
||||||
select PINCTRL_SUNXI
|
select PINCTRL_SUNXI
|
||||||
select SPARSE_IRQ
|
select SPARSE_IRQ
|
||||||
select SUN4I_TIMER
|
select SUN4I_TIMER
|
||||||
|
select SUN5I_HSTIMER
|
||||||
|
|
|
@ -175,16 +175,16 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page)
|
||||||
unsigned long i;
|
unsigned long i;
|
||||||
if (cache_is_vipt_nonaliasing()) {
|
if (cache_is_vipt_nonaliasing()) {
|
||||||
for (i = 0; i < (1 << compound_order(page)); i++) {
|
for (i = 0; i < (1 << compound_order(page)); i++) {
|
||||||
void *addr = kmap_atomic(page);
|
void *addr = kmap_atomic(page + i);
|
||||||
__cpuc_flush_dcache_area(addr, PAGE_SIZE);
|
__cpuc_flush_dcache_area(addr, PAGE_SIZE);
|
||||||
kunmap_atomic(addr);
|
kunmap_atomic(addr);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < (1 << compound_order(page)); i++) {
|
for (i = 0; i < (1 << compound_order(page)); i++) {
|
||||||
void *addr = kmap_high_get(page);
|
void *addr = kmap_high_get(page + i);
|
||||||
if (addr) {
|
if (addr) {
|
||||||
__cpuc_flush_dcache_area(addr, PAGE_SIZE);
|
__cpuc_flush_dcache_area(addr, PAGE_SIZE);
|
||||||
kunmap_high(page);
|
kunmap_high(page + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,7 +229,7 @@ void __init setup_dma_zone(const struct machine_desc *mdesc)
|
||||||
#ifdef CONFIG_ZONE_DMA
|
#ifdef CONFIG_ZONE_DMA
|
||||||
if (mdesc->dma_zone_size) {
|
if (mdesc->dma_zone_size) {
|
||||||
arm_dma_zone_size = mdesc->dma_zone_size;
|
arm_dma_zone_size = mdesc->dma_zone_size;
|
||||||
arm_dma_limit = __pv_phys_offset + arm_dma_zone_size - 1;
|
arm_dma_limit = PHYS_OFFSET + arm_dma_zone_size - 1;
|
||||||
} else
|
} else
|
||||||
arm_dma_limit = 0xffffffff;
|
arm_dma_limit = 0xffffffff;
|
||||||
arm_dma_pfn_limit = arm_dma_limit >> PAGE_SHIFT;
|
arm_dma_pfn_limit = arm_dma_limit >> PAGE_SHIFT;
|
||||||
|
|
|
@ -641,10 +641,10 @@ load_ind:
|
||||||
emit(ARM_MUL(r_A, r_A, r_X), ctx);
|
emit(ARM_MUL(r_A, r_A, r_X), ctx);
|
||||||
break;
|
break;
|
||||||
case BPF_S_ALU_DIV_K:
|
case BPF_S_ALU_DIV_K:
|
||||||
/* current k == reciprocal_value(userspace k) */
|
if (k == 1)
|
||||||
|
break;
|
||||||
emit_mov_i(r_scratch, k, ctx);
|
emit_mov_i(r_scratch, k, ctx);
|
||||||
/* A = top 32 bits of the product */
|
emit_udiv(r_A, r_A, r_scratch, ctx);
|
||||||
emit(ARM_UMULL(r_scratch, r_A, r_A, r_scratch), ctx);
|
|
||||||
break;
|
break;
|
||||||
case BPF_S_ALU_DIV_X:
|
case BPF_S_ALU_DIV_X:
|
||||||
update_on_xread(ctx);
|
update_on_xread(ctx);
|
||||||
|
|
|
@ -35,10 +35,60 @@
|
||||||
#define smp_mb() barrier()
|
#define smp_mb() barrier()
|
||||||
#define smp_rmb() barrier()
|
#define smp_rmb() barrier()
|
||||||
#define smp_wmb() barrier()
|
#define smp_wmb() barrier()
|
||||||
|
|
||||||
|
#define smp_store_release(p, v) \
|
||||||
|
do { \
|
||||||
|
compiletime_assert_atomic_type(*p); \
|
||||||
|
smp_mb(); \
|
||||||
|
ACCESS_ONCE(*p) = (v); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define smp_load_acquire(p) \
|
||||||
|
({ \
|
||||||
|
typeof(*p) ___p1 = ACCESS_ONCE(*p); \
|
||||||
|
compiletime_assert_atomic_type(*p); \
|
||||||
|
smp_mb(); \
|
||||||
|
___p1; \
|
||||||
|
})
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define smp_mb() asm volatile("dmb ish" : : : "memory")
|
#define smp_mb() asm volatile("dmb ish" : : : "memory")
|
||||||
#define smp_rmb() asm volatile("dmb ishld" : : : "memory")
|
#define smp_rmb() asm volatile("dmb ishld" : : : "memory")
|
||||||
#define smp_wmb() asm volatile("dmb ishst" : : : "memory")
|
#define smp_wmb() asm volatile("dmb ishst" : : : "memory")
|
||||||
|
|
||||||
|
#define smp_store_release(p, v) \
|
||||||
|
do { \
|
||||||
|
compiletime_assert_atomic_type(*p); \
|
||||||
|
switch (sizeof(*p)) { \
|
||||||
|
case 4: \
|
||||||
|
asm volatile ("stlr %w1, %0" \
|
||||||
|
: "=Q" (*p) : "r" (v) : "memory"); \
|
||||||
|
break; \
|
||||||
|
case 8: \
|
||||||
|
asm volatile ("stlr %1, %0" \
|
||||||
|
: "=Q" (*p) : "r" (v) : "memory"); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define smp_load_acquire(p) \
|
||||||
|
({ \
|
||||||
|
typeof(*p) ___p1; \
|
||||||
|
compiletime_assert_atomic_type(*p); \
|
||||||
|
switch (sizeof(*p)) { \
|
||||||
|
case 4: \
|
||||||
|
asm volatile ("ldar %w0, %1" \
|
||||||
|
: "=r" (___p1) : "Q" (*p) : "memory"); \
|
||||||
|
break; \
|
||||||
|
case 8: \
|
||||||
|
asm volatile ("ldar %0, %1" \
|
||||||
|
: "=r" (___p1) : "Q" (*p) : "memory"); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
___p1; \
|
||||||
|
})
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define read_barrier_depends() do { } while(0)
|
#define read_barrier_depends() do { } while(0)
|
||||||
|
|
|
@ -229,7 +229,7 @@ extern void __iomem *__ioremap(phys_addr_t phys_addr, size_t size, pgprot_t prot
|
||||||
extern void __iounmap(volatile void __iomem *addr);
|
extern void __iounmap(volatile void __iomem *addr);
|
||||||
extern void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size);
|
extern void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size);
|
||||||
|
|
||||||
#define PROT_DEFAULT (pgprot_default | PTE_DIRTY)
|
#define PROT_DEFAULT (PTE_TYPE_PAGE | PTE_AF | PTE_DIRTY)
|
||||||
#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
#define PROT_DEVICE_nGnRE (PROT_DEFAULT | PTE_PXN | PTE_UXN | PTE_ATTRINDX(MT_DEVICE_nGnRE))
|
||||||
#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC))
|
#define PROT_NORMAL_NC (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL_NC))
|
||||||
#define PROT_NORMAL (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL))
|
#define PROT_NORMAL (PROT_DEFAULT | PTE_ATTRINDX(MT_NORMAL))
|
||||||
|
|
|
@ -8,22 +8,15 @@
|
||||||
#ifndef __ASM_AVR32_BARRIER_H
|
#ifndef __ASM_AVR32_BARRIER_H
|
||||||
#define __ASM_AVR32_BARRIER_H
|
#define __ASM_AVR32_BARRIER_H
|
||||||
|
|
||||||
#define nop() asm volatile("nop")
|
/*
|
||||||
|
* Weirdest thing ever.. no full barrier, but it has a write barrier!
|
||||||
#define mb() asm volatile("" : : : "memory")
|
*/
|
||||||
#define rmb() mb()
|
#define wmb() asm volatile("sync 0" : : : "memory")
|
||||||
#define wmb() asm volatile("sync 0" : : : "memory")
|
|
||||||
#define read_barrier_depends() do { } while(0)
|
|
||||||
#define set_mb(var, value) do { var = value; mb(); } while(0)
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
# error "The AVR32 port does not support SMP"
|
# error "The AVR32 port does not support SMP"
|
||||||
#else
|
|
||||||
# define smp_mb() barrier()
|
|
||||||
# define smp_rmb() barrier()
|
|
||||||
# define smp_wmb() barrier()
|
|
||||||
# define smp_read_barrier_depends() do { } while(0)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <asm-generic/barrier.h>
|
||||||
|
|
||||||
#endif /* __ASM_AVR32_BARRIER_H */
|
#endif /* __ASM_AVR32_BARRIER_H */
|
||||||
|
|
|
@ -23,26 +23,10 @@
|
||||||
# define rmb() do { barrier(); smp_check_barrier(); } while (0)
|
# define rmb() do { barrier(); smp_check_barrier(); } while (0)
|
||||||
# define wmb() do { barrier(); smp_mark_barrier(); } while (0)
|
# define wmb() do { barrier(); smp_mark_barrier(); } while (0)
|
||||||
# define read_barrier_depends() do { barrier(); smp_check_barrier(); } while (0)
|
# define read_barrier_depends() do { barrier(); smp_check_barrier(); } while (0)
|
||||||
#else
|
|
||||||
# define mb() barrier()
|
|
||||||
# define rmb() barrier()
|
|
||||||
# define wmb() barrier()
|
|
||||||
# define read_barrier_depends() do { } while (0)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else /* !CONFIG_SMP */
|
|
||||||
|
|
||||||
#define mb() barrier()
|
|
||||||
#define rmb() barrier()
|
|
||||||
#define wmb() barrier()
|
|
||||||
#define read_barrier_depends() do { } while (0)
|
|
||||||
|
|
||||||
#endif /* !CONFIG_SMP */
|
#endif /* !CONFIG_SMP */
|
||||||
|
|
||||||
#define smp_mb() mb()
|
#include <asm-generic/barrier.h>
|
||||||
#define smp_rmb() rmb()
|
|
||||||
#define smp_wmb() wmb()
|
|
||||||
#define set_mb(var, value) do { var = value; mb(); } while (0)
|
|
||||||
#define smp_read_barrier_depends() read_barrier_depends()
|
|
||||||
|
|
||||||
#endif /* _BLACKFIN_BARRIER_H */
|
#endif /* _BLACKFIN_BARRIER_H */
|
||||||
|
|
|
@ -3,6 +3,7 @@ header-y += arch-v10/
|
||||||
header-y += arch-v32/
|
header-y += arch-v32/
|
||||||
|
|
||||||
|
|
||||||
|
generic-y += barrier.h
|
||||||
generic-y += clkdev.h
|
generic-y += clkdev.h
|
||||||
generic-y += exec.h
|
generic-y += exec.h
|
||||||
generic-y += kvm_para.h
|
generic-y += kvm_para.h
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
#ifndef __ASM_CRIS_BARRIER_H
|
|
||||||
#define __ASM_CRIS_BARRIER_H
|
|
||||||
|
|
||||||
#define nop() __asm__ __volatile__ ("nop");
|
|
||||||
|
|
||||||
#define barrier() __asm__ __volatile__("": : :"memory")
|
|
||||||
#define mb() barrier()
|
|
||||||
#define rmb() mb()
|
|
||||||
#define wmb() mb()
|
|
||||||
#define read_barrier_depends() do { } while(0)
|
|
||||||
#define set_mb(var, value) do { var = value; mb(); } while (0)
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
#define smp_mb() mb()
|
|
||||||
#define smp_rmb() rmb()
|
|
||||||
#define smp_wmb() wmb()
|
|
||||||
#define smp_read_barrier_depends() read_barrier_depends()
|
|
||||||
#else
|
|
||||||
#define smp_mb() barrier()
|
|
||||||
#define smp_rmb() barrier()
|
|
||||||
#define smp_wmb() barrier()
|
|
||||||
#define smp_read_barrier_depends() do { } while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __ASM_CRIS_BARRIER_H */
|
|
|
@ -17,13 +17,7 @@
|
||||||
#define mb() asm volatile ("membar" : : :"memory")
|
#define mb() asm volatile ("membar" : : :"memory")
|
||||||
#define rmb() asm volatile ("membar" : : :"memory")
|
#define rmb() asm volatile ("membar" : : :"memory")
|
||||||
#define wmb() asm volatile ("membar" : : :"memory")
|
#define wmb() asm volatile ("membar" : : :"memory")
|
||||||
#define read_barrier_depends() do { } while (0)
|
|
||||||
|
|
||||||
#define smp_mb() barrier()
|
#include <asm-generic/barrier.h>
|
||||||
#define smp_rmb() barrier()
|
|
||||||
#define smp_wmb() barrier()
|
|
||||||
#define smp_read_barrier_depends() do {} while(0)
|
|
||||||
#define set_mb(var, value) \
|
|
||||||
do { var = (value); barrier(); } while (0)
|
|
||||||
|
|
||||||
#endif /* _ASM_BARRIER_H */
|
#endif /* _ASM_BARRIER_H */
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
header-y += ucontext.h
|
header-y += ucontext.h
|
||||||
|
|
||||||
generic-y += auxvec.h
|
generic-y += auxvec.h
|
||||||
|
generic-y += barrier.h
|
||||||
generic-y += bug.h
|
generic-y += bug.h
|
||||||
generic-y += bugs.h
|
generic-y += bugs.h
|
||||||
generic-y += clkdev.h
|
generic-y += clkdev.h
|
||||||
|
|
|
@ -160,8 +160,12 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
|
||||||
#define atomic_sub_and_test(i, v) (atomic_sub_return(i, (v)) == 0)
|
#define atomic_sub_and_test(i, v) (atomic_sub_return(i, (v)) == 0)
|
||||||
#define atomic_add_negative(i, v) (atomic_add_return(i, (v)) < 0)
|
#define atomic_add_negative(i, v) (atomic_add_return(i, (v)) < 0)
|
||||||
|
|
||||||
|
|
||||||
#define atomic_inc_return(v) (atomic_add_return(1, v))
|
#define atomic_inc_return(v) (atomic_add_return(1, v))
|
||||||
#define atomic_dec_return(v) (atomic_sub_return(1, v))
|
#define atomic_dec_return(v) (atomic_sub_return(1, v))
|
||||||
|
|
||||||
|
#define smp_mb__before_atomic_dec() barrier()
|
||||||
|
#define smp_mb__after_atomic_dec() barrier()
|
||||||
|
#define smp_mb__before_atomic_inc() barrier()
|
||||||
|
#define smp_mb__after_atomic_inc() barrier()
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -29,10 +29,6 @@
|
||||||
#define smp_read_barrier_depends() barrier()
|
#define smp_read_barrier_depends() barrier()
|
||||||
#define smp_wmb() barrier()
|
#define smp_wmb() barrier()
|
||||||
#define smp_mb() barrier()
|
#define smp_mb() barrier()
|
||||||
#define smp_mb__before_atomic_dec() barrier()
|
|
||||||
#define smp_mb__after_atomic_dec() barrier()
|
|
||||||
#define smp_mb__before_atomic_inc() barrier()
|
|
||||||
#define smp_mb__after_atomic_inc() barrier()
|
|
||||||
|
|
||||||
/* Set a value and use a memory barrier. Used by the scheduler somewhere. */
|
/* Set a value and use a memory barrier. Used by the scheduler somewhere. */
|
||||||
#define set_mb(var, value) \
|
#define set_mb(var, value) \
|
||||||
|
|
|
@ -147,9 +147,6 @@ config PARAVIRT
|
||||||
over full virtualization. However, when run without a hypervisor
|
over full virtualization. However, when run without a hypervisor
|
||||||
the kernel is theoretically slower and slightly larger.
|
the kernel is theoretically slower and slightly larger.
|
||||||
|
|
||||||
|
|
||||||
source "arch/ia64/xen/Kconfig"
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
choice
|
choice
|
||||||
|
@ -175,7 +172,6 @@ config IA64_GENERIC
|
||||||
SGI-SN2 For SGI Altix systems
|
SGI-SN2 For SGI Altix systems
|
||||||
SGI-UV For SGI UV systems
|
SGI-UV For SGI UV systems
|
||||||
Ski-simulator For the HP simulator <http://www.hpl.hp.com/research/linux/ski/>
|
Ski-simulator For the HP simulator <http://www.hpl.hp.com/research/linux/ski/>
|
||||||
Xen-domU For xen domU system
|
|
||||||
|
|
||||||
If you don't know what to do, choose "generic".
|
If you don't know what to do, choose "generic".
|
||||||
|
|
||||||
|
@ -231,14 +227,6 @@ config IA64_HP_SIM
|
||||||
bool "Ski-simulator"
|
bool "Ski-simulator"
|
||||||
select SWIOTLB
|
select SWIOTLB
|
||||||
|
|
||||||
config IA64_XEN_GUEST
|
|
||||||
bool "Xen guest"
|
|
||||||
select SWIOTLB
|
|
||||||
depends on XEN
|
|
||||||
help
|
|
||||||
Build a kernel that runs on Xen guest domain. At this moment only
|
|
||||||
16KB page size in supported.
|
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
choice
|
choice
|
||||||
|
|
|
@ -51,11 +51,9 @@ core-$(CONFIG_IA64_DIG_VTD) += arch/ia64/dig/
|
||||||
core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/
|
core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/
|
||||||
core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/
|
core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/
|
||||||
core-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/dig/
|
core-$(CONFIG_IA64_HP_ZX1_SWIOTLB) += arch/ia64/dig/
|
||||||
core-$(CONFIG_IA64_XEN_GUEST) += arch/ia64/dig/
|
|
||||||
core-$(CONFIG_IA64_SGI_SN2) += arch/ia64/sn/
|
core-$(CONFIG_IA64_SGI_SN2) += arch/ia64/sn/
|
||||||
core-$(CONFIG_IA64_SGI_UV) += arch/ia64/uv/
|
core-$(CONFIG_IA64_SGI_UV) += arch/ia64/uv/
|
||||||
core-$(CONFIG_KVM) += arch/ia64/kvm/
|
core-$(CONFIG_KVM) += arch/ia64/kvm/
|
||||||
core-$(CONFIG_XEN) += arch/ia64/xen/
|
|
||||||
|
|
||||||
drivers-$(CONFIG_PCI) += arch/ia64/pci/
|
drivers-$(CONFIG_PCI) += arch/ia64/pci/
|
||||||
drivers-$(CONFIG_IA64_HP_SIM) += arch/ia64/hp/sim/
|
drivers-$(CONFIG_IA64_HP_SIM) += arch/ia64/hp/sim/
|
||||||
|
|
|
@ -1,199 +0,0 @@
|
||||||
CONFIG_EXPERIMENTAL=y
|
|
||||||
CONFIG_SYSVIPC=y
|
|
||||||
CONFIG_POSIX_MQUEUE=y
|
|
||||||
CONFIG_IKCONFIG=y
|
|
||||||
CONFIG_IKCONFIG_PROC=y
|
|
||||||
CONFIG_LOG_BUF_SHIFT=20
|
|
||||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
|
||||||
CONFIG_KALLSYMS_ALL=y
|
|
||||||
CONFIG_MODULES=y
|
|
||||||
CONFIG_MODULE_UNLOAD=y
|
|
||||||
CONFIG_MODVERSIONS=y
|
|
||||||
CONFIG_MODULE_SRCVERSION_ALL=y
|
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
|
||||||
CONFIG_PARAVIRT_GUEST=y
|
|
||||||
CONFIG_IA64_XEN_GUEST=y
|
|
||||||
CONFIG_MCKINLEY=y
|
|
||||||
CONFIG_IA64_CYCLONE=y
|
|
||||||
CONFIG_SMP=y
|
|
||||||
CONFIG_NR_CPUS=16
|
|
||||||
CONFIG_HOTPLUG_CPU=y
|
|
||||||
CONFIG_PERMIT_BSP_REMOVE=y
|
|
||||||
CONFIG_FORCE_CPEI_RETARGET=y
|
|
||||||
CONFIG_IA64_MCA_RECOVERY=y
|
|
||||||
CONFIG_PERFMON=y
|
|
||||||
CONFIG_IA64_PALINFO=y
|
|
||||||
CONFIG_KEXEC=y
|
|
||||||
CONFIG_EFI_VARS=y
|
|
||||||
CONFIG_BINFMT_MISC=m
|
|
||||||
CONFIG_ACPI_PROCFS=y
|
|
||||||
CONFIG_ACPI_BUTTON=m
|
|
||||||
CONFIG_ACPI_FAN=m
|
|
||||||
CONFIG_ACPI_PROCESSOR=m
|
|
||||||
CONFIG_ACPI_CONTAINER=m
|
|
||||||
CONFIG_HOTPLUG_PCI=y
|
|
||||||
CONFIG_HOTPLUG_PCI_ACPI=m
|
|
||||||
CONFIG_PACKET=y
|
|
||||||
CONFIG_UNIX=y
|
|
||||||
CONFIG_INET=y
|
|
||||||
CONFIG_IP_MULTICAST=y
|
|
||||||
CONFIG_ARPD=y
|
|
||||||
CONFIG_SYN_COOKIES=y
|
|
||||||
# CONFIG_INET_LRO is not set
|
|
||||||
# CONFIG_IPV6 is not set
|
|
||||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
|
||||||
CONFIG_BLK_DEV_LOOP=m
|
|
||||||
CONFIG_BLK_DEV_CRYPTOLOOP=m
|
|
||||||
CONFIG_BLK_DEV_NBD=m
|
|
||||||
CONFIG_BLK_DEV_RAM=y
|
|
||||||
CONFIG_IDE=y
|
|
||||||
CONFIG_BLK_DEV_IDECD=y
|
|
||||||
CONFIG_BLK_DEV_GENERIC=y
|
|
||||||
CONFIG_BLK_DEV_CMD64X=y
|
|
||||||
CONFIG_BLK_DEV_PIIX=y
|
|
||||||
CONFIG_SCSI=y
|
|
||||||
CONFIG_BLK_DEV_SD=y
|
|
||||||
CONFIG_CHR_DEV_ST=m
|
|
||||||
CONFIG_BLK_DEV_SR=m
|
|
||||||
CONFIG_CHR_DEV_SG=m
|
|
||||||
CONFIG_SCSI_SYM53C8XX_2=y
|
|
||||||
CONFIG_SCSI_QLOGIC_1280=y
|
|
||||||
CONFIG_MD=y
|
|
||||||
CONFIG_BLK_DEV_MD=m
|
|
||||||
CONFIG_MD_LINEAR=m
|
|
||||||
CONFIG_MD_RAID0=m
|
|
||||||
CONFIG_MD_RAID1=m
|
|
||||||
CONFIG_MD_MULTIPATH=m
|
|
||||||
CONFIG_BLK_DEV_DM=m
|
|
||||||
CONFIG_DM_CRYPT=m
|
|
||||||
CONFIG_DM_SNAPSHOT=m
|
|
||||||
CONFIG_DM_MIRROR=m
|
|
||||||
CONFIG_DM_ZERO=m
|
|
||||||
CONFIG_FUSION=y
|
|
||||||
CONFIG_FUSION_SPI=y
|
|
||||||
CONFIG_FUSION_FC=y
|
|
||||||
CONFIG_FUSION_CTL=y
|
|
||||||
CONFIG_NETDEVICES=y
|
|
||||||
CONFIG_DUMMY=m
|
|
||||||
CONFIG_NET_ETHERNET=y
|
|
||||||
CONFIG_NET_TULIP=y
|
|
||||||
CONFIG_TULIP=m
|
|
||||||
CONFIG_NET_PCI=y
|
|
||||||
CONFIG_NET_VENDOR_INTEL=y
|
|
||||||
CONFIG_E100=m
|
|
||||||
CONFIG_E1000=y
|
|
||||||
CONFIG_TIGON3=y
|
|
||||||
CONFIG_NETCONSOLE=y
|
|
||||||
# CONFIG_SERIO_SERPORT is not set
|
|
||||||
CONFIG_GAMEPORT=m
|
|
||||||
CONFIG_SERIAL_NONSTANDARD=y
|
|
||||||
CONFIG_SERIAL_8250=y
|
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
|
||||||
CONFIG_SERIAL_8250_NR_UARTS=6
|
|
||||||
CONFIG_SERIAL_8250_EXTENDED=y
|
|
||||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
|
||||||
# CONFIG_HW_RANDOM is not set
|
|
||||||
CONFIG_EFI_RTC=y
|
|
||||||
CONFIG_RAW_DRIVER=m
|
|
||||||
CONFIG_HPET=y
|
|
||||||
CONFIG_AGP=m
|
|
||||||
CONFIG_DRM=m
|
|
||||||
CONFIG_DRM_TDFX=m
|
|
||||||
CONFIG_DRM_R128=m
|
|
||||||
CONFIG_DRM_RADEON=m
|
|
||||||
CONFIG_DRM_MGA=m
|
|
||||||
CONFIG_DRM_SIS=m
|
|
||||||
CONFIG_HID_GYRATION=y
|
|
||||||
CONFIG_HID_NTRIG=y
|
|
||||||
CONFIG_HID_PANTHERLORD=y
|
|
||||||
CONFIG_HID_PETALYNX=y
|
|
||||||
CONFIG_HID_SAMSUNG=y
|
|
||||||
CONFIG_HID_SONY=y
|
|
||||||
CONFIG_HID_SUNPLUS=y
|
|
||||||
CONFIG_HID_TOPSEED=y
|
|
||||||
CONFIG_USB=y
|
|
||||||
CONFIG_USB_DEVICEFS=y
|
|
||||||
CONFIG_USB_EHCI_HCD=m
|
|
||||||
CONFIG_USB_OHCI_HCD=m
|
|
||||||
CONFIG_USB_UHCI_HCD=y
|
|
||||||
CONFIG_USB_STORAGE=m
|
|
||||||
CONFIG_EXT2_FS=y
|
|
||||||
CONFIG_EXT2_FS_XATTR=y
|
|
||||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
|
||||||
CONFIG_EXT2_FS_SECURITY=y
|
|
||||||
CONFIG_EXT3_FS=y
|
|
||||||
CONFIG_EXT3_FS_POSIX_ACL=y
|
|
||||||
CONFIG_EXT3_FS_SECURITY=y
|
|
||||||
CONFIG_REISERFS_FS=y
|
|
||||||
CONFIG_REISERFS_FS_XATTR=y
|
|
||||||
CONFIG_REISERFS_FS_POSIX_ACL=y
|
|
||||||
CONFIG_REISERFS_FS_SECURITY=y
|
|
||||||
CONFIG_XFS_FS=y
|
|
||||||
CONFIG_AUTOFS_FS=y
|
|
||||||
CONFIG_AUTOFS4_FS=y
|
|
||||||
CONFIG_ISO9660_FS=m
|
|
||||||
CONFIG_JOLIET=y
|
|
||||||
CONFIG_UDF_FS=m
|
|
||||||
CONFIG_VFAT_FS=y
|
|
||||||
CONFIG_NTFS_FS=m
|
|
||||||
CONFIG_PROC_KCORE=y
|
|
||||||
CONFIG_TMPFS=y
|
|
||||||
CONFIG_HUGETLBFS=y
|
|
||||||
CONFIG_NFS_FS=m
|
|
||||||
CONFIG_NFS_V3=y
|
|
||||||
CONFIG_NFS_V4=y
|
|
||||||
CONFIG_NFSD=m
|
|
||||||
CONFIG_NFSD_V4=y
|
|
||||||
CONFIG_SMB_FS=m
|
|
||||||
CONFIG_SMB_NLS_DEFAULT=y
|
|
||||||
CONFIG_CIFS=m
|
|
||||||
CONFIG_PARTITION_ADVANCED=y
|
|
||||||
CONFIG_SGI_PARTITION=y
|
|
||||||
CONFIG_EFI_PARTITION=y
|
|
||||||
CONFIG_NLS_CODEPAGE_437=y
|
|
||||||
CONFIG_NLS_CODEPAGE_737=m
|
|
||||||
CONFIG_NLS_CODEPAGE_775=m
|
|
||||||
CONFIG_NLS_CODEPAGE_850=m
|
|
||||||
CONFIG_NLS_CODEPAGE_852=m
|
|
||||||
CONFIG_NLS_CODEPAGE_855=m
|
|
||||||
CONFIG_NLS_CODEPAGE_857=m
|
|
||||||
CONFIG_NLS_CODEPAGE_860=m
|
|
||||||
CONFIG_NLS_CODEPAGE_861=m
|
|
||||||
CONFIG_NLS_CODEPAGE_862=m
|
|
||||||
CONFIG_NLS_CODEPAGE_863=m
|
|
||||||
CONFIG_NLS_CODEPAGE_864=m
|
|
||||||
CONFIG_NLS_CODEPAGE_865=m
|
|
||||||
CONFIG_NLS_CODEPAGE_866=m
|
|
||||||
CONFIG_NLS_CODEPAGE_869=m
|
|
||||||
CONFIG_NLS_CODEPAGE_936=m
|
|
||||||
CONFIG_NLS_CODEPAGE_950=m
|
|
||||||
CONFIG_NLS_CODEPAGE_932=m
|
|
||||||
CONFIG_NLS_CODEPAGE_949=m
|
|
||||||
CONFIG_NLS_CODEPAGE_874=m
|
|
||||||
CONFIG_NLS_ISO8859_8=m
|
|
||||||
CONFIG_NLS_CODEPAGE_1250=m
|
|
||||||
CONFIG_NLS_CODEPAGE_1251=m
|
|
||||||
CONFIG_NLS_ISO8859_1=y
|
|
||||||
CONFIG_NLS_ISO8859_2=m
|
|
||||||
CONFIG_NLS_ISO8859_3=m
|
|
||||||
CONFIG_NLS_ISO8859_4=m
|
|
||||||
CONFIG_NLS_ISO8859_5=m
|
|
||||||
CONFIG_NLS_ISO8859_6=m
|
|
||||||
CONFIG_NLS_ISO8859_7=m
|
|
||||||
CONFIG_NLS_ISO8859_9=m
|
|
||||||
CONFIG_NLS_ISO8859_13=m
|
|
||||||
CONFIG_NLS_ISO8859_14=m
|
|
||||||
CONFIG_NLS_ISO8859_15=m
|
|
||||||
CONFIG_NLS_KOI8_R=m
|
|
||||||
CONFIG_NLS_KOI8_U=m
|
|
||||||
CONFIG_NLS_UTF8=m
|
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
CONFIG_DEBUG_MUTEXES=y
|
|
||||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
|
||||||
CONFIG_IA64_GRANULE_16MB=y
|
|
||||||
CONFIG_CRYPTO_ECB=m
|
|
||||||
CONFIG_CRYPTO_PCBC=m
|
|
||||||
CONFIG_CRYPTO_MD5=y
|
|
||||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
|
|
@ -111,8 +111,6 @@ static inline const char *acpi_get_sysname (void)
|
||||||
return "uv";
|
return "uv";
|
||||||
# elif defined (CONFIG_IA64_DIG)
|
# elif defined (CONFIG_IA64_DIG)
|
||||||
return "dig";
|
return "dig";
|
||||||
# elif defined (CONFIG_IA64_XEN_GUEST)
|
|
||||||
return "xen";
|
|
||||||
# elif defined(CONFIG_IA64_DIG_VTD)
|
# elif defined(CONFIG_IA64_DIG_VTD)
|
||||||
return "dig_vtd";
|
return "dig_vtd";
|
||||||
# else
|
# else
|
||||||
|
|
|
@ -45,13 +45,36 @@
|
||||||
# define smp_rmb() rmb()
|
# define smp_rmb() rmb()
|
||||||
# define smp_wmb() wmb()
|
# define smp_wmb() wmb()
|
||||||
# define smp_read_barrier_depends() read_barrier_depends()
|
# define smp_read_barrier_depends() read_barrier_depends()
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# define smp_mb() barrier()
|
# define smp_mb() barrier()
|
||||||
# define smp_rmb() barrier()
|
# define smp_rmb() barrier()
|
||||||
# define smp_wmb() barrier()
|
# define smp_wmb() barrier()
|
||||||
# define smp_read_barrier_depends() do { } while(0)
|
# define smp_read_barrier_depends() do { } while(0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* IA64 GCC turns volatile stores into st.rel and volatile loads into ld.acq no
|
||||||
|
* need for asm trickery!
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define smp_store_release(p, v) \
|
||||||
|
do { \
|
||||||
|
compiletime_assert_atomic_type(*p); \
|
||||||
|
barrier(); \
|
||||||
|
ACCESS_ONCE(*p) = (v); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define smp_load_acquire(p) \
|
||||||
|
({ \
|
||||||
|
typeof(*p) ___p1 = ACCESS_ONCE(*p); \
|
||||||
|
compiletime_assert_atomic_type(*p); \
|
||||||
|
barrier(); \
|
||||||
|
___p1; \
|
||||||
|
})
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX check on this ---I suspect what Linus really wants here is
|
* XXX check on this ---I suspect what Linus really wants here is
|
||||||
* acquire vs release semantics but we can't discuss this stuff with
|
* acquire vs release semantics but we can't discuss this stuff with
|
||||||
|
|
|
@ -113,8 +113,6 @@ extern void machvec_tlb_migrate_finish (struct mm_struct *);
|
||||||
# include <asm/machvec_sn2.h>
|
# include <asm/machvec_sn2.h>
|
||||||
# elif defined (CONFIG_IA64_SGI_UV)
|
# elif defined (CONFIG_IA64_SGI_UV)
|
||||||
# include <asm/machvec_uv.h>
|
# include <asm/machvec_uv.h>
|
||||||
# elif defined (CONFIG_IA64_XEN_GUEST)
|
|
||||||
# include <asm/machvec_xen.h>
|
|
||||||
# elif defined (CONFIG_IA64_GENERIC)
|
# elif defined (CONFIG_IA64_GENERIC)
|
||||||
|
|
||||||
# ifdef MACHVEC_PLATFORM_HEADER
|
# ifdef MACHVEC_PLATFORM_HEADER
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
#ifndef _ASM_IA64_MACHVEC_XEN_h
|
|
||||||
#define _ASM_IA64_MACHVEC_XEN_h
|
|
||||||
|
|
||||||
extern ia64_mv_setup_t dig_setup;
|
|
||||||
extern ia64_mv_cpu_init_t xen_cpu_init;
|
|
||||||
extern ia64_mv_irq_init_t xen_irq_init;
|
|
||||||
extern ia64_mv_send_ipi_t xen_platform_send_ipi;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This stuff has dual use!
|
|
||||||
*
|
|
||||||
* For a generic kernel, the macros are used to initialize the
|
|
||||||
* platform's machvec structure. When compiling a non-generic kernel,
|
|
||||||
* the macros are used directly.
|
|
||||||
*/
|
|
||||||
#define ia64_platform_name "xen"
|
|
||||||
#define platform_setup dig_setup
|
|
||||||
#define platform_cpu_init xen_cpu_init
|
|
||||||
#define platform_irq_init xen_irq_init
|
|
||||||
#define platform_send_ipi xen_platform_send_ipi
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_MACHVEC_XEN_h */
|
|
|
@ -18,7 +18,6 @@
|
||||||
* - crash dumping code reserved region
|
* - crash dumping code reserved region
|
||||||
* - Kernel memory map built from EFI memory map
|
* - Kernel memory map built from EFI memory map
|
||||||
* - ELF core header
|
* - ELF core header
|
||||||
* - xen start info if CONFIG_XEN
|
|
||||||
*
|
*
|
||||||
* More could be added if necessary
|
* More could be added if necessary
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -75,7 +75,6 @@ void *paravirt_get_gate_section(void);
|
||||||
#ifdef CONFIG_PARAVIRT_GUEST
|
#ifdef CONFIG_PARAVIRT_GUEST
|
||||||
|
|
||||||
#define PARAVIRT_HYPERVISOR_TYPE_DEFAULT 0
|
#define PARAVIRT_HYPERVISOR_TYPE_DEFAULT 0
|
||||||
#define PARAVIRT_HYPERVISOR_TYPE_XEN 1
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
/*
|
/*
|
||||||
* These structs MUST NOT be changed.
|
* These structs MUST NOT be changed.
|
||||||
* They are the ABI between hypervisor and guest OS.
|
* They are the ABI between hypervisor and guest OS.
|
||||||
* Both Xen and KVM are using this.
|
* KVM is using this.
|
||||||
*
|
*
|
||||||
* pvclock_vcpu_time_info holds the system time and the tsc timestamp
|
* pvclock_vcpu_time_info holds the system time and the tsc timestamp
|
||||||
* of the last update. So the guest can use the tsc delta to get a
|
* of the last update. So the guest can use the tsc delta to get a
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
#ifndef _ASM_IA64_SYNC_BITOPS_H
|
|
||||||
#define _ASM_IA64_SYNC_BITOPS_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2008 Isaku Yamahata <yamahata at valinux co jp>
|
|
||||||
*
|
|
||||||
* Based on synch_bitops.h which Dan Magenhaimer wrote.
|
|
||||||
*
|
|
||||||
* bit operations which provide guaranteed strong synchronisation
|
|
||||||
* when communicating with Xen or other guest OSes running on other CPUs.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static inline void sync_set_bit(int nr, volatile void *addr)
|
|
||||||
{
|
|
||||||
set_bit(nr, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void sync_clear_bit(int nr, volatile void *addr)
|
|
||||||
{
|
|
||||||
clear_bit(nr, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void sync_change_bit(int nr, volatile void *addr)
|
|
||||||
{
|
|
||||||
change_bit(nr, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int sync_test_and_set_bit(int nr, volatile void *addr)
|
|
||||||
{
|
|
||||||
return test_and_set_bit(nr, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int sync_test_and_clear_bit(int nr, volatile void *addr)
|
|
||||||
{
|
|
||||||
return test_and_clear_bit(nr, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int sync_test_and_change_bit(int nr, volatile void *addr)
|
|
||||||
{
|
|
||||||
return test_and_change_bit(nr, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int sync_test_bit(int nr, const volatile void *addr)
|
|
||||||
{
|
|
||||||
return test_bit(nr, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define sync_cmpxchg(ptr, old, new) \
|
|
||||||
((__typeof__(*(ptr)))cmpxchg_acq((ptr), (old), (new)))
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_SYNC_BITOPS_H */
|
|
|
@ -1,41 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* arch/ia64/include/asm/xen/events.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
|
|
||||||
* VA Linux Systems Japan K.K.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#ifndef _ASM_IA64_XEN_EVENTS_H
|
|
||||||
#define _ASM_IA64_XEN_EVENTS_H
|
|
||||||
|
|
||||||
enum ipi_vector {
|
|
||||||
XEN_RESCHEDULE_VECTOR,
|
|
||||||
XEN_IPI_VECTOR,
|
|
||||||
XEN_CMCP_VECTOR,
|
|
||||||
XEN_CPEP_VECTOR,
|
|
||||||
|
|
||||||
XEN_NR_IPIS,
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline int xen_irqs_disabled(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
return !(ia64_psr(regs)->i);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define irq_ctx_init(cpu) do { } while (0)
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_EVENTS_H */
|
|
|
@ -1,265 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* hypercall.h
|
|
||||||
*
|
|
||||||
* Linux-specific hypervisor handling.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2002-2004, K A Fraser
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License version 2
|
|
||||||
* as published by the Free Software Foundation; or, when distributed
|
|
||||||
* separately from the Linux kernel or incorporated into other
|
|
||||||
* software packages, subject to the following license:
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this source file (the "Software"), to deal in the Software without
|
|
||||||
* restriction, including without limitation the rights to use, copy, modify,
|
|
||||||
* merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
* the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ASM_IA64_XEN_HYPERCALL_H
|
|
||||||
#define _ASM_IA64_XEN_HYPERCALL_H
|
|
||||||
|
|
||||||
#include <xen/interface/xen.h>
|
|
||||||
#include <xen/interface/physdev.h>
|
|
||||||
#include <xen/interface/sched.h>
|
|
||||||
#include <asm/xen/xcom_hcall.h>
|
|
||||||
struct xencomm_handle;
|
|
||||||
extern unsigned long __hypercall(unsigned long a1, unsigned long a2,
|
|
||||||
unsigned long a3, unsigned long a4,
|
|
||||||
unsigned long a5, unsigned long cmd);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Assembler stubs for hyper-calls.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _hypercall0(type, name) \
|
|
||||||
({ \
|
|
||||||
long __res; \
|
|
||||||
__res = __hypercall(0, 0, 0, 0, 0, __HYPERVISOR_##name);\
|
|
||||||
(type)__res; \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define _hypercall1(type, name, a1) \
|
|
||||||
({ \
|
|
||||||
long __res; \
|
|
||||||
__res = __hypercall((unsigned long)a1, \
|
|
||||||
0, 0, 0, 0, __HYPERVISOR_##name); \
|
|
||||||
(type)__res; \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define _hypercall2(type, name, a1, a2) \
|
|
||||||
({ \
|
|
||||||
long __res; \
|
|
||||||
__res = __hypercall((unsigned long)a1, \
|
|
||||||
(unsigned long)a2, \
|
|
||||||
0, 0, 0, __HYPERVISOR_##name); \
|
|
||||||
(type)__res; \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define _hypercall3(type, name, a1, a2, a3) \
|
|
||||||
({ \
|
|
||||||
long __res; \
|
|
||||||
__res = __hypercall((unsigned long)a1, \
|
|
||||||
(unsigned long)a2, \
|
|
||||||
(unsigned long)a3, \
|
|
||||||
0, 0, __HYPERVISOR_##name); \
|
|
||||||
(type)__res; \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define _hypercall4(type, name, a1, a2, a3, a4) \
|
|
||||||
({ \
|
|
||||||
long __res; \
|
|
||||||
__res = __hypercall((unsigned long)a1, \
|
|
||||||
(unsigned long)a2, \
|
|
||||||
(unsigned long)a3, \
|
|
||||||
(unsigned long)a4, \
|
|
||||||
0, __HYPERVISOR_##name); \
|
|
||||||
(type)__res; \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define _hypercall5(type, name, a1, a2, a3, a4, a5) \
|
|
||||||
({ \
|
|
||||||
long __res; \
|
|
||||||
__res = __hypercall((unsigned long)a1, \
|
|
||||||
(unsigned long)a2, \
|
|
||||||
(unsigned long)a3, \
|
|
||||||
(unsigned long)a4, \
|
|
||||||
(unsigned long)a5, \
|
|
||||||
__HYPERVISOR_##name); \
|
|
||||||
(type)__res; \
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
xencomm_arch_hypercall_sched_op(int cmd, struct xencomm_handle *arg)
|
|
||||||
{
|
|
||||||
return _hypercall2(int, sched_op, cmd, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline long
|
|
||||||
HYPERVISOR_set_timer_op(u64 timeout)
|
|
||||||
{
|
|
||||||
unsigned long timeout_hi = (unsigned long)(timeout >> 32);
|
|
||||||
unsigned long timeout_lo = (unsigned long)timeout;
|
|
||||||
return _hypercall2(long, set_timer_op, timeout_lo, timeout_hi);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
xencomm_arch_hypercall_multicall(struct xencomm_handle *call_list,
|
|
||||||
int nr_calls)
|
|
||||||
{
|
|
||||||
return _hypercall2(int, multicall, call_list, nr_calls);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
xencomm_arch_hypercall_memory_op(unsigned int cmd, struct xencomm_handle *arg)
|
|
||||||
{
|
|
||||||
return _hypercall2(int, memory_op, cmd, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
xencomm_arch_hypercall_event_channel_op(int cmd, struct xencomm_handle *arg)
|
|
||||||
{
|
|
||||||
return _hypercall2(int, event_channel_op, cmd, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
xencomm_arch_hypercall_xen_version(int cmd, struct xencomm_handle *arg)
|
|
||||||
{
|
|
||||||
return _hypercall2(int, xen_version, cmd, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
xencomm_arch_hypercall_console_io(int cmd, int count,
|
|
||||||
struct xencomm_handle *str)
|
|
||||||
{
|
|
||||||
return _hypercall3(int, console_io, cmd, count, str);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
xencomm_arch_hypercall_physdev_op(int cmd, struct xencomm_handle *arg)
|
|
||||||
{
|
|
||||||
return _hypercall2(int, physdev_op, cmd, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
xencomm_arch_hypercall_grant_table_op(unsigned int cmd,
|
|
||||||
struct xencomm_handle *uop,
|
|
||||||
unsigned int count)
|
|
||||||
{
|
|
||||||
return _hypercall3(int, grant_table_op, cmd, uop, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
int HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count);
|
|
||||||
|
|
||||||
extern int xencomm_arch_hypercall_suspend(struct xencomm_handle *arg);
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
xencomm_arch_hypercall_callback_op(int cmd, struct xencomm_handle *arg)
|
|
||||||
{
|
|
||||||
return _hypercall2(int, callback_op, cmd, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline long
|
|
||||||
xencomm_arch_hypercall_vcpu_op(int cmd, int cpu, void *arg)
|
|
||||||
{
|
|
||||||
return _hypercall3(long, vcpu_op, cmd, cpu, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
HYPERVISOR_physdev_op(int cmd, void *arg)
|
|
||||||
{
|
|
||||||
switch (cmd) {
|
|
||||||
case PHYSDEVOP_eoi:
|
|
||||||
return _hypercall1(int, ia64_fast_eoi,
|
|
||||||
((struct physdev_eoi *)arg)->irq);
|
|
||||||
default:
|
|
||||||
return xencomm_hypercall_physdev_op(cmd, arg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline long
|
|
||||||
xencomm_arch_hypercall_opt_feature(struct xencomm_handle *arg)
|
|
||||||
{
|
|
||||||
return _hypercall1(long, opt_feature, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* for balloon driver */
|
|
||||||
#define HYPERVISOR_update_va_mapping(va, new_val, flags) (0)
|
|
||||||
|
|
||||||
/* Use xencomm to do hypercalls. */
|
|
||||||
#define HYPERVISOR_sched_op xencomm_hypercall_sched_op
|
|
||||||
#define HYPERVISOR_event_channel_op xencomm_hypercall_event_channel_op
|
|
||||||
#define HYPERVISOR_callback_op xencomm_hypercall_callback_op
|
|
||||||
#define HYPERVISOR_multicall xencomm_hypercall_multicall
|
|
||||||
#define HYPERVISOR_xen_version xencomm_hypercall_xen_version
|
|
||||||
#define HYPERVISOR_console_io xencomm_hypercall_console_io
|
|
||||||
#define HYPERVISOR_memory_op xencomm_hypercall_memory_op
|
|
||||||
#define HYPERVISOR_suspend xencomm_hypercall_suspend
|
|
||||||
#define HYPERVISOR_vcpu_op xencomm_hypercall_vcpu_op
|
|
||||||
#define HYPERVISOR_opt_feature xencomm_hypercall_opt_feature
|
|
||||||
|
|
||||||
/* to compile gnttab_copy_grant_page() in drivers/xen/core/gnttab.c */
|
|
||||||
#define HYPERVISOR_mmu_update(req, count, success_count, domid) ({ BUG(); 0; })
|
|
||||||
|
|
||||||
static inline int
|
|
||||||
HYPERVISOR_shutdown(
|
|
||||||
unsigned int reason)
|
|
||||||
{
|
|
||||||
struct sched_shutdown sched_shutdown = {
|
|
||||||
.reason = reason
|
|
||||||
};
|
|
||||||
|
|
||||||
int rc = HYPERVISOR_sched_op(SCHEDOP_shutdown, &sched_shutdown);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* for netfront.c, netback.c */
|
|
||||||
#define MULTI_UVMFLAGS_INDEX 0 /* XXX any value */
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
MULTI_update_va_mapping(
|
|
||||||
struct multicall_entry *mcl, unsigned long va,
|
|
||||||
pte_t new_val, unsigned long flags)
|
|
||||||
{
|
|
||||||
mcl->op = __HYPERVISOR_update_va_mapping;
|
|
||||||
mcl->result = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
MULTI_grant_table_op(struct multicall_entry *mcl, unsigned int cmd,
|
|
||||||
void *uop, unsigned int count)
|
|
||||||
{
|
|
||||||
mcl->op = __HYPERVISOR_grant_table_op;
|
|
||||||
mcl->args[0] = cmd;
|
|
||||||
mcl->args[1] = (unsigned long)uop;
|
|
||||||
mcl->args[2] = count;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
MULTI_mmu_update(struct multicall_entry *mcl, struct mmu_update *req,
|
|
||||||
int count, int *success_count, domid_t domid)
|
|
||||||
{
|
|
||||||
mcl->op = __HYPERVISOR_mmu_update;
|
|
||||||
mcl->args[0] = (unsigned long)req;
|
|
||||||
mcl->args[1] = count;
|
|
||||||
mcl->args[2] = (unsigned long)success_count;
|
|
||||||
mcl->args[3] = domid;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_HYPERCALL_H */
|
|
|
@ -1,61 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* hypervisor.h
|
|
||||||
*
|
|
||||||
* Linux-specific hypervisor handling.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2002-2004, K A Fraser
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License version 2
|
|
||||||
* as published by the Free Software Foundation; or, when distributed
|
|
||||||
* separately from the Linux kernel or incorporated into other
|
|
||||||
* software packages, subject to the following license:
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this source file (the "Software"), to deal in the Software without
|
|
||||||
* restriction, including without limitation the rights to use, copy, modify,
|
|
||||||
* merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to
|
|
||||||
* the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
||||||
* IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ASM_IA64_XEN_HYPERVISOR_H
|
|
||||||
#define _ASM_IA64_XEN_HYPERVISOR_H
|
|
||||||
|
|
||||||
#include <linux/err.h>
|
|
||||||
#include <xen/interface/xen.h>
|
|
||||||
#include <xen/interface/version.h> /* to compile feature.c */
|
|
||||||
#include <xen/features.h> /* to comiple xen-netfront.c */
|
|
||||||
#include <xen/xen.h>
|
|
||||||
#include <asm/xen/hypercall.h>
|
|
||||||
|
|
||||||
#ifdef CONFIG_XEN
|
|
||||||
extern struct shared_info *HYPERVISOR_shared_info;
|
|
||||||
extern struct start_info *xen_start_info;
|
|
||||||
|
|
||||||
void __init xen_setup_vcpu_info_placement(void);
|
|
||||||
void force_evtchn_callback(void);
|
|
||||||
|
|
||||||
/* for drivers/xen/balloon/balloon.c */
|
|
||||||
#ifdef CONFIG_XEN_SCRUB_PAGES
|
|
||||||
#define scrub_pages(_p, _n) memset((void *)(_p), 0, (_n) << PAGE_SHIFT)
|
|
||||||
#else
|
|
||||||
#define scrub_pages(_p, _n) ((void)0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* For setup_arch() in arch/ia64/kernel/setup.c */
|
|
||||||
void xen_ia64_enable_opt_feature(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_HYPERVISOR_H */
|
|
|
@ -1,486 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* arch/ia64/include/asm/xen/inst.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
|
|
||||||
* VA Linux Systems Japan K.K.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <asm/xen/privop.h>
|
|
||||||
|
|
||||||
#define ia64_ivt xen_ivt
|
|
||||||
#define DO_SAVE_MIN XEN_DO_SAVE_MIN
|
|
||||||
|
|
||||||
#define __paravirt_switch_to xen_switch_to
|
|
||||||
#define __paravirt_leave_syscall xen_leave_syscall
|
|
||||||
#define __paravirt_work_processed_syscall xen_work_processed_syscall
|
|
||||||
#define __paravirt_leave_kernel xen_leave_kernel
|
|
||||||
#define __paravirt_pending_syscall_end xen_work_pending_syscall_end
|
|
||||||
#define __paravirt_work_processed_syscall_target \
|
|
||||||
xen_work_processed_syscall
|
|
||||||
|
|
||||||
#define paravirt_fsyscall_table xen_fsyscall_table
|
|
||||||
#define paravirt_fsys_bubble_down xen_fsys_bubble_down
|
|
||||||
|
|
||||||
#define MOV_FROM_IFA(reg) \
|
|
||||||
movl reg = XSI_IFA; \
|
|
||||||
;; \
|
|
||||||
ld8 reg = [reg]
|
|
||||||
|
|
||||||
#define MOV_FROM_ITIR(reg) \
|
|
||||||
movl reg = XSI_ITIR; \
|
|
||||||
;; \
|
|
||||||
ld8 reg = [reg]
|
|
||||||
|
|
||||||
#define MOV_FROM_ISR(reg) \
|
|
||||||
movl reg = XSI_ISR; \
|
|
||||||
;; \
|
|
||||||
ld8 reg = [reg]
|
|
||||||
|
|
||||||
#define MOV_FROM_IHA(reg) \
|
|
||||||
movl reg = XSI_IHA; \
|
|
||||||
;; \
|
|
||||||
ld8 reg = [reg]
|
|
||||||
|
|
||||||
#define MOV_FROM_IPSR(pred, reg) \
|
|
||||||
(pred) movl reg = XSI_IPSR; \
|
|
||||||
;; \
|
|
||||||
(pred) ld8 reg = [reg]
|
|
||||||
|
|
||||||
#define MOV_FROM_IIM(reg) \
|
|
||||||
movl reg = XSI_IIM; \
|
|
||||||
;; \
|
|
||||||
ld8 reg = [reg]
|
|
||||||
|
|
||||||
#define MOV_FROM_IIP(reg) \
|
|
||||||
movl reg = XSI_IIP; \
|
|
||||||
;; \
|
|
||||||
ld8 reg = [reg]
|
|
||||||
|
|
||||||
.macro __MOV_FROM_IVR reg, clob
|
|
||||||
.ifc "\reg", "r8"
|
|
||||||
XEN_HYPER_GET_IVR
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
.ifc "\clob", "r8"
|
|
||||||
XEN_HYPER_GET_IVR
|
|
||||||
;;
|
|
||||||
mov \reg = r8
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
|
|
||||||
mov \clob = r8
|
|
||||||
;;
|
|
||||||
XEN_HYPER_GET_IVR
|
|
||||||
;;
|
|
||||||
mov \reg = r8
|
|
||||||
;;
|
|
||||||
mov r8 = \clob
|
|
||||||
.endm
|
|
||||||
#define MOV_FROM_IVR(reg, clob) __MOV_FROM_IVR reg, clob
|
|
||||||
|
|
||||||
.macro __MOV_FROM_PSR pred, reg, clob
|
|
||||||
.ifc "\reg", "r8"
|
|
||||||
(\pred) XEN_HYPER_GET_PSR;
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
.ifc "\clob", "r8"
|
|
||||||
(\pred) XEN_HYPER_GET_PSR
|
|
||||||
;;
|
|
||||||
(\pred) mov \reg = r8
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
|
|
||||||
(\pred) mov \clob = r8
|
|
||||||
(\pred) XEN_HYPER_GET_PSR
|
|
||||||
;;
|
|
||||||
(\pred) mov \reg = r8
|
|
||||||
(\pred) mov r8 = \clob
|
|
||||||
.endm
|
|
||||||
#define MOV_FROM_PSR(pred, reg, clob) __MOV_FROM_PSR pred, reg, clob
|
|
||||||
|
|
||||||
/* assuming ar.itc is read with interrupt disabled. */
|
|
||||||
#define MOV_FROM_ITC(pred, pred_clob, reg, clob) \
|
|
||||||
(pred) movl clob = XSI_ITC_OFFSET; \
|
|
||||||
;; \
|
|
||||||
(pred) ld8 clob = [clob]; \
|
|
||||||
(pred) mov reg = ar.itc; \
|
|
||||||
;; \
|
|
||||||
(pred) add reg = reg, clob; \
|
|
||||||
;; \
|
|
||||||
(pred) movl clob = XSI_ITC_LAST; \
|
|
||||||
;; \
|
|
||||||
(pred) ld8 clob = [clob]; \
|
|
||||||
;; \
|
|
||||||
(pred) cmp.geu.unc pred_clob, p0 = clob, reg; \
|
|
||||||
;; \
|
|
||||||
(pred_clob) add reg = 1, clob; \
|
|
||||||
;; \
|
|
||||||
(pred) movl clob = XSI_ITC_LAST; \
|
|
||||||
;; \
|
|
||||||
(pred) st8 [clob] = reg
|
|
||||||
|
|
||||||
|
|
||||||
#define MOV_TO_IFA(reg, clob) \
|
|
||||||
movl clob = XSI_IFA; \
|
|
||||||
;; \
|
|
||||||
st8 [clob] = reg \
|
|
||||||
|
|
||||||
#define MOV_TO_ITIR(pred, reg, clob) \
|
|
||||||
(pred) movl clob = XSI_ITIR; \
|
|
||||||
;; \
|
|
||||||
(pred) st8 [clob] = reg
|
|
||||||
|
|
||||||
#define MOV_TO_IHA(pred, reg, clob) \
|
|
||||||
(pred) movl clob = XSI_IHA; \
|
|
||||||
;; \
|
|
||||||
(pred) st8 [clob] = reg
|
|
||||||
|
|
||||||
#define MOV_TO_IPSR(pred, reg, clob) \
|
|
||||||
(pred) movl clob = XSI_IPSR; \
|
|
||||||
;; \
|
|
||||||
(pred) st8 [clob] = reg; \
|
|
||||||
;;
|
|
||||||
|
|
||||||
#define MOV_TO_IFS(pred, reg, clob) \
|
|
||||||
(pred) movl clob = XSI_IFS; \
|
|
||||||
;; \
|
|
||||||
(pred) st8 [clob] = reg; \
|
|
||||||
;;
|
|
||||||
|
|
||||||
#define MOV_TO_IIP(reg, clob) \
|
|
||||||
movl clob = XSI_IIP; \
|
|
||||||
;; \
|
|
||||||
st8 [clob] = reg
|
|
||||||
|
|
||||||
.macro ____MOV_TO_KR kr, reg, clob0, clob1
|
|
||||||
.ifc "\clob0", "r9"
|
|
||||||
.error "clob0 \clob0 must not be r9"
|
|
||||||
.endif
|
|
||||||
.ifc "\clob1", "r8"
|
|
||||||
.error "clob1 \clob1 must not be r8"
|
|
||||||
.endif
|
|
||||||
|
|
||||||
.ifnc "\reg", "r9"
|
|
||||||
.ifnc "\clob1", "r9"
|
|
||||||
mov \clob1 = r9
|
|
||||||
.endif
|
|
||||||
mov r9 = \reg
|
|
||||||
.endif
|
|
||||||
.ifnc "\clob0", "r8"
|
|
||||||
mov \clob0 = r8
|
|
||||||
.endif
|
|
||||||
mov r8 = \kr
|
|
||||||
;;
|
|
||||||
XEN_HYPER_SET_KR
|
|
||||||
|
|
||||||
.ifnc "\reg", "r9"
|
|
||||||
.ifnc "\clob1", "r9"
|
|
||||||
mov r9 = \clob1
|
|
||||||
.endif
|
|
||||||
.endif
|
|
||||||
.ifnc "\clob0", "r8"
|
|
||||||
mov r8 = \clob0
|
|
||||||
.endif
|
|
||||||
.endm
|
|
||||||
|
|
||||||
.macro __MOV_TO_KR kr, reg, clob0, clob1
|
|
||||||
.ifc "\clob0", "r9"
|
|
||||||
____MOV_TO_KR \kr, \reg, \clob1, \clob0
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
.ifc "\clob1", "r8"
|
|
||||||
____MOV_TO_KR \kr, \reg, \clob1, \clob0
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
|
|
||||||
____MOV_TO_KR \kr, \reg, \clob0, \clob1
|
|
||||||
.endm
|
|
||||||
|
|
||||||
#define MOV_TO_KR(kr, reg, clob0, clob1) \
|
|
||||||
__MOV_TO_KR IA64_KR_ ## kr, reg, clob0, clob1
|
|
||||||
|
|
||||||
|
|
||||||
.macro __ITC_I pred, reg, clob
|
|
||||||
.ifc "\reg", "r8"
|
|
||||||
(\pred) XEN_HYPER_ITC_I
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
.ifc "\clob", "r8"
|
|
||||||
(\pred) mov r8 = \reg
|
|
||||||
;;
|
|
||||||
(\pred) XEN_HYPER_ITC_I
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
|
|
||||||
(\pred) mov \clob = r8
|
|
||||||
(\pred) mov r8 = \reg
|
|
||||||
;;
|
|
||||||
(\pred) XEN_HYPER_ITC_I
|
|
||||||
;;
|
|
||||||
(\pred) mov r8 = \clob
|
|
||||||
;;
|
|
||||||
.endm
|
|
||||||
#define ITC_I(pred, reg, clob) __ITC_I pred, reg, clob
|
|
||||||
|
|
||||||
.macro __ITC_D pred, reg, clob
|
|
||||||
.ifc "\reg", "r8"
|
|
||||||
(\pred) XEN_HYPER_ITC_D
|
|
||||||
;;
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
.ifc "\clob", "r8"
|
|
||||||
(\pred) mov r8 = \reg
|
|
||||||
;;
|
|
||||||
(\pred) XEN_HYPER_ITC_D
|
|
||||||
;;
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
|
|
||||||
(\pred) mov \clob = r8
|
|
||||||
(\pred) mov r8 = \reg
|
|
||||||
;;
|
|
||||||
(\pred) XEN_HYPER_ITC_D
|
|
||||||
;;
|
|
||||||
(\pred) mov r8 = \clob
|
|
||||||
;;
|
|
||||||
.endm
|
|
||||||
#define ITC_D(pred, reg, clob) __ITC_D pred, reg, clob
|
|
||||||
|
|
||||||
.macro __ITC_I_AND_D pred_i, pred_d, reg, clob
|
|
||||||
.ifc "\reg", "r8"
|
|
||||||
(\pred_i)XEN_HYPER_ITC_I
|
|
||||||
;;
|
|
||||||
(\pred_d)XEN_HYPER_ITC_D
|
|
||||||
;;
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
.ifc "\clob", "r8"
|
|
||||||
mov r8 = \reg
|
|
||||||
;;
|
|
||||||
(\pred_i)XEN_HYPER_ITC_I
|
|
||||||
;;
|
|
||||||
(\pred_d)XEN_HYPER_ITC_D
|
|
||||||
;;
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
|
|
||||||
mov \clob = r8
|
|
||||||
mov r8 = \reg
|
|
||||||
;;
|
|
||||||
(\pred_i)XEN_HYPER_ITC_I
|
|
||||||
;;
|
|
||||||
(\pred_d)XEN_HYPER_ITC_D
|
|
||||||
;;
|
|
||||||
mov r8 = \clob
|
|
||||||
;;
|
|
||||||
.endm
|
|
||||||
#define ITC_I_AND_D(pred_i, pred_d, reg, clob) \
|
|
||||||
__ITC_I_AND_D pred_i, pred_d, reg, clob
|
|
||||||
|
|
||||||
.macro __THASH pred, reg0, reg1, clob
|
|
||||||
.ifc "\reg0", "r8"
|
|
||||||
(\pred) mov r8 = \reg1
|
|
||||||
(\pred) XEN_HYPER_THASH
|
|
||||||
.exitm
|
|
||||||
.endc
|
|
||||||
.ifc "\reg1", "r8"
|
|
||||||
(\pred) XEN_HYPER_THASH
|
|
||||||
;;
|
|
||||||
(\pred) mov \reg0 = r8
|
|
||||||
;;
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
.ifc "\clob", "r8"
|
|
||||||
(\pred) mov r8 = \reg1
|
|
||||||
(\pred) XEN_HYPER_THASH
|
|
||||||
;;
|
|
||||||
(\pred) mov \reg0 = r8
|
|
||||||
;;
|
|
||||||
.exitm
|
|
||||||
.endif
|
|
||||||
|
|
||||||
(\pred) mov \clob = r8
|
|
||||||
(\pred) mov r8 = \reg1
|
|
||||||
(\pred) XEN_HYPER_THASH
|
|
||||||
;;
|
|
||||||
(\pred) mov \reg0 = r8
|
|
||||||
(\pred) mov r8 = \clob
|
|
||||||
;;
|
|
||||||
.endm
|
|
||||||
#define THASH(pred, reg0, reg1, clob) __THASH pred, reg0, reg1, clob
|
|
||||||
|
|
||||||
#define SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(clob0, clob1) \
|
|
||||||
mov clob0 = 1; \
|
|
||||||
movl clob1 = XSI_PSR_IC; \
|
|
||||||
;; \
|
|
||||||
st4 [clob1] = clob0 \
|
|
||||||
;;
|
|
||||||
|
|
||||||
#define SSM_PSR_IC_AND_SRLZ_D(clob0, clob1) \
|
|
||||||
;; \
|
|
||||||
srlz.d; \
|
|
||||||
mov clob1 = 1; \
|
|
||||||
movl clob0 = XSI_PSR_IC; \
|
|
||||||
;; \
|
|
||||||
st4 [clob0] = clob1
|
|
||||||
|
|
||||||
#define RSM_PSR_IC(clob) \
|
|
||||||
movl clob = XSI_PSR_IC; \
|
|
||||||
;; \
|
|
||||||
st4 [clob] = r0; \
|
|
||||||
;;
|
|
||||||
|
|
||||||
/* pred will be clobbered */
|
|
||||||
#define MASK_TO_PEND_OFS (-1)
|
|
||||||
#define SSM_PSR_I(pred, pred_clob, clob) \
|
|
||||||
(pred) movl clob = XSI_PSR_I_ADDR \
|
|
||||||
;; \
|
|
||||||
(pred) ld8 clob = [clob] \
|
|
||||||
;; \
|
|
||||||
/* if (pred) vpsr.i = 1 */ \
|
|
||||||
/* if (pred) (vcpu->vcpu_info->evtchn_upcall_mask)=0 */ \
|
|
||||||
(pred) st1 [clob] = r0, MASK_TO_PEND_OFS \
|
|
||||||
;; \
|
|
||||||
/* if (vcpu->vcpu_info->evtchn_upcall_pending) */ \
|
|
||||||
(pred) ld1 clob = [clob] \
|
|
||||||
;; \
|
|
||||||
(pred) cmp.ne.unc pred_clob, p0 = clob, r0 \
|
|
||||||
;; \
|
|
||||||
(pred_clob)XEN_HYPER_SSM_I /* do areal ssm psr.i */
|
|
||||||
|
|
||||||
#define RSM_PSR_I(pred, clob0, clob1) \
|
|
||||||
movl clob0 = XSI_PSR_I_ADDR; \
|
|
||||||
mov clob1 = 1; \
|
|
||||||
;; \
|
|
||||||
ld8 clob0 = [clob0]; \
|
|
||||||
;; \
|
|
||||||
(pred) st1 [clob0] = clob1
|
|
||||||
|
|
||||||
#define RSM_PSR_I_IC(clob0, clob1, clob2) \
|
|
||||||
movl clob0 = XSI_PSR_I_ADDR; \
|
|
||||||
movl clob1 = XSI_PSR_IC; \
|
|
||||||
;; \
|
|
||||||
ld8 clob0 = [clob0]; \
|
|
||||||
mov clob2 = 1; \
|
|
||||||
;; \
|
|
||||||
/* note: clears both vpsr.i and vpsr.ic! */ \
|
|
||||||
st1 [clob0] = clob2; \
|
|
||||||
st4 [clob1] = r0; \
|
|
||||||
;;
|
|
||||||
|
|
||||||
#define RSM_PSR_DT \
|
|
||||||
XEN_HYPER_RSM_PSR_DT
|
|
||||||
|
|
||||||
#define RSM_PSR_BE_I(clob0, clob1) \
|
|
||||||
RSM_PSR_I(p0, clob0, clob1); \
|
|
||||||
rum psr.be
|
|
||||||
|
|
||||||
#define SSM_PSR_DT_AND_SRLZ_I \
|
|
||||||
XEN_HYPER_SSM_PSR_DT
|
|
||||||
|
|
||||||
#define BSW_0(clob0, clob1, clob2) \
|
|
||||||
;; \
|
|
||||||
/* r16-r31 all now hold bank1 values */ \
|
|
||||||
mov clob2 = ar.unat; \
|
|
||||||
movl clob0 = XSI_BANK1_R16; \
|
|
||||||
movl clob1 = XSI_BANK1_R16 + 8; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0, 0; st8.spill [clob0] = r16, 16; \
|
|
||||||
.mem.offset 8, 0; st8.spill [clob1] = r17, 16; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0, 0; st8.spill [clob0] = r18, 16; \
|
|
||||||
.mem.offset 8, 0; st8.spill [clob1] = r19, 16; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0, 0; st8.spill [clob0] = r20, 16; \
|
|
||||||
.mem.offset 8, 0; st8.spill [clob1] = r21, 16; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0, 0; st8.spill [clob0] = r22, 16; \
|
|
||||||
.mem.offset 8, 0; st8.spill [clob1] = r23, 16; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0, 0; st8.spill [clob0] = r24, 16; \
|
|
||||||
.mem.offset 8, 0; st8.spill [clob1] = r25, 16; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0, 0; st8.spill [clob0] = r26, 16; \
|
|
||||||
.mem.offset 8, 0; st8.spill [clob1] = r27, 16; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0, 0; st8.spill [clob0] = r28, 16; \
|
|
||||||
.mem.offset 8, 0; st8.spill [clob1] = r29, 16; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0, 0; st8.spill [clob0] = r30, 16; \
|
|
||||||
.mem.offset 8, 0; st8.spill [clob1] = r31, 16; \
|
|
||||||
;; \
|
|
||||||
mov clob1 = ar.unat; \
|
|
||||||
movl clob0 = XSI_B1NAT; \
|
|
||||||
;; \
|
|
||||||
st8 [clob0] = clob1; \
|
|
||||||
mov ar.unat = clob2; \
|
|
||||||
movl clob0 = XSI_BANKNUM; \
|
|
||||||
;; \
|
|
||||||
st4 [clob0] = r0
|
|
||||||
|
|
||||||
|
|
||||||
/* FIXME: THIS CODE IS NOT NaT SAFE! */
|
|
||||||
#define XEN_BSW_1(clob) \
|
|
||||||
mov clob = ar.unat; \
|
|
||||||
movl r30 = XSI_B1NAT; \
|
|
||||||
;; \
|
|
||||||
ld8 r30 = [r30]; \
|
|
||||||
mov r31 = 1; \
|
|
||||||
;; \
|
|
||||||
mov ar.unat = r30; \
|
|
||||||
movl r30 = XSI_BANKNUM; \
|
|
||||||
;; \
|
|
||||||
st4 [r30] = r31; \
|
|
||||||
movl r30 = XSI_BANK1_R16; \
|
|
||||||
movl r31 = XSI_BANK1_R16+8; \
|
|
||||||
;; \
|
|
||||||
ld8.fill r16 = [r30], 16; \
|
|
||||||
ld8.fill r17 = [r31], 16; \
|
|
||||||
;; \
|
|
||||||
ld8.fill r18 = [r30], 16; \
|
|
||||||
ld8.fill r19 = [r31], 16; \
|
|
||||||
;; \
|
|
||||||
ld8.fill r20 = [r30], 16; \
|
|
||||||
ld8.fill r21 = [r31], 16; \
|
|
||||||
;; \
|
|
||||||
ld8.fill r22 = [r30], 16; \
|
|
||||||
ld8.fill r23 = [r31], 16; \
|
|
||||||
;; \
|
|
||||||
ld8.fill r24 = [r30], 16; \
|
|
||||||
ld8.fill r25 = [r31], 16; \
|
|
||||||
;; \
|
|
||||||
ld8.fill r26 = [r30], 16; \
|
|
||||||
ld8.fill r27 = [r31], 16; \
|
|
||||||
;; \
|
|
||||||
ld8.fill r28 = [r30], 16; \
|
|
||||||
ld8.fill r29 = [r31], 16; \
|
|
||||||
;; \
|
|
||||||
ld8.fill r30 = [r30]; \
|
|
||||||
ld8.fill r31 = [r31]; \
|
|
||||||
;; \
|
|
||||||
mov ar.unat = clob
|
|
||||||
|
|
||||||
#define BSW_1(clob0, clob1) XEN_BSW_1(clob1)
|
|
||||||
|
|
||||||
|
|
||||||
#define COVER \
|
|
||||||
XEN_HYPER_COVER
|
|
||||||
|
|
||||||
#define RFI \
|
|
||||||
XEN_HYPER_RFI; \
|
|
||||||
dv_serialize_data
|
|
|
@ -1,363 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* arch-ia64/hypervisor-if.h
|
|
||||||
*
|
|
||||||
* Guest OS interface to IA64 Xen.
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
* of this software and associated documentation files (the "Software"), to
|
|
||||||
* deal in the Software without restriction, including without limitation the
|
|
||||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
* sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
* furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in
|
|
||||||
* all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
* DEALINGS IN THE SOFTWARE.
|
|
||||||
*
|
|
||||||
* Copyright by those who contributed. (in alphabetical order)
|
|
||||||
*
|
|
||||||
* Anthony Xu <anthony.xu@intel.com>
|
|
||||||
* Eddie Dong <eddie.dong@intel.com>
|
|
||||||
* Fred Yang <fred.yang@intel.com>
|
|
||||||
* Kevin Tian <kevin.tian@intel.com>
|
|
||||||
* Alex Williamson <alex.williamson@hp.com>
|
|
||||||
* Chris Wright <chrisw@sous-sol.org>
|
|
||||||
* Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
|
|
||||||
* Dietmar Hahn <dietmar.hahn@fujitsu-siemens.com>
|
|
||||||
* Hollis Blanchard <hollisb@us.ibm.com>
|
|
||||||
* Isaku Yamahata <yamahata@valinux.co.jp>
|
|
||||||
* Jan Beulich <jbeulich@novell.com>
|
|
||||||
* John Levon <john.levon@sun.com>
|
|
||||||
* Kazuhiro Suzuki <kaz@jp.fujitsu.com>
|
|
||||||
* Keir Fraser <keir.fraser@citrix.com>
|
|
||||||
* Kouya Shimura <kouya@jp.fujitsu.com>
|
|
||||||
* Masaki Kanno <kanno.masaki@jp.fujitsu.com>
|
|
||||||
* Matt Chapman <matthewc@hp.com>
|
|
||||||
* Matthew Chapman <matthewc@hp.com>
|
|
||||||
* Samuel Thibault <samuel.thibault@eu.citrix.com>
|
|
||||||
* Tomonari Horikoshi <t.horikoshi@jp.fujitsu.com>
|
|
||||||
* Tristan Gingold <tgingold@free.fr>
|
|
||||||
* Tsunehisa Doi <Doi.Tsunehisa@jp.fujitsu.com>
|
|
||||||
* Yutaka Ezaki <yutaka.ezaki@jp.fujitsu.com>
|
|
||||||
* Zhang Xin <xing.z.zhang@intel.com>
|
|
||||||
* Zhang xiantao <xiantao.zhang@intel.com>
|
|
||||||
* dan.magenheimer@hp.com
|
|
||||||
* ian.pratt@cl.cam.ac.uk
|
|
||||||
* michael.fetterman@cl.cam.ac.uk
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ASM_IA64_XEN_INTERFACE_H
|
|
||||||
#define _ASM_IA64_XEN_INTERFACE_H
|
|
||||||
|
|
||||||
#define __DEFINE_GUEST_HANDLE(name, type) \
|
|
||||||
typedef struct { type *p; } __guest_handle_ ## name
|
|
||||||
|
|
||||||
#define DEFINE_GUEST_HANDLE_STRUCT(name) \
|
|
||||||
__DEFINE_GUEST_HANDLE(name, struct name)
|
|
||||||
#define DEFINE_GUEST_HANDLE(name) __DEFINE_GUEST_HANDLE(name, name)
|
|
||||||
#define GUEST_HANDLE(name) __guest_handle_ ## name
|
|
||||||
#define GUEST_HANDLE_64(name) GUEST_HANDLE(name)
|
|
||||||
#define set_xen_guest_handle(hnd, val) do { (hnd).p = val; } while (0)
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
/* Explicitly size integers that represent pfns in the public interface
|
|
||||||
* with Xen so that we could have one ABI that works for 32 and 64 bit
|
|
||||||
* guests. */
|
|
||||||
typedef unsigned long xen_pfn_t;
|
|
||||||
typedef unsigned long xen_ulong_t;
|
|
||||||
/* Guest handles for primitive C types. */
|
|
||||||
__DEFINE_GUEST_HANDLE(uchar, unsigned char);
|
|
||||||
__DEFINE_GUEST_HANDLE(uint, unsigned int);
|
|
||||||
__DEFINE_GUEST_HANDLE(ulong, unsigned long);
|
|
||||||
|
|
||||||
DEFINE_GUEST_HANDLE(char);
|
|
||||||
DEFINE_GUEST_HANDLE(int);
|
|
||||||
DEFINE_GUEST_HANDLE(long);
|
|
||||||
DEFINE_GUEST_HANDLE(void);
|
|
||||||
DEFINE_GUEST_HANDLE(uint64_t);
|
|
||||||
DEFINE_GUEST_HANDLE(uint32_t);
|
|
||||||
|
|
||||||
DEFINE_GUEST_HANDLE(xen_pfn_t);
|
|
||||||
#define PRI_xen_pfn "lx"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Arch specific VIRQs definition */
|
|
||||||
#define VIRQ_ITC VIRQ_ARCH_0 /* V. Virtual itc timer */
|
|
||||||
#define VIRQ_MCA_CMC VIRQ_ARCH_1 /* MCA cmc interrupt */
|
|
||||||
#define VIRQ_MCA_CPE VIRQ_ARCH_2 /* MCA cpe interrupt */
|
|
||||||
|
|
||||||
/* Maximum number of virtual CPUs in multi-processor guests. */
|
|
||||||
/* keep sizeof(struct shared_page) <= PAGE_SIZE.
|
|
||||||
* this is checked in arch/ia64/xen/hypervisor.c. */
|
|
||||||
#define MAX_VIRT_CPUS 64
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
|
|
||||||
#define INVALID_MFN (~0UL)
|
|
||||||
|
|
||||||
union vac {
|
|
||||||
unsigned long value;
|
|
||||||
struct {
|
|
||||||
int a_int:1;
|
|
||||||
int a_from_int_cr:1;
|
|
||||||
int a_to_int_cr:1;
|
|
||||||
int a_from_psr:1;
|
|
||||||
int a_from_cpuid:1;
|
|
||||||
int a_cover:1;
|
|
||||||
int a_bsw:1;
|
|
||||||
long reserved:57;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
union vdc {
|
|
||||||
unsigned long value;
|
|
||||||
struct {
|
|
||||||
int d_vmsw:1;
|
|
||||||
int d_extint:1;
|
|
||||||
int d_ibr_dbr:1;
|
|
||||||
int d_pmc:1;
|
|
||||||
int d_to_pmd:1;
|
|
||||||
int d_itm:1;
|
|
||||||
long reserved:58;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mapped_regs {
|
|
||||||
union vac vac;
|
|
||||||
union vdc vdc;
|
|
||||||
unsigned long virt_env_vaddr;
|
|
||||||
unsigned long reserved1[29];
|
|
||||||
unsigned long vhpi;
|
|
||||||
unsigned long reserved2[95];
|
|
||||||
union {
|
|
||||||
unsigned long vgr[16];
|
|
||||||
unsigned long bank1_regs[16]; /* bank1 regs (r16-r31)
|
|
||||||
when bank0 active */
|
|
||||||
};
|
|
||||||
union {
|
|
||||||
unsigned long vbgr[16];
|
|
||||||
unsigned long bank0_regs[16]; /* bank0 regs (r16-r31)
|
|
||||||
when bank1 active */
|
|
||||||
};
|
|
||||||
unsigned long vnat;
|
|
||||||
unsigned long vbnat;
|
|
||||||
unsigned long vcpuid[5];
|
|
||||||
unsigned long reserved3[11];
|
|
||||||
unsigned long vpsr;
|
|
||||||
unsigned long vpr;
|
|
||||||
unsigned long reserved4[76];
|
|
||||||
union {
|
|
||||||
unsigned long vcr[128];
|
|
||||||
struct {
|
|
||||||
unsigned long dcr; /* CR0 */
|
|
||||||
unsigned long itm;
|
|
||||||
unsigned long iva;
|
|
||||||
unsigned long rsv1[5];
|
|
||||||
unsigned long pta; /* CR8 */
|
|
||||||
unsigned long rsv2[7];
|
|
||||||
unsigned long ipsr; /* CR16 */
|
|
||||||
unsigned long isr;
|
|
||||||
unsigned long rsv3;
|
|
||||||
unsigned long iip;
|
|
||||||
unsigned long ifa;
|
|
||||||
unsigned long itir;
|
|
||||||
unsigned long iipa;
|
|
||||||
unsigned long ifs;
|
|
||||||
unsigned long iim; /* CR24 */
|
|
||||||
unsigned long iha;
|
|
||||||
unsigned long rsv4[38];
|
|
||||||
unsigned long lid; /* CR64 */
|
|
||||||
unsigned long ivr;
|
|
||||||
unsigned long tpr;
|
|
||||||
unsigned long eoi;
|
|
||||||
unsigned long irr[4];
|
|
||||||
unsigned long itv; /* CR72 */
|
|
||||||
unsigned long pmv;
|
|
||||||
unsigned long cmcv;
|
|
||||||
unsigned long rsv5[5];
|
|
||||||
unsigned long lrr0; /* CR80 */
|
|
||||||
unsigned long lrr1;
|
|
||||||
unsigned long rsv6[46];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
union {
|
|
||||||
unsigned long reserved5[128];
|
|
||||||
struct {
|
|
||||||
unsigned long precover_ifs;
|
|
||||||
unsigned long unat; /* not sure if this is needed
|
|
||||||
until NaT arch is done */
|
|
||||||
int interrupt_collection_enabled; /* virtual psr.ic */
|
|
||||||
|
|
||||||
/* virtual interrupt deliverable flag is
|
|
||||||
* evtchn_upcall_mask in shared info area now.
|
|
||||||
* interrupt_mask_addr is the address
|
|
||||||
* of evtchn_upcall_mask for current vcpu
|
|
||||||
*/
|
|
||||||
unsigned char *interrupt_mask_addr;
|
|
||||||
int pending_interruption;
|
|
||||||
unsigned char vpsr_pp;
|
|
||||||
unsigned char vpsr_dfh;
|
|
||||||
unsigned char hpsr_dfh;
|
|
||||||
unsigned char hpsr_mfh;
|
|
||||||
unsigned long reserved5_1[4];
|
|
||||||
int metaphysical_mode; /* 1 = use metaphys mapping
|
|
||||||
0 = use virtual */
|
|
||||||
int banknum; /* 0 or 1, which virtual
|
|
||||||
register bank is active */
|
|
||||||
unsigned long rrs[8]; /* region registers */
|
|
||||||
unsigned long krs[8]; /* kernel registers */
|
|
||||||
unsigned long tmp[16]; /* temp registers
|
|
||||||
(e.g. for hyperprivops) */
|
|
||||||
|
|
||||||
/* itc paravirtualization
|
|
||||||
* vAR.ITC = mAR.ITC + itc_offset
|
|
||||||
* itc_last is one which was lastly passed to
|
|
||||||
* the guest OS in order to prevent it from
|
|
||||||
* going backwords.
|
|
||||||
*/
|
|
||||||
unsigned long itc_offset;
|
|
||||||
unsigned long itc_last;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct arch_vcpu_info {
|
|
||||||
/* nothing */
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This structure is used for magic page in domain pseudo physical address
|
|
||||||
* space and the result of XENMEM_machine_memory_map.
|
|
||||||
* As the XENMEM_machine_memory_map result,
|
|
||||||
* xen_memory_map::nr_entries indicates the size in bytes
|
|
||||||
* including struct xen_ia64_memmap_info. Not the number of entries.
|
|
||||||
*/
|
|
||||||
struct xen_ia64_memmap_info {
|
|
||||||
uint64_t efi_memmap_size; /* size of EFI memory map */
|
|
||||||
uint64_t efi_memdesc_size; /* size of an EFI memory map
|
|
||||||
* descriptor */
|
|
||||||
uint32_t efi_memdesc_version; /* memory descriptor version */
|
|
||||||
void *memdesc[0]; /* array of efi_memory_desc_t */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct arch_shared_info {
|
|
||||||
/* PFN of the start_info page. */
|
|
||||||
unsigned long start_info_pfn;
|
|
||||||
|
|
||||||
/* Interrupt vector for event channel. */
|
|
||||||
int evtchn_vector;
|
|
||||||
|
|
||||||
/* PFN of memmap_info page */
|
|
||||||
unsigned int memmap_info_num_pages; /* currently only = 1 case is
|
|
||||||
supported. */
|
|
||||||
unsigned long memmap_info_pfn;
|
|
||||||
|
|
||||||
uint64_t pad[31];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct xen_callback {
|
|
||||||
unsigned long ip;
|
|
||||||
};
|
|
||||||
typedef struct xen_callback xen_callback_t;
|
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
|
||||||
|
|
||||||
#include <asm/pvclock-abi.h>
|
|
||||||
|
|
||||||
/* Size of the shared_info area (this is not related to page size). */
|
|
||||||
#define XSI_SHIFT 14
|
|
||||||
#define XSI_SIZE (1 << XSI_SHIFT)
|
|
||||||
/* Log size of mapped_regs area (64 KB - only 4KB is used). */
|
|
||||||
#define XMAPPEDREGS_SHIFT 12
|
|
||||||
#define XMAPPEDREGS_SIZE (1 << XMAPPEDREGS_SHIFT)
|
|
||||||
/* Offset of XASI (Xen arch shared info) wrt XSI_BASE. */
|
|
||||||
#define XMAPPEDREGS_OFS XSI_SIZE
|
|
||||||
|
|
||||||
/* Hyperprivops. */
|
|
||||||
#define HYPERPRIVOP_START 0x1
|
|
||||||
#define HYPERPRIVOP_RFI (HYPERPRIVOP_START + 0x0)
|
|
||||||
#define HYPERPRIVOP_RSM_DT (HYPERPRIVOP_START + 0x1)
|
|
||||||
#define HYPERPRIVOP_SSM_DT (HYPERPRIVOP_START + 0x2)
|
|
||||||
#define HYPERPRIVOP_COVER (HYPERPRIVOP_START + 0x3)
|
|
||||||
#define HYPERPRIVOP_ITC_D (HYPERPRIVOP_START + 0x4)
|
|
||||||
#define HYPERPRIVOP_ITC_I (HYPERPRIVOP_START + 0x5)
|
|
||||||
#define HYPERPRIVOP_SSM_I (HYPERPRIVOP_START + 0x6)
|
|
||||||
#define HYPERPRIVOP_GET_IVR (HYPERPRIVOP_START + 0x7)
|
|
||||||
#define HYPERPRIVOP_GET_TPR (HYPERPRIVOP_START + 0x8)
|
|
||||||
#define HYPERPRIVOP_SET_TPR (HYPERPRIVOP_START + 0x9)
|
|
||||||
#define HYPERPRIVOP_EOI (HYPERPRIVOP_START + 0xa)
|
|
||||||
#define HYPERPRIVOP_SET_ITM (HYPERPRIVOP_START + 0xb)
|
|
||||||
#define HYPERPRIVOP_THASH (HYPERPRIVOP_START + 0xc)
|
|
||||||
#define HYPERPRIVOP_PTC_GA (HYPERPRIVOP_START + 0xd)
|
|
||||||
#define HYPERPRIVOP_ITR_D (HYPERPRIVOP_START + 0xe)
|
|
||||||
#define HYPERPRIVOP_GET_RR (HYPERPRIVOP_START + 0xf)
|
|
||||||
#define HYPERPRIVOP_SET_RR (HYPERPRIVOP_START + 0x10)
|
|
||||||
#define HYPERPRIVOP_SET_KR (HYPERPRIVOP_START + 0x11)
|
|
||||||
#define HYPERPRIVOP_FC (HYPERPRIVOP_START + 0x12)
|
|
||||||
#define HYPERPRIVOP_GET_CPUID (HYPERPRIVOP_START + 0x13)
|
|
||||||
#define HYPERPRIVOP_GET_PMD (HYPERPRIVOP_START + 0x14)
|
|
||||||
#define HYPERPRIVOP_GET_EFLAG (HYPERPRIVOP_START + 0x15)
|
|
||||||
#define HYPERPRIVOP_SET_EFLAG (HYPERPRIVOP_START + 0x16)
|
|
||||||
#define HYPERPRIVOP_RSM_BE (HYPERPRIVOP_START + 0x17)
|
|
||||||
#define HYPERPRIVOP_GET_PSR (HYPERPRIVOP_START + 0x18)
|
|
||||||
#define HYPERPRIVOP_SET_RR0_TO_RR4 (HYPERPRIVOP_START + 0x19)
|
|
||||||
#define HYPERPRIVOP_MAX (0x1a)
|
|
||||||
|
|
||||||
/* Fast and light hypercalls. */
|
|
||||||
#define __HYPERVISOR_ia64_fast_eoi __HYPERVISOR_arch_1
|
|
||||||
|
|
||||||
/* Xencomm macros. */
|
|
||||||
#define XENCOMM_INLINE_MASK 0xf800000000000000UL
|
|
||||||
#define XENCOMM_INLINE_FLAG 0x8000000000000000UL
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Optimization features.
|
|
||||||
* The hypervisor may do some special optimizations for guests. This hypercall
|
|
||||||
* can be used to switch on/of these special optimizations.
|
|
||||||
*/
|
|
||||||
#define __HYPERVISOR_opt_feature 0x700UL
|
|
||||||
|
|
||||||
#define XEN_IA64_OPTF_OFF 0x0
|
|
||||||
#define XEN_IA64_OPTF_ON 0x1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If this feature is switched on, the hypervisor inserts the
|
|
||||||
* tlb entries without calling the guests traphandler.
|
|
||||||
* This is useful in guests using region 7 for identity mapping
|
|
||||||
* like the linux kernel does.
|
|
||||||
*/
|
|
||||||
#define XEN_IA64_OPTF_IDENT_MAP_REG7 1
|
|
||||||
|
|
||||||
/* Identity mapping of region 4 addresses in HVM. */
|
|
||||||
#define XEN_IA64_OPTF_IDENT_MAP_REG4 2
|
|
||||||
|
|
||||||
/* Identity mapping of region 5 addresses in HVM. */
|
|
||||||
#define XEN_IA64_OPTF_IDENT_MAP_REG5 3
|
|
||||||
|
|
||||||
#define XEN_IA64_OPTF_IDENT_MAP_NOT_SET (0)
|
|
||||||
|
|
||||||
struct xen_ia64_opt_feature {
|
|
||||||
unsigned long cmd; /* Which feature */
|
|
||||||
unsigned char on; /* Switch feature on/off */
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
/* The page protection bit mask of the pte.
|
|
||||||
* This will be or'ed with the pte. */
|
|
||||||
unsigned long pgprot;
|
|
||||||
unsigned long key; /* A protection key for itir.*/
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_INTERFACE_H */
|
|
|
@ -1,44 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* arch/ia64/include/asm/xen/irq.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
|
|
||||||
* VA Linux Systems Japan K.K.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ASM_IA64_XEN_IRQ_H
|
|
||||||
#define _ASM_IA64_XEN_IRQ_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The flat IRQ space is divided into two regions:
|
|
||||||
* 1. A one-to-one mapping of real physical IRQs. This space is only used
|
|
||||||
* if we have physical device-access privilege. This region is at the
|
|
||||||
* start of the IRQ space so that existing device drivers do not need
|
|
||||||
* to be modified to translate physical IRQ numbers into our IRQ space.
|
|
||||||
* 3. A dynamic mapping of inter-domain and Xen-sourced virtual IRQs. These
|
|
||||||
* are bound using the provided bind/unbind functions.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define XEN_PIRQ_BASE 0
|
|
||||||
#define XEN_NR_PIRQS 256
|
|
||||||
|
|
||||||
#define XEN_DYNIRQ_BASE (XEN_PIRQ_BASE + XEN_NR_PIRQS)
|
|
||||||
#define XEN_NR_DYNIRQS (NR_CPUS * 8)
|
|
||||||
|
|
||||||
#define XEN_NR_IRQS (XEN_NR_PIRQS + XEN_NR_DYNIRQS)
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_IRQ_H */
|
|
|
@ -1,143 +0,0 @@
|
||||||
|
|
||||||
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
|
|
||||||
/* read ar.itc in advance, and use it before leaving bank 0 */
|
|
||||||
#define XEN_ACCOUNT_GET_STAMP \
|
|
||||||
MOV_FROM_ITC(pUStk, p6, r20, r2);
|
|
||||||
#else
|
|
||||||
#define XEN_ACCOUNT_GET_STAMP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* DO_SAVE_MIN switches to the kernel stacks (if necessary) and saves
|
|
||||||
* the minimum state necessary that allows us to turn psr.ic back
|
|
||||||
* on.
|
|
||||||
*
|
|
||||||
* Assumed state upon entry:
|
|
||||||
* psr.ic: off
|
|
||||||
* r31: contains saved predicates (pr)
|
|
||||||
*
|
|
||||||
* Upon exit, the state is as follows:
|
|
||||||
* psr.ic: off
|
|
||||||
* r2 = points to &pt_regs.r16
|
|
||||||
* r8 = contents of ar.ccv
|
|
||||||
* r9 = contents of ar.csd
|
|
||||||
* r10 = contents of ar.ssd
|
|
||||||
* r11 = FPSR_DEFAULT
|
|
||||||
* r12 = kernel sp (kernel virtual address)
|
|
||||||
* r13 = points to current task_struct (kernel virtual address)
|
|
||||||
* p15 = TRUE if psr.i is set in cr.ipsr
|
|
||||||
* predicate registers (other than p2, p3, and p15), b6, r3, r14, r15:
|
|
||||||
* preserved
|
|
||||||
* CONFIG_XEN note: p6/p7 are not preserved
|
|
||||||
*
|
|
||||||
* Note that psr.ic is NOT turned on by this macro. This is so that
|
|
||||||
* we can pass interruption state as arguments to a handler.
|
|
||||||
*/
|
|
||||||
#define XEN_DO_SAVE_MIN(__COVER,SAVE_IFS,EXTRA,WORKAROUND) \
|
|
||||||
mov r16=IA64_KR(CURRENT); /* M */ \
|
|
||||||
mov r27=ar.rsc; /* M */ \
|
|
||||||
mov r20=r1; /* A */ \
|
|
||||||
mov r25=ar.unat; /* M */ \
|
|
||||||
MOV_FROM_IPSR(p0,r29); /* M */ \
|
|
||||||
MOV_FROM_IIP(r28); /* M */ \
|
|
||||||
mov r21=ar.fpsr; /* M */ \
|
|
||||||
mov r26=ar.pfs; /* I */ \
|
|
||||||
__COVER; /* B;; (or nothing) */ \
|
|
||||||
adds r16=IA64_TASK_THREAD_ON_USTACK_OFFSET,r16; \
|
|
||||||
;; \
|
|
||||||
ld1 r17=[r16]; /* load current->thread.on_ustack flag */ \
|
|
||||||
st1 [r16]=r0; /* clear current->thread.on_ustack flag */ \
|
|
||||||
adds r1=-IA64_TASK_THREAD_ON_USTACK_OFFSET,r16 \
|
|
||||||
/* switch from user to kernel RBS: */ \
|
|
||||||
;; \
|
|
||||||
invala; /* M */ \
|
|
||||||
/* SAVE_IFS;*/ /* see xen special handling below */ \
|
|
||||||
cmp.eq pKStk,pUStk=r0,r17; /* are we in kernel mode already? */ \
|
|
||||||
;; \
|
|
||||||
(pUStk) mov ar.rsc=0; /* set enforced lazy mode, pl 0, little-endian, loadrs=0 */ \
|
|
||||||
;; \
|
|
||||||
(pUStk) mov.m r24=ar.rnat; \
|
|
||||||
(pUStk) addl r22=IA64_RBS_OFFSET,r1; /* compute base of RBS */ \
|
|
||||||
(pKStk) mov r1=sp; /* get sp */ \
|
|
||||||
;; \
|
|
||||||
(pUStk) lfetch.fault.excl.nt1 [r22]; \
|
|
||||||
(pUStk) addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r1; /* compute base of memory stack */ \
|
|
||||||
(pUStk) mov r23=ar.bspstore; /* save ar.bspstore */ \
|
|
||||||
;; \
|
|
||||||
(pUStk) mov ar.bspstore=r22; /* switch to kernel RBS */ \
|
|
||||||
(pKStk) addl r1=-IA64_PT_REGS_SIZE,r1; /* if in kernel mode, use sp (r12) */ \
|
|
||||||
;; \
|
|
||||||
(pUStk) mov r18=ar.bsp; \
|
|
||||||
(pUStk) mov ar.rsc=0x3; /* set eager mode, pl 0, little-endian, loadrs=0 */ \
|
|
||||||
adds r17=2*L1_CACHE_BYTES,r1; /* really: biggest cache-line size */ \
|
|
||||||
adds r16=PT(CR_IPSR),r1; \
|
|
||||||
;; \
|
|
||||||
lfetch.fault.excl.nt1 [r17],L1_CACHE_BYTES; \
|
|
||||||
st8 [r16]=r29; /* save cr.ipsr */ \
|
|
||||||
;; \
|
|
||||||
lfetch.fault.excl.nt1 [r17]; \
|
|
||||||
tbit.nz p15,p0=r29,IA64_PSR_I_BIT; \
|
|
||||||
mov r29=b0 \
|
|
||||||
;; \
|
|
||||||
WORKAROUND; \
|
|
||||||
adds r16=PT(R8),r1; /* initialize first base pointer */ \
|
|
||||||
adds r17=PT(R9),r1; /* initialize second base pointer */ \
|
|
||||||
(pKStk) mov r18=r0; /* make sure r18 isn't NaT */ \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0,0; st8.spill [r16]=r8,16; \
|
|
||||||
.mem.offset 8,0; st8.spill [r17]=r9,16; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0,0; st8.spill [r16]=r10,24; \
|
|
||||||
movl r8=XSI_PRECOVER_IFS; \
|
|
||||||
.mem.offset 8,0; st8.spill [r17]=r11,24; \
|
|
||||||
;; \
|
|
||||||
/* xen special handling for possibly lazy cover */ \
|
|
||||||
/* SAVE_MIN case in dispatch_ia32_handler: mov r30=r0 */ \
|
|
||||||
ld8 r30=[r8]; \
|
|
||||||
(pUStk) sub r18=r18,r22; /* r18=RSE.ndirty*8 */ \
|
|
||||||
st8 [r16]=r28,16; /* save cr.iip */ \
|
|
||||||
;; \
|
|
||||||
st8 [r17]=r30,16; /* save cr.ifs */ \
|
|
||||||
mov r8=ar.ccv; \
|
|
||||||
mov r9=ar.csd; \
|
|
||||||
mov r10=ar.ssd; \
|
|
||||||
movl r11=FPSR_DEFAULT; /* L-unit */ \
|
|
||||||
;; \
|
|
||||||
st8 [r16]=r25,16; /* save ar.unat */ \
|
|
||||||
st8 [r17]=r26,16; /* save ar.pfs */ \
|
|
||||||
shl r18=r18,16; /* compute ar.rsc to be used for "loadrs" */ \
|
|
||||||
;; \
|
|
||||||
st8 [r16]=r27,16; /* save ar.rsc */ \
|
|
||||||
(pUStk) st8 [r17]=r24,16; /* save ar.rnat */ \
|
|
||||||
(pKStk) adds r17=16,r17; /* skip over ar_rnat field */ \
|
|
||||||
;; /* avoid RAW on r16 & r17 */ \
|
|
||||||
(pUStk) st8 [r16]=r23,16; /* save ar.bspstore */ \
|
|
||||||
st8 [r17]=r31,16; /* save predicates */ \
|
|
||||||
(pKStk) adds r16=16,r16; /* skip over ar_bspstore field */ \
|
|
||||||
;; \
|
|
||||||
st8 [r16]=r29,16; /* save b0 */ \
|
|
||||||
st8 [r17]=r18,16; /* save ar.rsc value for "loadrs" */ \
|
|
||||||
cmp.eq pNonSys,pSys=r0,r0 /* initialize pSys=0, pNonSys=1 */ \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0,0; st8.spill [r16]=r20,16; /* save original r1 */ \
|
|
||||||
.mem.offset 8,0; st8.spill [r17]=r12,16; \
|
|
||||||
adds r12=-16,r1; /* switch to kernel memory stack (with 16 bytes of scratch) */ \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0,0; st8.spill [r16]=r13,16; \
|
|
||||||
.mem.offset 8,0; st8.spill [r17]=r21,16; /* save ar.fpsr */ \
|
|
||||||
mov r13=IA64_KR(CURRENT); /* establish `current' */ \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0,0; st8.spill [r16]=r15,16; \
|
|
||||||
.mem.offset 8,0; st8.spill [r17]=r14,16; \
|
|
||||||
;; \
|
|
||||||
.mem.offset 0,0; st8.spill [r16]=r2,16; \
|
|
||||||
.mem.offset 8,0; st8.spill [r17]=r3,16; \
|
|
||||||
XEN_ACCOUNT_GET_STAMP \
|
|
||||||
adds r2=IA64_PT_REGS_R16_OFFSET,r1; \
|
|
||||||
;; \
|
|
||||||
EXTRA; \
|
|
||||||
movl r1=__gp; /* establish kernel global pointer */ \
|
|
||||||
;; \
|
|
||||||
ACCOUNT_SYS_ENTER \
|
|
||||||
BSW_1(r3,r14); /* switch back to bank 1 (must be last in insn group) */ \
|
|
||||||
;;
|
|
|
@ -1,38 +0,0 @@
|
||||||
#ifndef _ASM_IA64_XEN_PAGE_COHERENT_H
|
|
||||||
#define _ASM_IA64_XEN_PAGE_COHERENT_H
|
|
||||||
|
|
||||||
#include <asm/page.h>
|
|
||||||
#include <linux/dma-attrs.h>
|
|
||||||
#include <linux/dma-mapping.h>
|
|
||||||
|
|
||||||
static inline void *xen_alloc_coherent_pages(struct device *hwdev, size_t size,
|
|
||||||
dma_addr_t *dma_handle, gfp_t flags,
|
|
||||||
struct dma_attrs *attrs)
|
|
||||||
{
|
|
||||||
void *vstart = (void*)__get_free_pages(flags, get_order(size));
|
|
||||||
*dma_handle = virt_to_phys(vstart);
|
|
||||||
return vstart;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void xen_free_coherent_pages(struct device *hwdev, size_t size,
|
|
||||||
void *cpu_addr, dma_addr_t dma_handle,
|
|
||||||
struct dma_attrs *attrs)
|
|
||||||
{
|
|
||||||
free_pages((unsigned long) cpu_addr, get_order(size));
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void xen_dma_map_page(struct device *hwdev, struct page *page,
|
|
||||||
unsigned long offset, size_t size, enum dma_data_direction dir,
|
|
||||||
struct dma_attrs *attrs) { }
|
|
||||||
|
|
||||||
static inline void xen_dma_unmap_page(struct device *hwdev, dma_addr_t handle,
|
|
||||||
size_t size, enum dma_data_direction dir,
|
|
||||||
struct dma_attrs *attrs) { }
|
|
||||||
|
|
||||||
static inline void xen_dma_sync_single_for_cpu(struct device *hwdev,
|
|
||||||
dma_addr_t handle, size_t size, enum dma_data_direction dir) { }
|
|
||||||
|
|
||||||
static inline void xen_dma_sync_single_for_device(struct device *hwdev,
|
|
||||||
dma_addr_t handle, size_t size, enum dma_data_direction dir) { }
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_PAGE_COHERENT_H */
|
|
|
@ -1,65 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* arch/ia64/include/asm/xen/page.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
|
|
||||||
* VA Linux Systems Japan K.K.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ASM_IA64_XEN_PAGE_H
|
|
||||||
#define _ASM_IA64_XEN_PAGE_H
|
|
||||||
|
|
||||||
#define INVALID_P2M_ENTRY (~0UL)
|
|
||||||
|
|
||||||
static inline unsigned long mfn_to_pfn(unsigned long mfn)
|
|
||||||
{
|
|
||||||
return mfn;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned long pfn_to_mfn(unsigned long pfn)
|
|
||||||
{
|
|
||||||
return pfn;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define phys_to_machine_mapping_valid(_x) (1)
|
|
||||||
|
|
||||||
static inline void *mfn_to_virt(unsigned long mfn)
|
|
||||||
{
|
|
||||||
return __va(mfn << PAGE_SHIFT);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned long virt_to_mfn(void *virt)
|
|
||||||
{
|
|
||||||
return __pa(virt) >> PAGE_SHIFT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* for tpmfront.c */
|
|
||||||
static inline unsigned long virt_to_machine(void *virt)
|
|
||||||
{
|
|
||||||
return __pa(virt);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void set_phys_to_machine(unsigned long pfn, unsigned long mfn)
|
|
||||||
{
|
|
||||||
/* nothing */
|
|
||||||
}
|
|
||||||
|
|
||||||
#define pte_mfn(_x) pte_pfn(_x)
|
|
||||||
#define mfn_pte(_x, _y) __pte_ma(0) /* unmodified use */
|
|
||||||
#define __pte_ma(_x) ((pte_t) {(_x)}) /* unmodified use */
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_PAGE_H */
|
|
|
@ -1,38 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* arch/ia64/include/asm/xen/patchlist.h
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
|
|
||||||
* VA Linux Systems Japan K.K.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __paravirt_start_gate_fsyscall_patchlist \
|
|
||||||
__xen_start_gate_fsyscall_patchlist
|
|
||||||
#define __paravirt_end_gate_fsyscall_patchlist \
|
|
||||||
__xen_end_gate_fsyscall_patchlist
|
|
||||||
#define __paravirt_start_gate_brl_fsys_bubble_down_patchlist \
|
|
||||||
__xen_start_gate_brl_fsys_bubble_down_patchlist
|
|
||||||
#define __paravirt_end_gate_brl_fsys_bubble_down_patchlist \
|
|
||||||
__xen_end_gate_brl_fsys_bubble_down_patchlist
|
|
||||||
#define __paravirt_start_gate_vtop_patchlist \
|
|
||||||
__xen_start_gate_vtop_patchlist
|
|
||||||
#define __paravirt_end_gate_vtop_patchlist \
|
|
||||||
__xen_end_gate_vtop_patchlist
|
|
||||||
#define __paravirt_start_gate_mckinley_e9_patchlist \
|
|
||||||
__xen_start_gate_mckinley_e9_patchlist
|
|
||||||
#define __paravirt_end_gate_mckinley_e9_patchlist \
|
|
||||||
__xen_end_gate_mckinley_e9_patchlist
|
|
|
@ -1,135 +0,0 @@
|
||||||
#ifndef _ASM_IA64_XEN_PRIVOP_H
|
|
||||||
#define _ASM_IA64_XEN_PRIVOP_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2005 Hewlett-Packard Co
|
|
||||||
* Dan Magenheimer <dan.magenheimer@hp.com>
|
|
||||||
*
|
|
||||||
* Paravirtualizations of privileged operations for Xen/ia64
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* inline privop and paravirt_alt support
|
|
||||||
* Copyright (c) 2007 Isaku Yamahata <yamahata at valinux co jp>
|
|
||||||
* VA Linux Systems Japan K.K.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
#include <linux/types.h> /* arch-ia64.h requires uint64_t */
|
|
||||||
#endif
|
|
||||||
#include <asm/xen/interface.h>
|
|
||||||
|
|
||||||
/* At 1 MB, before per-cpu space but still addressable using addl instead
|
|
||||||
of movl. */
|
|
||||||
#define XSI_BASE 0xfffffffffff00000
|
|
||||||
|
|
||||||
/* Address of mapped regs. */
|
|
||||||
#define XMAPPEDREGS_BASE (XSI_BASE + XSI_SIZE)
|
|
||||||
|
|
||||||
#ifdef __ASSEMBLY__
|
|
||||||
#define XEN_HYPER_RFI break HYPERPRIVOP_RFI
|
|
||||||
#define XEN_HYPER_RSM_PSR_DT break HYPERPRIVOP_RSM_DT
|
|
||||||
#define XEN_HYPER_SSM_PSR_DT break HYPERPRIVOP_SSM_DT
|
|
||||||
#define XEN_HYPER_COVER break HYPERPRIVOP_COVER
|
|
||||||
#define XEN_HYPER_ITC_D break HYPERPRIVOP_ITC_D
|
|
||||||
#define XEN_HYPER_ITC_I break HYPERPRIVOP_ITC_I
|
|
||||||
#define XEN_HYPER_SSM_I break HYPERPRIVOP_SSM_I
|
|
||||||
#define XEN_HYPER_GET_IVR break HYPERPRIVOP_GET_IVR
|
|
||||||
#define XEN_HYPER_THASH break HYPERPRIVOP_THASH
|
|
||||||
#define XEN_HYPER_ITR_D break HYPERPRIVOP_ITR_D
|
|
||||||
#define XEN_HYPER_SET_KR break HYPERPRIVOP_SET_KR
|
|
||||||
#define XEN_HYPER_GET_PSR break HYPERPRIVOP_GET_PSR
|
|
||||||
#define XEN_HYPER_SET_RR0_TO_RR4 break HYPERPRIVOP_SET_RR0_TO_RR4
|
|
||||||
|
|
||||||
#define XSI_IFS (XSI_BASE + XSI_IFS_OFS)
|
|
||||||
#define XSI_PRECOVER_IFS (XSI_BASE + XSI_PRECOVER_IFS_OFS)
|
|
||||||
#define XSI_IFA (XSI_BASE + XSI_IFA_OFS)
|
|
||||||
#define XSI_ISR (XSI_BASE + XSI_ISR_OFS)
|
|
||||||
#define XSI_IIM (XSI_BASE + XSI_IIM_OFS)
|
|
||||||
#define XSI_ITIR (XSI_BASE + XSI_ITIR_OFS)
|
|
||||||
#define XSI_PSR_I_ADDR (XSI_BASE + XSI_PSR_I_ADDR_OFS)
|
|
||||||
#define XSI_PSR_IC (XSI_BASE + XSI_PSR_IC_OFS)
|
|
||||||
#define XSI_IPSR (XSI_BASE + XSI_IPSR_OFS)
|
|
||||||
#define XSI_IIP (XSI_BASE + XSI_IIP_OFS)
|
|
||||||
#define XSI_B1NAT (XSI_BASE + XSI_B1NATS_OFS)
|
|
||||||
#define XSI_BANK1_R16 (XSI_BASE + XSI_BANK1_R16_OFS)
|
|
||||||
#define XSI_BANKNUM (XSI_BASE + XSI_BANKNUM_OFS)
|
|
||||||
#define XSI_IHA (XSI_BASE + XSI_IHA_OFS)
|
|
||||||
#define XSI_ITC_OFFSET (XSI_BASE + XSI_ITC_OFFSET_OFS)
|
|
||||||
#define XSI_ITC_LAST (XSI_BASE + XSI_ITC_LAST_OFS)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
|
|
||||||
/************************************************/
|
|
||||||
/* Instructions paravirtualized for correctness */
|
|
||||||
/************************************************/
|
|
||||||
|
|
||||||
/* "fc" and "thash" are privilege-sensitive instructions, meaning they
|
|
||||||
* may have different semantics depending on whether they are executed
|
|
||||||
* at PL0 vs PL!=0. When paravirtualized, these instructions mustn't
|
|
||||||
* be allowed to execute directly, lest incorrect semantics result. */
|
|
||||||
extern void xen_fc(void *addr);
|
|
||||||
extern unsigned long xen_thash(unsigned long addr);
|
|
||||||
|
|
||||||
/* Note that "ttag" and "cover" are also privilege-sensitive; "ttag"
|
|
||||||
* is not currently used (though it may be in a long-format VHPT system!)
|
|
||||||
* and the semantics of cover only change if psr.ic is off which is very
|
|
||||||
* rare (and currently non-existent outside of assembly code */
|
|
||||||
|
|
||||||
/* There are also privilege-sensitive registers. These registers are
|
|
||||||
* readable at any privilege level but only writable at PL0. */
|
|
||||||
extern unsigned long xen_get_cpuid(int index);
|
|
||||||
extern unsigned long xen_get_pmd(int index);
|
|
||||||
|
|
||||||
#ifndef ASM_SUPPORTED
|
|
||||||
extern unsigned long xen_get_eflag(void); /* see xen_ia64_getreg */
|
|
||||||
extern void xen_set_eflag(unsigned long); /* see xen_ia64_setreg */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/************************************************/
|
|
||||||
/* Instructions paravirtualized for performance */
|
|
||||||
/************************************************/
|
|
||||||
|
|
||||||
/* Xen uses memory-mapped virtual privileged registers for access to many
|
|
||||||
* performance-sensitive privileged registers. Some, like the processor
|
|
||||||
* status register (psr), are broken up into multiple memory locations.
|
|
||||||
* Others, like "pend", are abstractions based on privileged registers.
|
|
||||||
* "Pend" is guaranteed to be set if reading cr.ivr would return a
|
|
||||||
* (non-spurious) interrupt. */
|
|
||||||
#define XEN_MAPPEDREGS ((struct mapped_regs *)XMAPPEDREGS_BASE)
|
|
||||||
|
|
||||||
#define XSI_PSR_I \
|
|
||||||
(*XEN_MAPPEDREGS->interrupt_mask_addr)
|
|
||||||
#define xen_get_virtual_psr_i() \
|
|
||||||
(!XSI_PSR_I)
|
|
||||||
#define xen_set_virtual_psr_i(_val) \
|
|
||||||
({ XSI_PSR_I = (uint8_t)(_val) ? 0 : 1; })
|
|
||||||
#define xen_set_virtual_psr_ic(_val) \
|
|
||||||
({ XEN_MAPPEDREGS->interrupt_collection_enabled = _val ? 1 : 0; })
|
|
||||||
#define xen_get_virtual_pend() \
|
|
||||||
(*(((uint8_t *)XEN_MAPPEDREGS->interrupt_mask_addr) - 1))
|
|
||||||
|
|
||||||
#ifndef ASM_SUPPORTED
|
|
||||||
/* Although all privileged operations can be left to trap and will
|
|
||||||
* be properly handled by Xen, some are frequent enough that we use
|
|
||||||
* hyperprivops for performance. */
|
|
||||||
extern unsigned long xen_get_psr(void);
|
|
||||||
extern unsigned long xen_get_ivr(void);
|
|
||||||
extern unsigned long xen_get_tpr(void);
|
|
||||||
extern void xen_hyper_ssm_i(void);
|
|
||||||
extern void xen_set_itm(unsigned long);
|
|
||||||
extern void xen_set_tpr(unsigned long);
|
|
||||||
extern void xen_eoi(unsigned long);
|
|
||||||
extern unsigned long xen_get_rr(unsigned long index);
|
|
||||||
extern void xen_set_rr(unsigned long index, unsigned long val);
|
|
||||||
extern void xen_set_rr0_to_rr4(unsigned long val0, unsigned long val1,
|
|
||||||
unsigned long val2, unsigned long val3,
|
|
||||||
unsigned long val4);
|
|
||||||
extern void xen_set_kr(unsigned long index, unsigned long val);
|
|
||||||
extern void xen_ptcga(unsigned long addr, unsigned long size);
|
|
||||||
#endif /* !ASM_SUPPORTED */
|
|
||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_PRIVOP_H */
|
|
|
@ -1,51 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2006 Tristan Gingold <tristan.gingold@bull.net>, Bull SAS
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ASM_IA64_XEN_XCOM_HCALL_H
|
|
||||||
#define _ASM_IA64_XEN_XCOM_HCALL_H
|
|
||||||
|
|
||||||
/* These function creates inline or mini descriptor for the parameters and
|
|
||||||
calls the corresponding xencomm_arch_hypercall_X.
|
|
||||||
Architectures should defines HYPERVISOR_xxx as xencomm_hypercall_xxx unless
|
|
||||||
they want to use their own wrapper. */
|
|
||||||
extern int xencomm_hypercall_console_io(int cmd, int count, char *str);
|
|
||||||
|
|
||||||
extern int xencomm_hypercall_event_channel_op(int cmd, void *op);
|
|
||||||
|
|
||||||
extern int xencomm_hypercall_xen_version(int cmd, void *arg);
|
|
||||||
|
|
||||||
extern int xencomm_hypercall_physdev_op(int cmd, void *op);
|
|
||||||
|
|
||||||
extern int xencomm_hypercall_grant_table_op(unsigned int cmd, void *op,
|
|
||||||
unsigned int count);
|
|
||||||
|
|
||||||
extern int xencomm_hypercall_sched_op(int cmd, void *arg);
|
|
||||||
|
|
||||||
extern int xencomm_hypercall_multicall(void *call_list, int nr_calls);
|
|
||||||
|
|
||||||
extern int xencomm_hypercall_callback_op(int cmd, void *arg);
|
|
||||||
|
|
||||||
extern int xencomm_hypercall_memory_op(unsigned int cmd, void *arg);
|
|
||||||
|
|
||||||
extern int xencomm_hypercall_suspend(unsigned long srec);
|
|
||||||
|
|
||||||
extern long xencomm_hypercall_vcpu_op(int cmd, int cpu, void *arg);
|
|
||||||
|
|
||||||
extern long xencomm_hypercall_opt_feature(void *arg);
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_XCOM_HCALL_H */
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2006 Hollis Blanchard <hollisb@us.ibm.com>, IBM Corporation
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _ASM_IA64_XEN_XENCOMM_H
|
|
||||||
#define _ASM_IA64_XEN_XENCOMM_H
|
|
||||||
|
|
||||||
#include <xen/xencomm.h>
|
|
||||||
#include <asm/pgtable.h>
|
|
||||||
|
|
||||||
/* Must be called before any hypercall. */
|
|
||||||
extern void xencomm_initialize(void);
|
|
||||||
extern int xencomm_is_initialized(void);
|
|
||||||
|
|
||||||
/* Check if virtual contiguity means physical contiguity
|
|
||||||
* where the passed address is a pointer value in virtual address.
|
|
||||||
* On ia64, identity mapping area in region 7 or the piece of region 5
|
|
||||||
* that is mapped by itr[IA64_TR_KERNEL]/dtr[IA64_TR_KERNEL]
|
|
||||||
*/
|
|
||||||
static inline int xencomm_is_phys_contiguous(unsigned long addr)
|
|
||||||
{
|
|
||||||
return (PAGE_OFFSET <= addr &&
|
|
||||||
addr < (PAGE_OFFSET + (1UL << IA64_MAX_PHYS_BITS))) ||
|
|
||||||
(KERNEL_START <= addr &&
|
|
||||||
addr < KERNEL_START + KERNEL_TR_PAGE_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_XEN_XENCOMM_H */
|
|
|
@ -20,13 +20,4 @@
|
||||||
*/
|
*/
|
||||||
#define __IA64_BREAK_SYSCALL 0x100000
|
#define __IA64_BREAK_SYSCALL 0x100000
|
||||||
|
|
||||||
/*
|
|
||||||
* Xen specific break numbers:
|
|
||||||
*/
|
|
||||||
#define __IA64_XEN_HYPERCALL 0x1000
|
|
||||||
/* [__IA64_XEN_HYPERPRIVOP_START, __IA64_XEN_HYPERPRIVOP_MAX] is used
|
|
||||||
for xen hyperprivops */
|
|
||||||
#define __IA64_XEN_HYPERPRIVOP_START 0x1
|
|
||||||
#define __IA64_XEN_HYPERPRIVOP_MAX 0x1a
|
|
||||||
|
|
||||||
#endif /* _ASM_IA64_BREAK_H */
|
#endif /* _ASM_IA64_BREAK_H */
|
||||||
|
|
|
@ -53,7 +53,6 @@
|
||||||
#include <asm/numa.h>
|
#include <asm/numa.h>
|
||||||
#include <asm/sal.h>
|
#include <asm/sal.h>
|
||||||
#include <asm/cyclone.h>
|
#include <asm/cyclone.h>
|
||||||
#include <asm/xen/hypervisor.h>
|
|
||||||
|
|
||||||
#define BAD_MADT_ENTRY(entry, end) ( \
|
#define BAD_MADT_ENTRY(entry, end) ( \
|
||||||
(!entry) || (unsigned long)entry + sizeof(*entry) > end || \
|
(!entry) || (unsigned long)entry + sizeof(*entry) > end || \
|
||||||
|
@ -120,8 +119,6 @@ acpi_get_sysname(void)
|
||||||
return "uv";
|
return "uv";
|
||||||
else
|
else
|
||||||
return "sn2";
|
return "sn2";
|
||||||
} else if (xen_pv_domain() && !strcmp(hdr->oem_id, "XEN")) {
|
|
||||||
return "xen";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_INTEL_IOMMU
|
#ifdef CONFIG_INTEL_IOMMU
|
||||||
|
|
|
@ -16,9 +16,6 @@
|
||||||
#include <asm/sigcontext.h>
|
#include <asm/sigcontext.h>
|
||||||
#include <asm/mca.h>
|
#include <asm/mca.h>
|
||||||
|
|
||||||
#include <asm/xen/interface.h>
|
|
||||||
#include <asm/xen/hypervisor.h>
|
|
||||||
|
|
||||||
#include "../kernel/sigframe.h"
|
#include "../kernel/sigframe.h"
|
||||||
#include "../kernel/fsyscall_gtod_data.h"
|
#include "../kernel/fsyscall_gtod_data.h"
|
||||||
|
|
||||||
|
@ -290,33 +287,4 @@ void foo(void)
|
||||||
DEFINE(IA64_ITC_LASTCYCLE_OFFSET,
|
DEFINE(IA64_ITC_LASTCYCLE_OFFSET,
|
||||||
offsetof (struct itc_jitter_data_t, itc_lastcycle));
|
offsetof (struct itc_jitter_data_t, itc_lastcycle));
|
||||||
|
|
||||||
#ifdef CONFIG_XEN
|
|
||||||
BLANK();
|
|
||||||
|
|
||||||
DEFINE(XEN_NATIVE_ASM, XEN_NATIVE);
|
|
||||||
DEFINE(XEN_PV_DOMAIN_ASM, XEN_PV_DOMAIN);
|
|
||||||
|
|
||||||
#define DEFINE_MAPPED_REG_OFS(sym, field) \
|
|
||||||
DEFINE(sym, (XMAPPEDREGS_OFS + offsetof(struct mapped_regs, field)))
|
|
||||||
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_PSR_I_ADDR_OFS, interrupt_mask_addr);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_IPSR_OFS, ipsr);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_IIP_OFS, iip);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_IFS_OFS, ifs);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_PRECOVER_IFS_OFS, precover_ifs);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_ISR_OFS, isr);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_IFA_OFS, ifa);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_IIPA_OFS, iipa);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_IIM_OFS, iim);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_IHA_OFS, iha);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_ITIR_OFS, itir);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_PSR_IC_OFS, interrupt_collection_enabled);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_BANKNUM_OFS, banknum);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_BANK0_R16_OFS, bank0_regs[0]);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_BANK1_R16_OFS, bank1_regs[0]);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_B0NATS_OFS, vbnat);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_B1NATS_OFS, vnat);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_ITC_OFFSET_OFS, itc_offset);
|
|
||||||
DEFINE_MAPPED_REG_OFS(XSI_ITC_LAST_OFS, itc_last);
|
|
||||||
#endif /* CONFIG_XEN */
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -416,8 +416,6 @@ start_ap:
|
||||||
|
|
||||||
default_setup_hook = 0 // Currently nothing needs to be done.
|
default_setup_hook = 0 // Currently nothing needs to be done.
|
||||||
|
|
||||||
.weak xen_setup_hook
|
|
||||||
|
|
||||||
.global hypervisor_type
|
.global hypervisor_type
|
||||||
hypervisor_type:
|
hypervisor_type:
|
||||||
data8 PARAVIRT_HYPERVISOR_TYPE_DEFAULT
|
data8 PARAVIRT_HYPERVISOR_TYPE_DEFAULT
|
||||||
|
@ -426,7 +424,6 @@ hypervisor_type:
|
||||||
|
|
||||||
hypervisor_setup_hooks:
|
hypervisor_setup_hooks:
|
||||||
data8 default_setup_hook
|
data8 default_setup_hook
|
||||||
data8 xen_setup_hook
|
|
||||||
num_hypervisor_hooks = (. - hypervisor_setup_hooks) / 8
|
num_hypervisor_hooks = (. - hypervisor_setup_hooks) / 8
|
||||||
.previous
|
.previous
|
||||||
|
|
||||||
|
|
|
@ -10,15 +10,11 @@
|
||||||
#include <linux/kbuild.h>
|
#include <linux/kbuild.h>
|
||||||
#include <linux/threads.h>
|
#include <linux/threads.h>
|
||||||
#include <asm/native/irq.h>
|
#include <asm/native/irq.h>
|
||||||
#include <asm/xen/irq.h>
|
|
||||||
|
|
||||||
void foo(void)
|
void foo(void)
|
||||||
{
|
{
|
||||||
union paravirt_nr_irqs_max {
|
union paravirt_nr_irqs_max {
|
||||||
char ia64_native_nr_irqs[IA64_NATIVE_NR_IRQS];
|
char ia64_native_nr_irqs[IA64_NATIVE_NR_IRQS];
|
||||||
#ifdef CONFIG_XEN
|
|
||||||
char xen_nr_irqs[XEN_NR_IRQS];
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DEFINE(NR_IRQS, sizeof (union paravirt_nr_irqs_max));
|
DEFINE(NR_IRQS, sizeof (union paravirt_nr_irqs_max));
|
||||||
|
|
|
@ -22,9 +22,6 @@
|
||||||
|
|
||||||
#ifdef __IA64_ASM_PARAVIRTUALIZED_PVCHECK
|
#ifdef __IA64_ASM_PARAVIRTUALIZED_PVCHECK
|
||||||
#include <asm/native/pvchk_inst.h>
|
#include <asm/native/pvchk_inst.h>
|
||||||
#elif defined(__IA64_ASM_PARAVIRTUALIZED_XEN)
|
|
||||||
#include <asm/xen/inst.h>
|
|
||||||
#include <asm/xen/minstate.h>
|
|
||||||
#else
|
#else
|
||||||
#include <asm/native/inst.h>
|
#include <asm/native/inst.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -20,9 +20,5 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined(__IA64_GATE_PARAVIRTUALIZED_XEN)
|
|
||||||
#include <asm/xen/patchlist.h>
|
|
||||||
#else
|
|
||||||
#include <asm/native/patchlist.h>
|
#include <asm/native/patchlist.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -182,12 +182,6 @@ SECTIONS {
|
||||||
__start_gate_section = .;
|
__start_gate_section = .;
|
||||||
*(.data..gate)
|
*(.data..gate)
|
||||||
__stop_gate_section = .;
|
__stop_gate_section = .;
|
||||||
#ifdef CONFIG_XEN
|
|
||||||
. = ALIGN(PAGE_SIZE);
|
|
||||||
__xen_start_gate_section = .;
|
|
||||||
*(.data..gate.xen)
|
|
||||||
__xen_stop_gate_section = .;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* make sure the gate page doesn't expose
|
* make sure the gate page doesn't expose
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
#
|
|
||||||
# This Kconfig describes xen/ia64 options
|
|
||||||
#
|
|
||||||
|
|
||||||
config XEN
|
|
||||||
bool "Xen hypervisor support"
|
|
||||||
default y
|
|
||||||
depends on PARAVIRT && MCKINLEY && IA64_PAGE_SIZE_16KB
|
|
||||||
select XEN_XENCOMM
|
|
||||||
select NO_IDLE_HZ
|
|
||||||
# followings are required to save/restore.
|
|
||||||
select ARCH_SUSPEND_POSSIBLE
|
|
||||||
select SUSPEND
|
|
||||||
select PM_SLEEP
|
|
||||||
help
|
|
||||||
Enable Xen hypervisor support. Resulting kernel runs
|
|
||||||
both as a guest OS on Xen and natively on hardware.
|
|
||||||
|
|
||||||
config XEN_XENCOMM
|
|
||||||
depends on XEN
|
|
||||||
bool
|
|
||||||
|
|
||||||
config NO_IDLE_HZ
|
|
||||||
depends on XEN
|
|
||||||
bool
|
|
|
@ -1,37 +0,0 @@
|
||||||
#
|
|
||||||
# Makefile for Xen components
|
|
||||||
#
|
|
||||||
|
|
||||||
obj-y := hypercall.o xenivt.o xensetup.o xen_pv_ops.o irq_xen.o \
|
|
||||||
hypervisor.o xencomm.o xcom_hcall.o grant-table.o time.o suspend.o \
|
|
||||||
gate-data.o
|
|
||||||
|
|
||||||
obj-$(CONFIG_IA64_GENERIC) += machvec.o
|
|
||||||
|
|
||||||
# The gate DSO image is built using a special linker script.
|
|
||||||
include $(srctree)/arch/ia64/kernel/Makefile.gate
|
|
||||||
|
|
||||||
# tell compiled for xen
|
|
||||||
CPPFLAGS_gate.lds += -D__IA64_GATE_PARAVIRTUALIZED_XEN
|
|
||||||
AFLAGS_gate.o += -D__IA64_ASM_PARAVIRTUALIZED_XEN -D__IA64_GATE_PARAVIRTUALIZED_XEN
|
|
||||||
|
|
||||||
# use same file of native.
|
|
||||||
$(obj)/gate.o: $(src)/../kernel/gate.S FORCE
|
|
||||||
$(call if_changed_dep,as_o_S)
|
|
||||||
$(obj)/gate.lds: $(src)/../kernel/gate.lds.S FORCE
|
|
||||||
$(call if_changed_dep,cpp_lds_S)
|
|
||||||
|
|
||||||
|
|
||||||
AFLAGS_xenivt.o += -D__IA64_ASM_PARAVIRTUALIZED_XEN
|
|
||||||
|
|
||||||
# xen multi compile
|
|
||||||
ASM_PARAVIRT_MULTI_COMPILE_SRCS = ivt.S entry.S fsys.S
|
|
||||||
ASM_PARAVIRT_OBJS = $(addprefix xen-,$(ASM_PARAVIRT_MULTI_COMPILE_SRCS:.S=.o))
|
|
||||||
obj-y += $(ASM_PARAVIRT_OBJS)
|
|
||||||
define paravirtualized_xen
|
|
||||||
AFLAGS_$(1) += -D__IA64_ASM_PARAVIRTUALIZED_XEN
|
|
||||||
endef
|
|
||||||
$(foreach o,$(ASM_PARAVIRT_OBJS),$(eval $(call paravirtualized_xen,$(o))))
|
|
||||||
|
|
||||||
$(obj)/xen-%.o: $(src)/../kernel/%.S FORCE
|
|
||||||
$(call if_changed_dep,as_o_S)
|
|
|
@ -1,3 +0,0 @@
|
||||||
.section .data..gate.xen, "aw"
|
|
||||||
|
|
||||||
.incbin "arch/ia64/xen/gate.so"
|
|
|
@ -1,94 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
* arch/ia64/xen/grant-table.c
|
|
||||||
*
|
|
||||||
* Copyright (c) 2006 Isaku Yamahata <yamahata at valinux co jp>
|
|
||||||
* VA Linux Systems Japan K.K.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/vmalloc.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/mm.h>
|
|
||||||
|
|
||||||
#include <xen/interface/xen.h>
|
|
||||||
#include <xen/interface/memory.h>
|
|
||||||
#include <xen/grant_table.h>
|
|
||||||
|
|
||||||
#include <asm/xen/hypervisor.h>
|
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* grant table hack
|
|
||||||
* cmd: GNTTABOP_xxx
|
|
||||||
*/
|
|
||||||
|
|
||||||
int arch_gnttab_map_shared(unsigned long *frames, unsigned long nr_gframes,
|
|
||||||
unsigned long max_nr_gframes,
|
|
||||||
struct grant_entry **__shared)
|
|
||||||
{
|
|
||||||
*__shared = __va(frames[0] << PAGE_SHIFT);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void arch_gnttab_unmap_shared(struct grant_entry *shared,
|
|
||||||
unsigned long nr_gframes)
|
|
||||||
{
|
|
||||||
/* nothing */
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gnttab_map_grant_ref_pre(struct gnttab_map_grant_ref *uop)
|
|
||||||
{
|
|
||||||
uint32_t flags;
|
|
||||||
|
|
||||||
flags = uop->flags;
|
|
||||||
|
|
||||||
if (flags & GNTMAP_host_map) {
|
|
||||||
if (flags & GNTMAP_application_map) {
|
|
||||||
printk(KERN_DEBUG
|
|
||||||
"GNTMAP_application_map is not supported yet: "
|
|
||||||
"flags 0x%x\n", flags);
|
|
||||||
BUG();
|
|
||||||
}
|
|
||||||
if (flags & GNTMAP_contains_pte) {
|
|
||||||
printk(KERN_DEBUG
|
|
||||||
"GNTMAP_contains_pte is not supported yet: "
|
|
||||||
"flags 0x%x\n", flags);
|
|
||||||
BUG();
|
|
||||||
}
|
|
||||||
} else if (flags & GNTMAP_device_map) {
|
|
||||||
printk("GNTMAP_device_map is not supported yet 0x%x\n", flags);
|
|
||||||
BUG(); /* not yet. actually this flag is not used. */
|
|
||||||
} else {
|
|
||||||
BUG();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
HYPERVISOR_grant_table_op(unsigned int cmd, void *uop, unsigned int count)
|
|
||||||
{
|
|
||||||
if (cmd == GNTTABOP_map_grant_ref) {
|
|
||||||
unsigned int i;
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
gnttab_map_grant_ref_pre(
|
|
||||||
(struct gnttab_map_grant_ref *)uop + i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return xencomm_hypercall_grant_table_op(cmd, uop, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(HYPERVISOR_grant_table_op);
|
|
|
@ -1,88 +0,0 @@
|
||||||
/*
|
|
||||||
* Support routines for Xen hypercalls
|
|
||||||
*
|
|
||||||
* Copyright (C) 2005 Dan Magenheimer <dan.magenheimer@hp.com>
|
|
||||||
* Copyright (C) 2008 Yaozu (Eddie) Dong <eddie.dong@intel.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <asm/asmmacro.h>
|
|
||||||
#include <asm/intrinsics.h>
|
|
||||||
#include <asm/xen/privop.h>
|
|
||||||
|
|
||||||
#ifdef __INTEL_COMPILER
|
|
||||||
/*
|
|
||||||
* Hypercalls without parameter.
|
|
||||||
*/
|
|
||||||
#define __HCALL0(name,hcall) \
|
|
||||||
GLOBAL_ENTRY(name); \
|
|
||||||
break hcall; \
|
|
||||||
br.ret.sptk.many rp; \
|
|
||||||
END(name)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hypercalls with 1 parameter.
|
|
||||||
*/
|
|
||||||
#define __HCALL1(name,hcall) \
|
|
||||||
GLOBAL_ENTRY(name); \
|
|
||||||
mov r8=r32; \
|
|
||||||
break hcall; \
|
|
||||||
br.ret.sptk.many rp; \
|
|
||||||
END(name)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hypercalls with 2 parameters.
|
|
||||||
*/
|
|
||||||
#define __HCALL2(name,hcall) \
|
|
||||||
GLOBAL_ENTRY(name); \
|
|
||||||
mov r8=r32; \
|
|
||||||
mov r9=r33; \
|
|
||||||
break hcall; \
|
|
||||||
br.ret.sptk.many rp; \
|
|
||||||
END(name)
|
|
||||||
|
|
||||||
__HCALL0(xen_get_psr, HYPERPRIVOP_GET_PSR)
|
|
||||||
__HCALL0(xen_get_ivr, HYPERPRIVOP_GET_IVR)
|
|
||||||
__HCALL0(xen_get_tpr, HYPERPRIVOP_GET_TPR)
|
|
||||||
__HCALL0(xen_hyper_ssm_i, HYPERPRIVOP_SSM_I)
|
|
||||||
|
|
||||||
__HCALL1(xen_set_tpr, HYPERPRIVOP_SET_TPR)
|
|
||||||
__HCALL1(xen_eoi, HYPERPRIVOP_EOI)
|
|
||||||
__HCALL1(xen_thash, HYPERPRIVOP_THASH)
|
|
||||||
__HCALL1(xen_set_itm, HYPERPRIVOP_SET_ITM)
|
|
||||||
__HCALL1(xen_get_rr, HYPERPRIVOP_GET_RR)
|
|
||||||
__HCALL1(xen_fc, HYPERPRIVOP_FC)
|
|
||||||
__HCALL1(xen_get_cpuid, HYPERPRIVOP_GET_CPUID)
|
|
||||||
__HCALL1(xen_get_pmd, HYPERPRIVOP_GET_PMD)
|
|
||||||
|
|
||||||
__HCALL2(xen_ptcga, HYPERPRIVOP_PTC_GA)
|
|
||||||
__HCALL2(xen_set_rr, HYPERPRIVOP_SET_RR)
|
|
||||||
__HCALL2(xen_set_kr, HYPERPRIVOP_SET_KR)
|
|
||||||
|
|
||||||
GLOBAL_ENTRY(xen_set_rr0_to_rr4)
|
|
||||||
mov r8=r32
|
|
||||||
mov r9=r33
|
|
||||||
mov r10=r34
|
|
||||||
mov r11=r35
|
|
||||||
mov r14=r36
|
|
||||||
XEN_HYPER_SET_RR0_TO_RR4
|
|
||||||
br.ret.sptk.many rp
|
|
||||||
;;
|
|
||||||
END(xen_set_rr0_to_rr4)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GLOBAL_ENTRY(xen_send_ipi)
|
|
||||||
mov r14=r32
|
|
||||||
mov r15=r33
|
|
||||||
mov r2=0x400
|
|
||||||
break 0x1000
|
|
||||||
;;
|
|
||||||
br.ret.sptk.many rp
|
|
||||||
;;
|
|
||||||
END(xen_send_ipi)
|
|
||||||
|
|
||||||
GLOBAL_ENTRY(__hypercall)
|
|
||||||
mov r2=r37
|
|
||||||
break 0x1000
|
|
||||||
br.ret.sptk.many b0
|
|
||||||
;;
|
|
||||||
END(__hypercall)
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue