From: root <chenggang.qin@gmail.com> To: linux-kernel@vger.kernel.org Cc: Chenggang Qin <chenggang.qcg@taobao.com>, Andrew Morton <akpm@linux-foundation.org>, Arjan van de Ven <arjan@linux.intel.com>, David Ahern <dsahern@gmail.com>, Ingo Molnar <mingo@redhat.com>, Mike Galbraith <efault@gmx.de>, Namhyung Kim <namhyung@gmail.com>, Paul Mackerras <paulus@samba.org>, Peter Zijlstra <a.p.zijlstra@chello.nl>, Wu Fengguang <fengguang.wu@intel.com>, Yanmin Zhang <yanmin.zhang@intel.com> Subject: [PATCH] perf core: Use KSTK_ESP() instead of pt_regs->sp while output user regs Date: Tue, 23 Dec 2014 14:22:25 +0800 [thread overview] Message-ID: <1419315745-20767-1-git-send-email-user@chenggang-laptop> (raw) From: Chenggang Qin <chenggang.qcg@taobao.com> For x86_64, the exact value of user stack's esp should be got by KSTK_ESP(current). current->thread.usersp is copied from PDA while enter ring0. Now, we output the value of sp from pt_regs. But pt_regs->sp has changed before it was pushed into kernel stack. So, we cannot get the correct callchain while unwind some user stacks. For example, if the stack contains __lll_unlock_wake()/__lll_lock_wait(), the callchain will break some times with the latest version of libunwind. The root cause is the sp that is used by libunwind may be wrong. If we use KSTK_ESP(current), the correct callchain can be got everytime. Other architectures also have KSTK_ESP() macro. Signed-off-by: Chenggang Qin <chenggang.qcg@taobao.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Arjan van de Ven <arjan@linux.intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@gmail.com> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Wu Fengguang <fengguang.wu@intel.com> Cc: Yanmin Zhang <yanmin.zhang@intel.com> --- arch/x86/kernel/perf_regs.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/kernel/perf_regs.c b/arch/x86/kernel/perf_regs.c index e309cc5..5da8df8 100644 --- a/arch/x86/kernel/perf_regs.c +++ b/arch/x86/kernel/perf_regs.c @@ -60,6 +60,9 @@ u64 perf_reg_value(struct pt_regs *regs, int idx) if (WARN_ON_ONCE(idx >= ARRAY_SIZE(pt_regs_offset))) return 0; + if (idx == PERF_REG_X86_SP) + return KSTK_ESP(current); + return regs_get_register(regs, pt_regs_offset[idx]); } -- 1.9.1
next reply other threads:[~2014-12-23 6:22 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-12-23 6:22 root [this message] 2014-12-23 8:30 ` Andy Lutomirski [not found] ` <c027bde0-5f4f-441f-8d45-3e7f6f702231@alibaba-inc.com> 2014-12-25 15:48 ` 答复:[PATCH] " Andy Lutomirski 2014-12-25 16:21 ` Andy Lutomirski 2014-12-30 19:03 ` Peter Zijlstra 2014-12-30 23:29 ` Andy Lutomirski 2014-12-31 2:00 ` Andy Lutomirski 2015-01-02 16:11 ` Jan Beulich 2015-01-02 18:03 ` Andy Lutomirski 2015-01-05 8:47 ` Jan Beulich 2015-01-04 16:10 ` Jiri Olsa 2015-01-04 17:18 ` Andy Lutomirski 2015-01-04 17:41 ` Jiri Olsa 2015-01-04 18:36 ` [PATCH 0/2] perf: Improve user regs sampling Andy Lutomirski 2015-01-04 18:36 ` [PATCH 1/2] perf: Move task_pt_regs sampling into arch code Andy Lutomirski 2015-01-05 14:07 ` Peter Zijlstra 2015-01-05 16:13 ` Andy Lutomirski 2015-01-05 16:44 ` Peter Zijlstra 2015-01-05 18:28 ` Andy Lutomirski 2015-01-09 12:32 ` [tip:perf/urgent] " tip-bot for Andy Lutomirski 2015-01-04 18:36 ` [PATCH 2/2] x86_64, perf: Improve user regs sampling Andy Lutomirski 2015-01-09 12:32 ` [tip:perf/urgent] perf/x86_64: " tip-bot for Andy Lutomirski 2015-01-05 10:46 ` [PATCH 0/2] perf: " Jiri Olsa
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1419315745-20767-1-git-send-email-user@chenggang-laptop \ --to=chenggang.qin@gmail.com \ --cc=a.p.zijlstra@chello.nl \ --cc=akpm@linux-foundation.org \ --cc=arjan@linux.intel.com \ --cc=chenggang.qcg@taobao.com \ --cc=dsahern@gmail.com \ --cc=efault@gmx.de \ --cc=fengguang.wu@intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=mingo@redhat.com \ --cc=namhyung@gmail.com \ --cc=paulus@samba.org \ --cc=yanmin.zhang@intel.com \ --subject='Re: [PATCH] perf core: Use KSTK_ESP() instead of pt_regs->sp while output user regs' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.