diff options
Diffstat (limited to 'arch/x86/kernel/time_32.c')
-rw-r--r-- | arch/x86/kernel/time_32.c | 8 |
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 *)®s->esp; | 57 | unsigned long *sp = (unsigned long *)®s->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]; |