aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/time_32.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/time_32.c')
-rw-r--r--arch/x86/kernel/time_32.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/x86/kernel/time_32.c b/arch/x86/kernel/time_32.c
index 2dcbb81b4cd3..1a89e93f3f1c 100644
--- a/arch/x86/kernel/time_32.c
+++ b/arch/x86/kernel/time_32.c
@@ -49,15 +49,15 @@ unsigned long profile_pc(struct pt_regs *regs)
49 unsigned long pc = instruction_pointer(regs); 49 unsigned long pc = instruction_pointer(regs);
50 50
51#ifdef CONFIG_SMP 51#ifdef CONFIG_SMP
52 if (!v8086_mode(regs) && SEGMENT_IS_KERNEL_CODE(regs->xcs) && 52 if (!v8086_mode(regs) && SEGMENT_IS_KERNEL_CODE(regs->cs) &&
53 in_lock_functions(pc)) { 53 in_lock_functions(pc)) {
54#ifdef CONFIG_FRAME_POINTER 54#ifdef CONFIG_FRAME_POINTER
55 return *(unsigned long *)(regs->ebp + 4); 55 return *(unsigned long *)(regs->bp + 4);
56#else 56#else
57 unsigned long *sp = (unsigned long *)&regs->esp; 57 unsigned long *sp = (unsigned long *)&regs->sp;
58 58
59 /* Return address is either directly at stack pointer 59 /* Return address is either directly at stack pointer
60 or above a saved eflags. Eflags has bits 22-31 zero, 60 or above a saved flags. Eflags has bits 22-31 zero,
61 kernel addresses don't. */ 61 kernel addresses don't. */
62 if (sp[0] >> 22) 62 if (sp[0] >> 22)
63 return sp[0]; 63 return sp[0];