Re: [PATCH] perf probe: Fix probe definition for inlined functions

From: Arnaldo Carvalho de Melo
Date: Thu Jun 22 2017 - 12:16:34 EST


Em Thu, Jun 22, 2017 at 07:01:38PM +0900, Masami Hiramatsu escreveu:
> On Wed, 21 Jun 2017 18:41:34 +0200
> Björn Töpel <bjorn.topel@xxxxxxxxx> wrote:
>
> > From: Björn Töpel <bjorn.topel@xxxxxxxxx>
> >
> > In commit 613f050d68a8 ("perf probe: Fix to probe on gcc generated
> > functions in modules"), the offset from symbol is, incorrectly, added
> > to the trace point address. This leads to incorrect probe trace points
> > for inlined functions and when using relative line number on symbols.
> >
> > Prior this patch:
> > $ perf probe -m nf_nat -D in_range
> > p:probe/in_range nf_nat:in_range.isra.9+0
> > $ perf probe -m i40e -D i40e_clean_rx_irq
> > p:probe/i40e_clean_rx_irq i40e:i40e_napi_poll+2212
> > $ perf probe -m i40e -D i40e_clean_rx_irq:16
> > p:probe/i40e_clean_rx_irq i40e:i40e_lan_xmit_frame+626
> >
> > After:
> > $ perf probe -m nf_nat -D in_range
> > p:probe/in_range nf_nat:in_range.isra.9+0
> > $ perf probe -m i40e -D i40e_clean_rx_irq
> > p:probe/i40e_clean_rx_irq i40e:i40e_napi_poll+1106
> > $ perf probe -m i40e -D i40e_clean_rx_irq:16
> > p:probe/i40e_clean_rx_irq i40e:i40e_napi_poll+2665
>
> OK, I've confirmed it. This bug also affects -D option for
> offline probes...
>
> $ ./perf probe -k ~/kbin/linux.x86_64/vmlinux -vD vfs_read:11
> probe-definition(0): vfs_read:11
> [...]
> Try to find probe point from debuginfo.
> Matched function: vfs_read [28b211e]
> Probe point found: vfs_read+90 <- here vfs_read+90
> Found 1 probe_trace_events.
> p:probe/vfs_read vfs_read+180 <- here vfs_read+180 = 90+90
>
> So offset to be doubled...
>
> Acked-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
>
> Arnaldo, this should go to urgent/stable.

Thanks for checking, I'll get it into tools/urgent and CC stable, the
Fixes tag should be enough for stable maintainers to figure out what
kernels should get it.

- Arnaldo