From d68a900cac03de883aa62bfccf54e15ee31acd8c Mon Sep 17 00:00:00 2001 From: Andi Kleen Date: Fri, 28 Jul 2006 14:44:42 +0200 Subject: [PATCH] --- yaml --- r: 32865 b: refs/heads/master c: d5a2601734bcc740ee78dc4cb0c56b5687da7bd9 h: refs/heads/master i: 32863: 7444739d4c001ae9fc70e7a7eb7df704f4bec8a7 v: v3 --- [refs] | 2 +- trunk/arch/i386/kernel/time.c | 2 +- trunk/arch/x86_64/kernel/time.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 1c0e92164a01..c67609fff10e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5d2edfe004f5d0f3d805967bd6b4ada95e6aa419 +refs/heads/master: d5a2601734bcc740ee78dc4cb0c56b5687da7bd9 diff --git a/trunk/arch/i386/kernel/time.c b/trunk/arch/i386/kernel/time.c index 8705c0f05788..edd00f6cee37 100644 --- a/trunk/arch/i386/kernel/time.c +++ b/trunk/arch/i386/kernel/time.c @@ -135,7 +135,7 @@ unsigned long profile_pc(struct pt_regs *regs) { unsigned long pc = instruction_pointer(regs); - if (in_lock_functions(pc)) + if (!user_mode_vm(regs) && in_lock_functions(pc)) return *(unsigned long *)(regs->ebp + 4); return pc; diff --git a/trunk/arch/x86_64/kernel/time.c b/trunk/arch/x86_64/kernel/time.c index b9ff75992c16..e0341c6808e5 100644 --- a/trunk/arch/x86_64/kernel/time.c +++ b/trunk/arch/x86_64/kernel/time.c @@ -193,7 +193,7 @@ unsigned long profile_pc(struct pt_regs *regs) is just accounted to the spinlock function. Better would be to write these functions in assembler again and check exactly. */ - if (in_lock_functions(pc)) { + if (!user_mode(regs) && in_lock_functions(pc)) { char *v = *(char **)regs->rsp; if ((v >= _stext && v <= _etext) || (v >= _sinittext && v <= _einittext) ||