From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Anton Blanchard <anton@samba.org>
Cc: paulus@samba.org, mpe@ellerman.id.au, linuxppc-dev@lists.ozlabs.org
Subject: Re: [PATCH] powerpc/perf: Fix book3s kernel to userspace backtraces
Date: Tue, 26 May 2015 18:37:11 -0500 [thread overview]
Message-ID: <1432683431.22987.19.camel@kernel.crashing.org> (raw)
In-Reply-To: <1432617024-11352-1-git-send-email-anton@samba.org>
On Tue, 2015-05-26 at 15:10 +1000, Anton Blanchard wrote:
> When we take a PMU exception or a software event we call
> perf_read_regs(). This overloads regs->result with a boolean that
> describes if we should use the sampled instruction address register
> (SIAR) or the regs.
>
> If the exception is in kernel, we start with the kernel regs and
> backtrace through the kernel stack. At this point we switch to the
> userspace regs and backtrace the user stack with perf_callchain_user().
>
> Unfortunately these regs have not got the perf_read_regs() treatment,
> so regs->result could be anything. If it is non zero,
> perf_instruction_pointer() decides to use the SIAR, and we get issues
> like this:
CC stable ?
> 0.11% qemu-system-ppc [kernel.kallsyms] [k] _raw_spin_lock_irqsave
> |
> ---_raw_spin_lock_irqsave
> |
> |--52.35%-- 0
> | |
> | |--46.39%-- __hrtimer_start_range_ns
> | | kvmppc_run_core
> | | kvmppc_vcpu_run_hv
> | | kvmppc_vcpu_run
> | | kvm_arch_vcpu_ioctl_run
> | | kvm_vcpu_ioctl
> | | do_vfs_ioctl
> | | sys_ioctl
> | | system_call
> | | |
> | | |--67.08%-- _raw_spin_lock_irqsave <--- hi mum
> | | | |
> | | | --100.00%-- 0x7e714
> | | | 0x7e714
>
> Notice the bogus _raw_spin_irqsave when we transition from kernel
> (system_call) to userspace (0x7e714). We inserted what was in the SIAR.
>
> Add a check in regs_use_siar() to check that the regs in question
> are from a PMU exception. With this fix the backtrace makes sense:
>
> 0.47% qemu-system-ppc [kernel.vmlinux] [k] _raw_spin_lock_irqsave
> |
> ---_raw_spin_lock_irqsave
> |
> |--53.83%-- 0
> | |
> | |--44.73%-- hrtimer_try_to_cancel
> | | kvmppc_start_thread
> | | kvmppc_run_core
> | | kvmppc_vcpu_run_hv
> | | kvmppc_vcpu_run
> | | kvm_arch_vcpu_ioctl_run
> | | kvm_vcpu_ioctl
> | | do_vfs_ioctl
> | | sys_ioctl
> | | system_call
> | | __ioctl
> | | 0x7e714
> | | 0x7e714
>
> Signed-off-by: Anton Blanchard <anton@samba.org>
> ---
> arch/powerpc/perf/core-book3s.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
> index 12b6384..42a3725 100644
> --- a/arch/powerpc/perf/core-book3s.c
> +++ b/arch/powerpc/perf/core-book3s.c
> @@ -131,7 +131,10 @@ static void pmao_restore_workaround(bool ebb) { }
>
> static bool regs_use_siar(struct pt_regs *regs)
> {
> - return !!regs->result;
> + if ((TRAP(regs) == 0xf00) && regs->result)
> + return true;
> +
> + return false;
> }
>
> /*
prev parent reply other threads:[~2015-05-26 23:37 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-26 5:10 [PATCH] powerpc/perf: Fix book3s kernel to userspace backtraces Anton Blanchard
2015-05-26 8:50 ` Laurentiu Tudor
2015-05-26 12:09 ` Anton Blanchard
2015-05-26 23:37 ` Benjamin Herrenschmidt [this message]
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=1432683431.22987.19.camel@kernel.crashing.org \
--to=benh@kernel.crashing.org \
--cc=anton@samba.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mpe@ellerman.id.au \
--cc=paulus@samba.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.