--- arch/i386/kernel/vm86.c | 4 ++++ 1 file changed, 4 insertions(+) Index: linux-2.6.20.20/arch/i386/kernel/vm86.c =================================================================== --- linux-2.6.20.20.orig/arch/i386/kernel/vm86.c +++ linux-2.6.20.20/arch/i386/kernel/vm86.c @@ -148,12 +148,14 @@ struct pt_regs * fastcall save_v86_state do_exit(SIGSEGV); } + local_irq_disable_hw_cond(); tss = &per_cpu(init_tss, get_cpu()); current->thread.esp0 = current->thread.saved_esp0; current->thread.sysenter_cs = __KERNEL_CS; load_esp0(tss, ¤t->thread); current->thread.saved_esp0 = 0; put_cpu(); + local_irq_enable_hw_cond(); ret = KVM86->regs32; @@ -324,12 +326,14 @@ static void do_sys_vm86(struct kernel_vm savesegment(fs, tsk->thread.saved_fs); tsk->thread.saved_gs = info->regs32->xgs; + local_irq_disable_hw_cond(); tss = &per_cpu(init_tss, get_cpu()); tsk->thread.esp0 = (unsigned long) &info->VM86_TSS_ESP0; if (cpu_has_sep) tsk->thread.sysenter_cs = 0; load_esp0(tss, &tsk->thread); put_cpu(); + local_irq_enable_hw_cond(); tsk->thread.screen_bitmap = info->screen_bitmap; if (info->flags & VM86_SCREEN_BITMAP)