diff options
author | Alexander van Heukelum <heukelum@mailshack.com> | 2008-11-22 00:59:52 +0300 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-11-22 11:45:50 +0300 |
commit | c81084114f6ff957bc6b5a0048350479c1c1f7b3 (patch) | |
tree | 5c831620d403a353d2f092e6b612390045533d3d /arch | |
parent | b8b1d08bf6fe7c09e6cb2294bc0e5e964b361241 (diff) | |
download | linux-c81084114f6ff957bc6b5a0048350479c1c1f7b3.tar.xz |
x86: split out some macro's and move common code to paranoid_exit, fix
Impact: fix bootup crash
Even though it tested fine for me, there was still a bug in the
first patch: I have overlooked a call to ptregscall_common. This
patch fixes that, I think, but the code is never executed for
me while running a debian install... (I tested this by putting
an "1:jmp 1b" in there.)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/entry_64.S | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 692c1da61905..e5ddf573ded2 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S @@ -529,10 +529,13 @@ sysret_signal: jc sysret_audit #endif /* edx: work flags (arg3) */ - leaq do_notify_resume(%rip),%rax leaq -ARGOFFSET(%rsp),%rdi # &pt_regs -> arg1 xorl %esi,%esi # oldset -> arg2 - call ptregscall_common + SAVE_REST + FIXUP_TOP_OF_STACK %r11 + call do_notify_resume + RESTORE_TOP_OF_STACK %r11 + RESTORE_REST movl $_TIF_WORK_MASK,%edi /* Use IRET because user could have changed frame. This works because ptregscall_common has called FIXUP_TOP_OF_STACK. */ |