diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-09-19 05:27:32 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-09-19 05:28:41 -0400 |
commit | 929bf0d0156562ce631728b6fa53d68004d456d2 (patch) | |
tree | 739063990a8077b29ef97e69d73bce94573daae4 /arch/ia64 | |
parent | def0a9b2573e00ab0b486cb5382625203ab4c4a6 (diff) | |
parent | 202c4675c55ddf6b443c7e057d2dff6b42ef71aa (diff) |
Merge branch 'linus' into perfcounters/core
Merge reason: Bring in tracing changes we depend on.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/ia64')
-rw-r--r-- | arch/ia64/Kconfig | 7 | ||||
-rw-r--r-- | arch/ia64/hp/sim/simeth.c | 2 | ||||
-rw-r--r-- | arch/ia64/include/asm/agp.h | 4 | ||||
-rw-r--r-- | arch/ia64/include/asm/device.h | 3 | ||||
-rw-r--r-- | arch/ia64/include/asm/kvm_host.h | 4 | ||||
-rw-r--r-- | arch/ia64/include/asm/kvm_para.h | 4 | ||||
-rw-r--r-- | arch/ia64/include/asm/pci.h | 14 | ||||
-rw-r--r-- | arch/ia64/include/asm/socket.h | 3 | ||||
-rw-r--r-- | arch/ia64/include/asm/topology.h | 17 | ||||
-rw-r--r-- | arch/ia64/kernel/process.c | 7 | ||||
-rw-r--r-- | arch/ia64/kernel/setup.c | 6 | ||||
-rw-r--r-- | arch/ia64/kernel/smp.c | 3 | ||||
-rw-r--r-- | arch/ia64/kernel/vmlinux.lds.S | 16 | ||||
-rw-r--r-- | arch/ia64/kvm/Kconfig | 11 | ||||
-rw-r--r-- | arch/ia64/kvm/kvm-ia64.c | 85 | ||||
-rw-r--r-- | arch/ia64/kvm/vcpu.c | 4 | ||||
-rw-r--r-- | arch/ia64/sn/kernel/setup.c | 2 |
17 files changed, 98 insertions, 94 deletions
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 170042b420d4..011a1cdf0eb5 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -89,6 +89,9 @@ config GENERIC_TIME_VSYSCALL | |||
89 | bool | 89 | bool |
90 | default y | 90 | default y |
91 | 91 | ||
92 | config HAVE_LEGACY_PER_CPU_AREA | ||
93 | def_bool y | ||
94 | |||
92 | config HAVE_SETUP_PER_CPU_AREA | 95 | config HAVE_SETUP_PER_CPU_AREA |
93 | def_bool y | 96 | def_bool y |
94 | 97 | ||
@@ -112,6 +115,10 @@ config IA64_UNCACHED_ALLOCATOR | |||
112 | bool | 115 | bool |
113 | select GENERIC_ALLOCATOR | 116 | select GENERIC_ALLOCATOR |
114 | 117 | ||
118 | config ARCH_USES_PG_UNCACHED | ||
119 | def_bool y | ||
120 | depends on IA64_UNCACHED_ALLOCATOR | ||
121 | |||
115 | config AUDIT_ARCH | 122 | config AUDIT_ARCH |
116 | bool | 123 | bool |
117 | default y | 124 | default y |
diff --git a/arch/ia64/hp/sim/simeth.c b/arch/ia64/hp/sim/simeth.c index e4d8fde68103..7e81966ce481 100644 --- a/arch/ia64/hp/sim/simeth.c +++ b/arch/ia64/hp/sim/simeth.c | |||
@@ -412,7 +412,7 @@ simeth_tx(struct sk_buff *skb, struct net_device *dev) | |||
412 | */ | 412 | */ |
413 | 413 | ||
414 | dev_kfree_skb(skb); | 414 | dev_kfree_skb(skb); |
415 | return 0; | 415 | return NETDEV_TX_OK; |
416 | } | 416 | } |
417 | 417 | ||
418 | static inline struct sk_buff * | 418 | static inline struct sk_buff * |
diff --git a/arch/ia64/include/asm/agp.h b/arch/ia64/include/asm/agp.h index c11fdd8ab4d7..01d09c401c5c 100644 --- a/arch/ia64/include/asm/agp.h +++ b/arch/ia64/include/asm/agp.h | |||
@@ -17,10 +17,6 @@ | |||
17 | #define unmap_page_from_agp(page) /* nothing */ | 17 | #define unmap_page_from_agp(page) /* nothing */ |
18 | #define flush_agp_cache() mb() | 18 | #define flush_agp_cache() mb() |
19 | 19 | ||
20 | /* Convert a physical address to an address suitable for the GART. */ | ||
21 | #define phys_to_gart(x) (x) | ||
22 | #define gart_to_phys(x) (x) | ||
23 | |||
24 | /* GATT allocation. Returns/accepts GATT kernel virtual address. */ | 20 | /* GATT allocation. Returns/accepts GATT kernel virtual address. */ |
25 | #define alloc_gatt_pages(order) \ | 21 | #define alloc_gatt_pages(order) \ |
26 | ((char *)__get_free_pages(GFP_KERNEL, (order))) | 22 | ((char *)__get_free_pages(GFP_KERNEL, (order))) |
diff --git a/arch/ia64/include/asm/device.h b/arch/ia64/include/asm/device.h index 41ab85d66f33..d66d446b127c 100644 --- a/arch/ia64/include/asm/device.h +++ b/arch/ia64/include/asm/device.h | |||
@@ -15,4 +15,7 @@ struct dev_archdata { | |||
15 | #endif | 15 | #endif |
16 | }; | 16 | }; |
17 | 17 | ||
18 | struct pdev_archdata { | ||
19 | }; | ||
20 | |||
18 | #endif /* _ASM_IA64_DEVICE_H */ | 21 | #endif /* _ASM_IA64_DEVICE_H */ |
diff --git a/arch/ia64/include/asm/kvm_host.h b/arch/ia64/include/asm/kvm_host.h index 5f43697aed30..d9b6325a9328 100644 --- a/arch/ia64/include/asm/kvm_host.h +++ b/arch/ia64/include/asm/kvm_host.h | |||
@@ -235,7 +235,8 @@ struct kvm_vm_data { | |||
235 | #define KVM_REQ_PTC_G 32 | 235 | #define KVM_REQ_PTC_G 32 |
236 | #define KVM_REQ_RESUME 33 | 236 | #define KVM_REQ_RESUME 33 |
237 | 237 | ||
238 | #define KVM_PAGES_PER_HPAGE 1 | 238 | #define KVM_NR_PAGE_SIZES 1 |
239 | #define KVM_PAGES_PER_HPAGE(x) 1 | ||
239 | 240 | ||
240 | struct kvm; | 241 | struct kvm; |
241 | struct kvm_vcpu; | 242 | struct kvm_vcpu; |
@@ -465,7 +466,6 @@ struct kvm_arch { | |||
465 | unsigned long metaphysical_rr4; | 466 | unsigned long metaphysical_rr4; |
466 | unsigned long vmm_init_rr; | 467 | unsigned long vmm_init_rr; |
467 | 468 | ||
468 | int online_vcpus; | ||
469 | int is_sn2; | 469 | int is_sn2; |
470 | 470 | ||
471 | struct kvm_ioapic *vioapic; | 471 | struct kvm_ioapic *vioapic; |
diff --git a/arch/ia64/include/asm/kvm_para.h b/arch/ia64/include/asm/kvm_para.h index 0d6d8ca07b8c..1588aee781a2 100644 --- a/arch/ia64/include/asm/kvm_para.h +++ b/arch/ia64/include/asm/kvm_para.h | |||
@@ -19,9 +19,13 @@ | |||
19 | * | 19 | * |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #ifdef __KERNEL__ | ||
23 | |||
22 | static inline unsigned int kvm_arch_para_features(void) | 24 | static inline unsigned int kvm_arch_para_features(void) |
23 | { | 25 | { |
24 | return 0; | 26 | return 0; |
25 | } | 27 | } |
26 | 28 | ||
27 | #endif | 29 | #endif |
30 | |||
31 | #endif | ||
diff --git a/arch/ia64/include/asm/pci.h b/arch/ia64/include/asm/pci.h index fcfca56bb850..55281aabe5f2 100644 --- a/arch/ia64/include/asm/pci.h +++ b/arch/ia64/include/asm/pci.h | |||
@@ -17,7 +17,6 @@ | |||
17 | * loader. | 17 | * loader. |
18 | */ | 18 | */ |
19 | #define pcibios_assign_all_busses() 0 | 19 | #define pcibios_assign_all_busses() 0 |
20 | #define pcibios_scan_all_fns(a, b) 0 | ||
21 | 20 | ||
22 | #define PCIBIOS_MIN_IO 0x1000 | 21 | #define PCIBIOS_MIN_IO 0x1000 |
23 | #define PCIBIOS_MIN_MEM 0x10000000 | 22 | #define PCIBIOS_MIN_MEM 0x10000000 |
@@ -135,7 +134,18 @@ extern void pcibios_resource_to_bus(struct pci_dev *dev, | |||
135 | extern void pcibios_bus_to_resource(struct pci_dev *dev, | 134 | extern void pcibios_bus_to_resource(struct pci_dev *dev, |
136 | struct resource *res, struct pci_bus_region *region); | 135 | struct resource *res, struct pci_bus_region *region); |
137 | 136 | ||
138 | #define pcibios_scan_all_fns(a, b) 0 | 137 | static inline struct resource * |
138 | pcibios_select_root(struct pci_dev *pdev, struct resource *res) | ||
139 | { | ||
140 | struct resource *root = NULL; | ||
141 | |||
142 | if (res->flags & IORESOURCE_IO) | ||
143 | root = &ioport_resource; | ||
144 | if (res->flags & IORESOURCE_MEM) | ||
145 | root = &iomem_resource; | ||
146 | |||
147 | return root; | ||
148 | } | ||
139 | 149 | ||
140 | #define HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ | 150 | #define HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ |
141 | static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | 151 | static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) |
diff --git a/arch/ia64/include/asm/socket.h b/arch/ia64/include/asm/socket.h index 745421225ec6..0b0d5ff062e5 100644 --- a/arch/ia64/include/asm/socket.h +++ b/arch/ia64/include/asm/socket.h | |||
@@ -66,4 +66,7 @@ | |||
66 | #define SO_TIMESTAMPING 37 | 66 | #define SO_TIMESTAMPING 37 |
67 | #define SCM_TIMESTAMPING SO_TIMESTAMPING | 67 | #define SCM_TIMESTAMPING SO_TIMESTAMPING |
68 | 68 | ||
69 | #define SO_PROTOCOL 38 | ||
70 | #define SO_DOMAIN 39 | ||
71 | |||
69 | #endif /* _ASM_IA64_SOCKET_H */ | 72 | #endif /* _ASM_IA64_SOCKET_H */ |
diff --git a/arch/ia64/include/asm/topology.h b/arch/ia64/include/asm/topology.h index 7b4c8c70b2d1..d0141fbf51d0 100644 --- a/arch/ia64/include/asm/topology.h +++ b/arch/ia64/include/asm/topology.h | |||
@@ -61,12 +61,13 @@ void build_cpu_to_node_map(void); | |||
61 | .cache_nice_tries = 2, \ | 61 | .cache_nice_tries = 2, \ |
62 | .busy_idx = 2, \ | 62 | .busy_idx = 2, \ |
63 | .idle_idx = 1, \ | 63 | .idle_idx = 1, \ |
64 | .newidle_idx = 2, \ | 64 | .newidle_idx = 0, \ |
65 | .wake_idx = 1, \ | 65 | .wake_idx = 0, \ |
66 | .forkexec_idx = 1, \ | 66 | .forkexec_idx = 0, \ |
67 | .flags = SD_LOAD_BALANCE \ | 67 | .flags = SD_LOAD_BALANCE \ |
68 | | SD_BALANCE_NEWIDLE \ | 68 | | SD_BALANCE_NEWIDLE \ |
69 | | SD_BALANCE_EXEC \ | 69 | | SD_BALANCE_EXEC \ |
70 | | SD_BALANCE_FORK \ | ||
70 | | SD_WAKE_AFFINE, \ | 71 | | SD_WAKE_AFFINE, \ |
71 | .last_balance = jiffies, \ | 72 | .last_balance = jiffies, \ |
72 | .balance_interval = 1, \ | 73 | .balance_interval = 1, \ |
@@ -85,14 +86,14 @@ void build_cpu_to_node_map(void); | |||
85 | .cache_nice_tries = 2, \ | 86 | .cache_nice_tries = 2, \ |
86 | .busy_idx = 3, \ | 87 | .busy_idx = 3, \ |
87 | .idle_idx = 2, \ | 88 | .idle_idx = 2, \ |
88 | .newidle_idx = 2, \ | 89 | .newidle_idx = 0, \ |
89 | .wake_idx = 1, \ | 90 | .wake_idx = 0, \ |
90 | .forkexec_idx = 1, \ | 91 | .forkexec_idx = 0, \ |
91 | .flags = SD_LOAD_BALANCE \ | 92 | .flags = SD_LOAD_BALANCE \ |
93 | | SD_BALANCE_NEWIDLE \ | ||
92 | | SD_BALANCE_EXEC \ | 94 | | SD_BALANCE_EXEC \ |
93 | | SD_BALANCE_FORK \ | 95 | | SD_BALANCE_FORK \ |
94 | | SD_SERIALIZE \ | 96 | | SD_SERIALIZE, \ |
95 | | SD_WAKE_BALANCE, \ | ||
96 | .last_balance = jiffies, \ | 97 | .last_balance = jiffies, \ |
97 | .balance_interval = 64, \ | 98 | .balance_interval = 64, \ |
98 | .nr_balance_failed = 0, \ | 99 | .nr_balance_failed = 0, \ |
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c index 89969e950045..9bcec9945c12 100644 --- a/arch/ia64/kernel/process.c +++ b/arch/ia64/kernel/process.c | |||
@@ -161,6 +161,13 @@ show_regs (struct pt_regs *regs) | |||
161 | show_stack(NULL, NULL); | 161 | show_stack(NULL, NULL); |
162 | } | 162 | } |
163 | 163 | ||
164 | /* local support for deprecated console_print */ | ||
165 | void | ||
166 | console_print(const char *s) | ||
167 | { | ||
168 | printk(KERN_EMERG "%s", s); | ||
169 | } | ||
170 | |||
164 | void | 171 | void |
165 | do_notify_resume_user(sigset_t *unused, struct sigscratch *scr, long in_syscall) | 172 | do_notify_resume_user(sigset_t *unused, struct sigscratch *scr, long in_syscall) |
166 | { | 173 | { |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index 1b23ec126b63..1de86c96801d 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
@@ -855,11 +855,17 @@ identify_cpu (struct cpuinfo_ia64 *c) | |||
855 | c->unimpl_pa_mask = ~((1L<<63) | ((1L << phys_addr_size) - 1)); | 855 | c->unimpl_pa_mask = ~((1L<<63) | ((1L << phys_addr_size) - 1)); |
856 | } | 856 | } |
857 | 857 | ||
858 | /* | ||
859 | * In UP configuration, setup_per_cpu_areas() is defined in | ||
860 | * include/linux/percpu.h | ||
861 | */ | ||
862 | #ifdef CONFIG_SMP | ||
858 | void __init | 863 | void __init |
859 | setup_per_cpu_areas (void) | 864 | setup_per_cpu_areas (void) |
860 | { | 865 | { |
861 | /* start_kernel() requires this... */ | 866 | /* start_kernel() requires this... */ |
862 | } | 867 | } |
868 | #endif | ||
863 | 869 | ||
864 | /* | 870 | /* |
865 | * Do the following calculations: | 871 | * Do the following calculations: |
diff --git a/arch/ia64/kernel/smp.c b/arch/ia64/kernel/smp.c index f0c521b0ba4c..93ebfea43c6c 100644 --- a/arch/ia64/kernel/smp.c +++ b/arch/ia64/kernel/smp.c | |||
@@ -58,7 +58,8 @@ static struct local_tlb_flush_counts { | |||
58 | unsigned int count; | 58 | unsigned int count; |
59 | } __attribute__((__aligned__(32))) local_tlb_flush_counts[NR_CPUS]; | 59 | } __attribute__((__aligned__(32))) local_tlb_flush_counts[NR_CPUS]; |
60 | 60 | ||
61 | static DEFINE_PER_CPU(unsigned short, shadow_flush_counts[NR_CPUS]) ____cacheline_aligned; | 61 | static DEFINE_PER_CPU_SHARED_ALIGNED(unsigned short [NR_CPUS], |
62 | shadow_flush_counts); | ||
62 | 63 | ||
63 | #define IPI_CALL_FUNC 0 | 64 | #define IPI_CALL_FUNC 0 |
64 | #define IPI_CPU_STOP 1 | 65 | #define IPI_CPU_STOP 1 |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 4a95e86b9ac2..eb4214d1c5af 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
@@ -24,14 +24,14 @@ PHDRS { | |||
24 | } | 24 | } |
25 | SECTIONS | 25 | SECTIONS |
26 | { | 26 | { |
27 | /* Sections to be discarded */ | 27 | /* unwind exit sections must be discarded before the rest of the |
28 | sections get included. */ | ||
28 | /DISCARD/ : { | 29 | /DISCARD/ : { |
29 | EXIT_TEXT | ||
30 | EXIT_DATA | ||
31 | *(.exitcall.exit) | ||
32 | *(.IA_64.unwind.exit.text) | 30 | *(.IA_64.unwind.exit.text) |
33 | *(.IA_64.unwind_info.exit.text) | 31 | *(.IA_64.unwind_info.exit.text) |
34 | } | 32 | *(.comment) |
33 | *(.note) | ||
34 | } | ||
35 | 35 | ||
36 | v = PAGE_OFFSET; /* this symbol is here to make debugging easier... */ | 36 | v = PAGE_OFFSET; /* this symbol is here to make debugging easier... */ |
37 | phys_start = _start - LOAD_OFFSET; | 37 | phys_start = _start - LOAD_OFFSET; |
@@ -316,7 +316,7 @@ SECTIONS | |||
316 | .debug_funcnames 0 : { *(.debug_funcnames) } | 316 | .debug_funcnames 0 : { *(.debug_funcnames) } |
317 | .debug_typenames 0 : { *(.debug_typenames) } | 317 | .debug_typenames 0 : { *(.debug_typenames) } |
318 | .debug_varnames 0 : { *(.debug_varnames) } | 318 | .debug_varnames 0 : { *(.debug_varnames) } |
319 | /* These must appear regardless of . */ | 319 | |
320 | /DISCARD/ : { *(.comment) } | 320 | /* Default discards */ |
321 | /DISCARD/ : { *(.note) } | 321 | DISCARDS |
322 | } | 322 | } |
diff --git a/arch/ia64/kvm/Kconfig b/arch/ia64/kvm/Kconfig index 64d520937874..ef3e7be29caf 100644 --- a/arch/ia64/kvm/Kconfig +++ b/arch/ia64/kvm/Kconfig | |||
@@ -1,12 +1,8 @@ | |||
1 | # | 1 | # |
2 | # KVM configuration | 2 | # KVM configuration |
3 | # | 3 | # |
4 | config HAVE_KVM | ||
5 | bool | ||
6 | 4 | ||
7 | config HAVE_KVM_IRQCHIP | 5 | source "virt/kvm/Kconfig" |
8 | bool | ||
9 | default y | ||
10 | 6 | ||
11 | menuconfig VIRTUALIZATION | 7 | menuconfig VIRTUALIZATION |
12 | bool "Virtualization" | 8 | bool "Virtualization" |
@@ -28,6 +24,8 @@ config KVM | |||
28 | depends on PCI | 24 | depends on PCI |
29 | select PREEMPT_NOTIFIERS | 25 | select PREEMPT_NOTIFIERS |
30 | select ANON_INODES | 26 | select ANON_INODES |
27 | select HAVE_KVM_IRQCHIP | ||
28 | select KVM_APIC_ARCHITECTURE | ||
31 | ---help--- | 29 | ---help--- |
32 | Support hosting fully virtualized guest machines using hardware | 30 | Support hosting fully virtualized guest machines using hardware |
33 | virtualization extensions. You will need a fairly recent | 31 | virtualization extensions. You will need a fairly recent |
@@ -49,9 +47,6 @@ config KVM_INTEL | |||
49 | Provides support for KVM on Itanium 2 processors equipped with the VT | 47 | Provides support for KVM on Itanium 2 processors equipped with the VT |
50 | extensions. | 48 | extensions. |
51 | 49 | ||
52 | config KVM_TRACE | ||
53 | bool | ||
54 | |||
55 | source drivers/virtio/Kconfig | 50 | source drivers/virtio/Kconfig |
56 | 51 | ||
57 | endif # VIRTUALIZATION | 52 | endif # VIRTUALIZATION |
diff --git a/arch/ia64/kvm/kvm-ia64.c b/arch/ia64/kvm/kvm-ia64.c index 80c57b0a21c4..0ad09f05efa9 100644 --- a/arch/ia64/kvm/kvm-ia64.c +++ b/arch/ia64/kvm/kvm-ia64.c | |||
@@ -210,16 +210,6 @@ int kvm_dev_ioctl_check_extension(long ext) | |||
210 | 210 | ||
211 | } | 211 | } |
212 | 212 | ||
213 | static struct kvm_io_device *vcpu_find_mmio_dev(struct kvm_vcpu *vcpu, | ||
214 | gpa_t addr, int len, int is_write) | ||
215 | { | ||
216 | struct kvm_io_device *dev; | ||
217 | |||
218 | dev = kvm_io_bus_find_dev(&vcpu->kvm->mmio_bus, addr, len, is_write); | ||
219 | |||
220 | return dev; | ||
221 | } | ||
222 | |||
223 | static int handle_vm_error(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | 213 | static int handle_vm_error(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) |
224 | { | 214 | { |
225 | kvm_run->exit_reason = KVM_EXIT_UNKNOWN; | 215 | kvm_run->exit_reason = KVM_EXIT_UNKNOWN; |
@@ -231,6 +221,7 @@ static int handle_mmio(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | |||
231 | { | 221 | { |
232 | struct kvm_mmio_req *p; | 222 | struct kvm_mmio_req *p; |
233 | struct kvm_io_device *mmio_dev; | 223 | struct kvm_io_device *mmio_dev; |
224 | int r; | ||
234 | 225 | ||
235 | p = kvm_get_vcpu_ioreq(vcpu); | 226 | p = kvm_get_vcpu_ioreq(vcpu); |
236 | 227 | ||
@@ -247,16 +238,13 @@ static int handle_mmio(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | |||
247 | kvm_run->exit_reason = KVM_EXIT_MMIO; | 238 | kvm_run->exit_reason = KVM_EXIT_MMIO; |
248 | return 0; | 239 | return 0; |
249 | mmio: | 240 | mmio: |
250 | mmio_dev = vcpu_find_mmio_dev(vcpu, p->addr, p->size, !p->dir); | 241 | if (p->dir) |
251 | if (mmio_dev) { | 242 | r = kvm_io_bus_read(&vcpu->kvm->mmio_bus, p->addr, |
252 | if (!p->dir) | 243 | p->size, &p->data); |
253 | kvm_iodevice_write(mmio_dev, p->addr, p->size, | 244 | else |
254 | &p->data); | 245 | r = kvm_io_bus_write(&vcpu->kvm->mmio_bus, p->addr, |
255 | else | 246 | p->size, &p->data); |
256 | kvm_iodevice_read(mmio_dev, p->addr, p->size, | 247 | if (r) |
257 | &p->data); | ||
258 | |||
259 | } else | ||
260 | printk(KERN_ERR"kvm: No iodevice found! addr:%lx\n", p->addr); | 248 | printk(KERN_ERR"kvm: No iodevice found! addr:%lx\n", p->addr); |
261 | p->state = STATE_IORESP_READY; | 249 | p->state = STATE_IORESP_READY; |
262 | 250 | ||
@@ -337,13 +325,12 @@ static struct kvm_vcpu *lid_to_vcpu(struct kvm *kvm, unsigned long id, | |||
337 | { | 325 | { |
338 | union ia64_lid lid; | 326 | union ia64_lid lid; |
339 | int i; | 327 | int i; |
328 | struct kvm_vcpu *vcpu; | ||
340 | 329 | ||
341 | for (i = 0; i < kvm->arch.online_vcpus; i++) { | 330 | kvm_for_each_vcpu(i, vcpu, kvm) { |
342 | if (kvm->vcpus[i]) { | 331 | lid.val = VCPU_LID(vcpu); |
343 | lid.val = VCPU_LID(kvm->vcpus[i]); | 332 | if (lid.id == id && lid.eid == eid) |
344 | if (lid.id == id && lid.eid == eid) | 333 | return vcpu; |
345 | return kvm->vcpus[i]; | ||
346 | } | ||
347 | } | 334 | } |
348 | 335 | ||
349 | return NULL; | 336 | return NULL; |
@@ -409,21 +396,21 @@ static int handle_global_purge(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run) | |||
409 | struct kvm *kvm = vcpu->kvm; | 396 | struct kvm *kvm = vcpu->kvm; |
410 | struct call_data call_data; | 397 | struct call_data call_data; |
411 | int i; | 398 | int i; |
399 | struct kvm_vcpu *vcpui; | ||
412 | 400 | ||
413 | call_data.ptc_g_data = p->u.ptc_g_data; | 401 | call_data.ptc_g_data = p->u.ptc_g_data; |
414 | 402 | ||
415 | for (i = 0; i < kvm->arch.online_vcpus; i++) { | 403 | kvm_for_each_vcpu(i, vcpui, kvm) { |
416 | if (!kvm->vcpus[i] || kvm->vcpus[i]->arch.mp_state == | 404 | if (vcpui->arch.mp_state == KVM_MP_STATE_UNINITIALIZED || |
417 | KVM_MP_STATE_UNINITIALIZED || | 405 | vcpu == vcpui) |
418 | vcpu == kvm->vcpus[i]) | ||
419 | continue; | 406 | continue; |
420 | 407 | ||
421 | if (waitqueue_active(&kvm->vcpus[i]->wq)) | 408 | if (waitqueue_active(&vcpui->wq)) |
422 | wake_up_interruptible(&kvm->vcpus[i]->wq); | 409 | wake_up_interruptible(&vcpui->wq); |
423 | 410 | ||
424 | if (kvm->vcpus[i]->cpu != -1) { | 411 | if (vcpui->cpu != -1) { |
425 | call_data.vcpu = kvm->vcpus[i]; | 412 | call_data.vcpu = vcpui; |
426 | smp_call_function_single(kvm->vcpus[i]->cpu, | 413 | smp_call_function_single(vcpui->cpu, |
427 | vcpu_global_purge, &call_data, 1); | 414 | vcpu_global_purge, &call_data, 1); |
428 | } else | 415 | } else |
429 | printk(KERN_WARNING"kvm: Uninit vcpu received ipi!\n"); | 416 | printk(KERN_WARNING"kvm: Uninit vcpu received ipi!\n"); |
@@ -852,8 +839,6 @@ struct kvm *kvm_arch_create_vm(void) | |||
852 | 839 | ||
853 | kvm_init_vm(kvm); | 840 | kvm_init_vm(kvm); |
854 | 841 | ||
855 | kvm->arch.online_vcpus = 0; | ||
856 | |||
857 | return kvm; | 842 | return kvm; |
858 | 843 | ||
859 | } | 844 | } |
@@ -1000,10 +985,10 @@ long kvm_arch_vm_ioctl(struct file *filp, | |||
1000 | goto out; | 985 | goto out; |
1001 | if (irqchip_in_kernel(kvm)) { | 986 | if (irqchip_in_kernel(kvm)) { |
1002 | __s32 status; | 987 | __s32 status; |
1003 | mutex_lock(&kvm->lock); | 988 | mutex_lock(&kvm->irq_lock); |
1004 | status = kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, | 989 | status = kvm_set_irq(kvm, KVM_USERSPACE_IRQ_SOURCE_ID, |
1005 | irq_event.irq, irq_event.level); | 990 | irq_event.irq, irq_event.level); |
1006 | mutex_unlock(&kvm->lock); | 991 | mutex_unlock(&kvm->irq_lock); |
1007 | if (ioctl == KVM_IRQ_LINE_STATUS) { | 992 | if (ioctl == KVM_IRQ_LINE_STATUS) { |
1008 | irq_event.status = status; | 993 | irq_event.status = status; |
1009 | if (copy_to_user(argp, &irq_event, | 994 | if (copy_to_user(argp, &irq_event, |
@@ -1216,7 +1201,7 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) | |||
1216 | if (IS_ERR(vmm_vcpu)) | 1201 | if (IS_ERR(vmm_vcpu)) |
1217 | return PTR_ERR(vmm_vcpu); | 1202 | return PTR_ERR(vmm_vcpu); |
1218 | 1203 | ||
1219 | if (vcpu->vcpu_id == 0) { | 1204 | if (kvm_vcpu_is_bsp(vcpu)) { |
1220 | vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; | 1205 | vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE; |
1221 | 1206 | ||
1222 | /*Set entry address for first run.*/ | 1207 | /*Set entry address for first run.*/ |
@@ -1224,7 +1209,7 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu) | |||
1224 | 1209 | ||
1225 | /*Initialize itc offset for vcpus*/ | 1210 | /*Initialize itc offset for vcpus*/ |
1226 | itc_offset = 0UL - kvm_get_itc(vcpu); | 1211 | itc_offset = 0UL - kvm_get_itc(vcpu); |
1227 | for (i = 0; i < kvm->arch.online_vcpus; i++) { | 1212 | for (i = 0; i < KVM_MAX_VCPUS; i++) { |
1228 | v = (struct kvm_vcpu *)((char *)vcpu + | 1213 | v = (struct kvm_vcpu *)((char *)vcpu + |
1229 | sizeof(struct kvm_vcpu_data) * i); | 1214 | sizeof(struct kvm_vcpu_data) * i); |
1230 | v->arch.itc_offset = itc_offset; | 1215 | v->arch.itc_offset = itc_offset; |
@@ -1356,8 +1341,6 @@ struct kvm_vcpu *kvm_arch_vcpu_create(struct kvm *kvm, | |||
1356 | goto fail; | 1341 | goto fail; |
1357 | } | 1342 | } |
1358 | 1343 | ||
1359 | kvm->arch.online_vcpus++; | ||
1360 | |||
1361 | return vcpu; | 1344 | return vcpu; |
1362 | fail: | 1345 | fail: |
1363 | return ERR_PTR(r); | 1346 | return ERR_PTR(r); |
@@ -1952,19 +1935,6 @@ int kvm_highest_pending_irq(struct kvm_vcpu *vcpu) | |||
1952 | return find_highest_bits((int *)&vpd->irr[0]); | 1935 | return find_highest_bits((int *)&vpd->irr[0]); |
1953 | } | 1936 | } |
1954 | 1937 | ||
1955 | int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu) | ||
1956 | { | ||
1957 | if (kvm_highest_pending_irq(vcpu) != -1) | ||
1958 | return 1; | ||
1959 | return 0; | ||
1960 | } | ||
1961 | |||
1962 | int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu) | ||
1963 | { | ||
1964 | /* do real check here */ | ||
1965 | return 1; | ||
1966 | } | ||
1967 | |||
1968 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) | 1938 | int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) |
1969 | { | 1939 | { |
1970 | return vcpu->arch.timer_fired; | 1940 | return vcpu->arch.timer_fired; |
@@ -1977,7 +1947,8 @@ gfn_t unalias_gfn(struct kvm *kvm, gfn_t gfn) | |||
1977 | 1947 | ||
1978 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) | 1948 | int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu) |
1979 | { | 1949 | { |
1980 | return vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE; | 1950 | return (vcpu->arch.mp_state == KVM_MP_STATE_RUNNABLE) || |
1951 | (kvm_highest_pending_irq(vcpu) != -1); | ||
1981 | } | 1952 | } |
1982 | 1953 | ||
1983 | int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, | 1954 | int kvm_arch_vcpu_ioctl_get_mpstate(struct kvm_vcpu *vcpu, |
diff --git a/arch/ia64/kvm/vcpu.c b/arch/ia64/kvm/vcpu.c index cc406d064a09..dce75b70cdd5 100644 --- a/arch/ia64/kvm/vcpu.c +++ b/arch/ia64/kvm/vcpu.c | |||
@@ -830,8 +830,8 @@ static void vcpu_set_itc(struct kvm_vcpu *vcpu, u64 val) | |||
830 | 830 | ||
831 | kvm = (struct kvm *)KVM_VM_BASE; | 831 | kvm = (struct kvm *)KVM_VM_BASE; |
832 | 832 | ||
833 | if (vcpu->vcpu_id == 0) { | 833 | if (kvm_vcpu_is_bsp(vcpu)) { |
834 | for (i = 0; i < kvm->arch.online_vcpus; i++) { | 834 | for (i = 0; i < atomic_read(&kvm->online_vcpus); i++) { |
835 | v = (struct kvm_vcpu *)((char *)vcpu + | 835 | v = (struct kvm_vcpu *)((char *)vcpu + |
836 | sizeof(struct kvm_vcpu_data) * i); | 836 | sizeof(struct kvm_vcpu_data) * i); |
837 | VMX(v, itc_offset) = itc_offset; | 837 | VMX(v, itc_offset) = itc_offset; |
diff --git a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c index e456f062f241..ece1bf994499 100644 --- a/arch/ia64/sn/kernel/setup.c +++ b/arch/ia64/sn/kernel/setup.c | |||
@@ -71,7 +71,7 @@ EXPORT_SYMBOL(sn_rtc_cycles_per_second); | |||
71 | DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info); | 71 | DEFINE_PER_CPU(struct sn_hub_info_s, __sn_hub_info); |
72 | EXPORT_PER_CPU_SYMBOL(__sn_hub_info); | 72 | EXPORT_PER_CPU_SYMBOL(__sn_hub_info); |
73 | 73 | ||
74 | DEFINE_PER_CPU(short, __sn_cnodeid_to_nasid[MAX_COMPACT_NODES]); | 74 | DEFINE_PER_CPU(short [MAX_COMPACT_NODES], __sn_cnodeid_to_nasid); |
75 | EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid); | 75 | EXPORT_PER_CPU_SYMBOL(__sn_cnodeid_to_nasid); |
76 | 76 | ||
77 | DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda); | 77 | DEFINE_PER_CPU(struct nodepda_s *, __sn_nodepda); |