diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-03-26 16:39:17 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-03-27 12:28:43 -0400 |
commit | 6e15cf04860074ad032e88c306bea656bbdd0f22 (patch) | |
tree | c346383bb7563e8d66b2f4a502f875b259c34870 /arch/x86/lguest | |
parent | be0ea69674ed95e1e98cb3687a241badc756d228 (diff) | |
parent | 60db56422043aaa455ac7f858ce23c273220f9d9 (diff) |
Merge branch 'core/percpu' into percpu-cpumask-x86-for-linus-2
Conflicts:
arch/parisc/kernel/irq.c
arch/x86/include/asm/fixmap_64.h
arch/x86/include/asm/setup.h
kernel/irq/handle.c
Semantic merge:
arch/x86/include/asm/fixmap.h
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/lguest')
-rw-r--r-- | arch/x86/lguest/Kconfig | 1 | ||||
-rw-r--r-- | arch/x86/lguest/boot.c | 32 |
2 files changed, 19 insertions, 14 deletions
diff --git a/arch/x86/lguest/Kconfig b/arch/x86/lguest/Kconfig index c70e12b1a637..8dab8f7844d3 100644 --- a/arch/x86/lguest/Kconfig +++ b/arch/x86/lguest/Kconfig | |||
@@ -3,7 +3,6 @@ config LGUEST_GUEST | |||
3 | select PARAVIRT | 3 | select PARAVIRT |
4 | depends on X86_32 | 4 | depends on X86_32 |
5 | depends on !X86_PAE | 5 | depends on !X86_PAE |
6 | depends on !X86_VOYAGER | ||
7 | select VIRTIO | 6 | select VIRTIO |
8 | select VIRTIO_RING | 7 | select VIRTIO_RING |
9 | select VIRTIO_CONSOLE | 8 | select VIRTIO_CONSOLE |
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index 960a8d9c049c..9fe4ddaa8f6f 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
@@ -173,24 +173,29 @@ static unsigned long save_fl(void) | |||
173 | { | 173 | { |
174 | return lguest_data.irq_enabled; | 174 | return lguest_data.irq_enabled; |
175 | } | 175 | } |
176 | PV_CALLEE_SAVE_REGS_THUNK(save_fl); | ||
176 | 177 | ||
177 | /* restore_flags() just sets the flags back to the value given. */ | 178 | /* restore_flags() just sets the flags back to the value given. */ |
178 | static void restore_fl(unsigned long flags) | 179 | static void restore_fl(unsigned long flags) |
179 | { | 180 | { |
180 | lguest_data.irq_enabled = flags; | 181 | lguest_data.irq_enabled = flags; |
181 | } | 182 | } |
183 | PV_CALLEE_SAVE_REGS_THUNK(restore_fl); | ||
182 | 184 | ||
183 | /* Interrupts go off... */ | 185 | /* Interrupts go off... */ |
184 | static void irq_disable(void) | 186 | static void irq_disable(void) |
185 | { | 187 | { |
186 | lguest_data.irq_enabled = 0; | 188 | lguest_data.irq_enabled = 0; |
187 | } | 189 | } |
190 | PV_CALLEE_SAVE_REGS_THUNK(irq_disable); | ||
188 | 191 | ||
189 | /* Interrupts go on... */ | 192 | /* Interrupts go on... */ |
190 | static void irq_enable(void) | 193 | static void irq_enable(void) |
191 | { | 194 | { |
192 | lguest_data.irq_enabled = X86_EFLAGS_IF; | 195 | lguest_data.irq_enabled = X86_EFLAGS_IF; |
193 | } | 196 | } |
197 | PV_CALLEE_SAVE_REGS_THUNK(irq_enable); | ||
198 | |||
194 | /*:*/ | 199 | /*:*/ |
195 | /*M:003 Note that we don't check for outstanding interrupts when we re-enable | 200 | /*M:003 Note that we don't check for outstanding interrupts when we re-enable |
196 | * them (or when we unmask an interrupt). This seems to work for the moment, | 201 | * them (or when we unmask an interrupt). This seems to work for the moment, |
@@ -278,7 +283,7 @@ static void lguest_load_tls(struct thread_struct *t, unsigned int cpu) | |||
278 | /* There's one problem which normal hardware doesn't have: the Host | 283 | /* There's one problem which normal hardware doesn't have: the Host |
279 | * can't handle us removing entries we're currently using. So we clear | 284 | * can't handle us removing entries we're currently using. So we clear |
280 | * the GS register here: if it's needed it'll be reloaded anyway. */ | 285 | * the GS register here: if it's needed it'll be reloaded anyway. */ |
281 | loadsegment(gs, 0); | 286 | lazy_load_gs(0); |
282 | lazy_hcall(LHCALL_LOAD_TLS, __pa(&t->tls_array), cpu, 0); | 287 | lazy_hcall(LHCALL_LOAD_TLS, __pa(&t->tls_array), cpu, 0); |
283 | } | 288 | } |
284 | 289 | ||
@@ -830,13 +835,14 @@ static u32 lguest_apic_safe_wait_icr_idle(void) | |||
830 | return 0; | 835 | return 0; |
831 | } | 836 | } |
832 | 837 | ||
833 | static struct apic_ops lguest_basic_apic_ops = { | 838 | static void set_lguest_basic_apic_ops(void) |
834 | .read = lguest_apic_read, | 839 | { |
835 | .write = lguest_apic_write, | 840 | apic->read = lguest_apic_read; |
836 | .icr_read = lguest_apic_icr_read, | 841 | apic->write = lguest_apic_write; |
837 | .icr_write = lguest_apic_icr_write, | 842 | apic->icr_read = lguest_apic_icr_read; |
838 | .wait_icr_idle = lguest_apic_wait_icr_idle, | 843 | apic->icr_write = lguest_apic_icr_write; |
839 | .safe_wait_icr_idle = lguest_apic_safe_wait_icr_idle, | 844 | apic->wait_icr_idle = lguest_apic_wait_icr_idle; |
845 | apic->safe_wait_icr_idle = lguest_apic_safe_wait_icr_idle; | ||
840 | }; | 846 | }; |
841 | #endif | 847 | #endif |
842 | 848 | ||
@@ -991,10 +997,10 @@ __init void lguest_init(void) | |||
991 | 997 | ||
992 | /* interrupt-related operations */ | 998 | /* interrupt-related operations */ |
993 | pv_irq_ops.init_IRQ = lguest_init_IRQ; | 999 | pv_irq_ops.init_IRQ = lguest_init_IRQ; |
994 | pv_irq_ops.save_fl = save_fl; | 1000 | pv_irq_ops.save_fl = PV_CALLEE_SAVE(save_fl); |
995 | pv_irq_ops.restore_fl = restore_fl; | 1001 | pv_irq_ops.restore_fl = PV_CALLEE_SAVE(restore_fl); |
996 | pv_irq_ops.irq_disable = irq_disable; | 1002 | pv_irq_ops.irq_disable = PV_CALLEE_SAVE(irq_disable); |
997 | pv_irq_ops.irq_enable = irq_enable; | 1003 | pv_irq_ops.irq_enable = PV_CALLEE_SAVE(irq_enable); |
998 | pv_irq_ops.safe_halt = lguest_safe_halt; | 1004 | pv_irq_ops.safe_halt = lguest_safe_halt; |
999 | 1005 | ||
1000 | /* init-time operations */ | 1006 | /* init-time operations */ |
@@ -1037,7 +1043,7 @@ __init void lguest_init(void) | |||
1037 | 1043 | ||
1038 | #ifdef CONFIG_X86_LOCAL_APIC | 1044 | #ifdef CONFIG_X86_LOCAL_APIC |
1039 | /* apic read/write intercepts */ | 1045 | /* apic read/write intercepts */ |
1040 | apic_ops = &lguest_basic_apic_ops; | 1046 | set_lguest_basic_apic_ops(); |
1041 | #endif | 1047 | #endif |
1042 | 1048 | ||
1043 | /* time operations */ | 1049 | /* time operations */ |