|
@@ -187,14 +187,15 @@ static inline int v8086_mode(struct pt_regs *regs)
|
|
|
|
|
|
/*
|
|
|
* X86_32 CPUs don't save ss and esp if the CPU is already in kernel mode
|
|
|
- * when it traps. So regs will be the current sp.
|
|
|
+ * when it traps. The previous stack will be directly underneath the saved
|
|
|
+ * registers, and 'sp/ss' won't even have been saved. Thus the '®s->sp'.
|
|
|
*
|
|
|
* This is valid only for kernel mode traps.
|
|
|
*/
|
|
|
-static inline unsigned long kernel_trap_sp(struct pt_regs *regs)
|
|
|
+static inline unsigned long kernel_stack_pointer(struct pt_regs *regs)
|
|
|
{
|
|
|
#ifdef CONFIG_X86_32
|
|
|
- return (unsigned long)regs;
|
|
|
+ return (unsigned long)(®s->sp);
|
|
|
#else
|
|
|
return regs->sp;
|
|
|
#endif
|