Register the new kernel ('ring 0') stack pointer with the hypervisor during context switch. Signed-off-by: Ian Pratt <ian.pratt@xxxxxxxxxxxxx> Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx> Signed-off-by: Chris Wright <chrisw@xxxxxxxxxxxx> --- include/asm-i386/mach-default/mach_processor.h | 7 +++++++ include/asm-i386/mach-xen/mach_processor.h | 8 ++++++++ include/asm-i386/processor.h | 1 + 3 files changed, 16 insertions(+) --- linus-2.6.orig/include/asm-i386/mach-default/mach_processor.h +++ linus-2.6/include/asm-i386/mach-default/mach_processor.h @@ -4,4 +4,11 @@ #define CPUID cpuid #define CPUID_STR "cpuid" +#ifndef __ASSEMBLY__ +static inline void mach_update_kernel_stack(unsigned long esp0, + unsigned short ss0) +{ +} +#endif + #endif /* __ASM_MACH_PROCESSOR_H */ --- linus-2.6.orig/include/asm-i386/mach-xen/mach_processor.h +++ linus-2.6/include/asm-i386/mach-xen/mach_processor.h @@ -6,4 +6,12 @@ #define CPUID XEN_CPUID #define CPUID_STR XEN_CPUID +#ifndef __ASSEMBLY__ +static inline void mach_update_kernel_stack(unsigned long esp0, + unsigned short ss0) +{ + HYPERVISOR_stack_switch(ss0, esp0); +} +#endif + #endif /* __ASM_MACH_PROCESSOR_H */ --- linus-2.6.orig/include/asm-i386/processor.h +++ linus-2.6/include/asm-i386/processor.h @@ -500,6 +500,7 @@ static inline void load_esp0(struct tss_ tss->ss1 = thread->sysenter_cs; wrmsr(MSR_IA32_SYSENTER_CS, thread->sysenter_cs, 0); } + mach_update_kernel_stack(tss->esp0, tss->ss0); } #define start_thread(regs, new_eip, new_esp) do { \ --