diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-11 19:55:20 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-11 19:55:20 -0800 |
commit | 0019fab3558c8c8135c88c3d38f24ab0a5408aa6 (patch) | |
tree | d51fe9edb3e05efe5089e3360510f513cccb6b0b /arch/x86/include | |
parent | b64c5fda3868cb29d5dae0909561aa7d93fb7330 (diff) | |
parent | 6c8d8b3c69cef1330e0c5cbc2a8b9268024927a0 (diff) |
Merge branch 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 asm changes from Ingo Molnar:
"Two fixlets and a cleanup."
* 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86_32: Return actual stack when requesting sp from regs
x86: Don't clobber top of pt_regs in nested NMI
x86/asm: Clean up copy_page_*() comments and code
Diffstat (limited to 'arch/x86/include')
-rw-r--r-- | arch/x86/include/asm/ptrace.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h index 19f16ebaf4f..54d80fddb73 100644 --- a/arch/x86/include/asm/ptrace.h +++ b/arch/x86/include/asm/ptrace.h @@ -239,6 +239,15 @@ static inline unsigned long regs_get_register(struct pt_regs *regs, { if (unlikely(offset > MAX_REG_OFFSET)) return 0; +#ifdef CONFIG_X86_32 + /* + * Traps from the kernel do not save sp and ss. + * Use the helper function to retrieve sp. + */ + if (offset == offsetof(struct pt_regs, sp) && + regs->cs == __KERNEL_CS) + return kernel_stack_pointer(regs); +#endif return *(unsigned long *)((unsigned long)regs + offset); } |