* [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient @ 2018-11-06 21:07 Adrian Hunter 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter ` (3 more replies) 0 siblings, 4 replies; 17+ messages in thread From: Adrian Hunter @ 2018-11-06 21:07 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Andi Kleen, linux-kernel, leo.yan, David Miller, Mathieu Poirier Hi Here is V2: These patches probably deal with most cases except the one fixed by David Miller's "perf callchain: Honour the ordering of PERF_CONTEXT_{USER,KERNEL,etc}" patch, and also cat_backtrace() which looks like it has the same problem, and the cs-etm fix. Changes in V2: perf tools: Add fallback functions for cases where cpumode is insufficient Rename fallback functions to both end in _fb Add and use variable machine->single_address_space perf tools: Use fallback for sample_addr_correlates_sym() cases perf tools: Use fallbacks for branch stacks Adjusted for the re-naming above perf intel-pt: Insert callchain context into synthesized callchains perf intel-pt/bts: Calculate cpumode for synthesized samples Dropped because they have been applied Adrian Hunter (3): perf tools: Add fallback functions for cases where cpumode is insufficient perf tools: Use fallback for sample_addr_correlates_sym() cases perf tools: Use fallbacks for branch stacks tools/perf/arch/common.c | 10 ++++++++ tools/perf/arch/common.h | 1 + tools/perf/builtin-script.c | 12 ++++----- tools/perf/util/event.c | 29 +++++++++++++++++++++- tools/perf/util/machine.c | 27 ++++++++++++++++++++ tools/perf/util/machine.h | 3 +++ .../util/scripting-engines/trace-event-python.c | 16 ++++++------ tools/perf/util/session.c | 4 +++ tools/perf/util/thread.h | 4 +++ 9 files changed, 91 insertions(+), 15 deletions(-) Regards Adrian ^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient 2018-11-06 21:07 [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient Adrian Hunter @ 2018-11-06 21:07 ` Adrian Hunter 2018-11-06 22:03 ` David Miller ` (5 more replies) 2018-11-06 21:07 ` [PATCH V2 2/3] perf tools: Use fallback for sample_addr_correlates_sym() cases Adrian Hunter ` (2 subsequent siblings) 3 siblings, 6 replies; 17+ messages in thread From: Adrian Hunter @ 2018-11-06 21:07 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Andi Kleen, linux-kernel, leo.yan, David Miller, Mathieu Poirier For branch stacks or branch samples, the sample cpumode might not be correct because it applies only to the sample 'ip' and not necessary to 'addr' or branch stack addresses. Add fallback functions that can be used to deal with those cases Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: stable@vger.kernel.org # 4.19 --- tools/perf/arch/common.c | 10 ++++++++++ tools/perf/arch/common.h | 1 + tools/perf/util/event.c | 27 +++++++++++++++++++++++++++ tools/perf/util/machine.c | 27 +++++++++++++++++++++++++++ tools/perf/util/machine.h | 3 +++ tools/perf/util/session.c | 4 ++++ tools/perf/util/thread.h | 4 ++++ 7 files changed, 76 insertions(+) diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c index 82657c01a3b8..5f69fd0b745a 100644 --- a/tools/perf/arch/common.c +++ b/tools/perf/arch/common.c @@ -200,3 +200,13 @@ int perf_env__lookup_objdump(struct perf_env *env, const char **path) return perf_env__lookup_binutils_path(env, "objdump", path); } + +/* + * Some architectures have a single address space for kernel and user addresses, + * which makes it possible to determine if an address is in kernel space or user + * space. + */ +bool perf_env__single_address_space(struct perf_env *env) +{ + return strcmp(perf_env__arch(env), "sparc"); +} diff --git a/tools/perf/arch/common.h b/tools/perf/arch/common.h index 2167001b18c5..c298a446d1f6 100644 --- a/tools/perf/arch/common.h +++ b/tools/perf/arch/common.h @@ -5,5 +5,6 @@ #include "../util/env.h" int perf_env__lookup_objdump(struct perf_env *env, const char **path); +bool perf_env__single_address_space(struct perf_env *env); #endif /* ARCH_PERF_COMMON_H */ diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index e9c108a6b1c3..9431b20c1337 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -1577,6 +1577,24 @@ struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr, return al->map; } +/* + * For branch stacks or branch samples, the sample cpumode might not be correct + * because it applies only to the sample 'ip' and not necessary to 'addr' or + * branch stack addresses. If possible, use a fallback to deal with those cases. + */ +struct map *thread__find_map_fb(struct thread *thread, u8 cpumode, u64 addr, + struct addr_location *al) +{ + struct map *map = thread__find_map(thread, cpumode, addr, al); + struct machine *machine = thread->mg->machine; + u8 addr_cpumode = machine__addr_cpumode(machine, cpumode, addr); + + if (map || addr_cpumode == cpumode) + return map; + + return thread__find_map(thread, addr_cpumode, addr, al); +} + struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al) { @@ -1586,6 +1604,15 @@ struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, return al->sym; } +struct symbol *thread__find_symbol_fb(struct thread *thread, u8 cpumode, + u64 addr, struct addr_location *al) +{ + al->sym = NULL; + if (thread__find_map_fb(thread, cpumode, addr, al)) + al->sym = map__find_symbol(al->map, al->addr); + return al->sym; +} + /* * Callers need to drop the reference to al->thread, obtained in * machine__findnew_thread() diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 8f36ce813bc5..9397e3f2444d 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -2592,6 +2592,33 @@ int machine__get_kernel_start(struct machine *machine) return err; } +u8 machine__addr_cpumode(struct machine *machine, u8 cpumode, u64 addr) +{ + u8 addr_cpumode = cpumode; + bool kernel_ip; + + if (!machine->single_address_space) + goto out; + + kernel_ip = machine__kernel_ip(machine, addr); + switch (cpumode) { + case PERF_RECORD_MISC_KERNEL: + case PERF_RECORD_MISC_USER: + addr_cpumode = kernel_ip ? PERF_RECORD_MISC_KERNEL : + PERF_RECORD_MISC_USER; + break; + case PERF_RECORD_MISC_GUEST_KERNEL: + case PERF_RECORD_MISC_GUEST_USER: + addr_cpumode = kernel_ip ? PERF_RECORD_MISC_GUEST_KERNEL : + PERF_RECORD_MISC_GUEST_USER; + break; + default: + break; + } +out: + return addr_cpumode; +} + struct dso *machine__findnew_dso(struct machine *machine, const char *filename) { return dsos__findnew(&machine->dsos, filename); diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index d856b85862e2..ebde3ea70225 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -42,6 +42,7 @@ struct machine { u16 id_hdr_size; bool comm_exec; bool kptr_restrict_warned; + bool single_address_space; char *root_dir; char *mmap_name; struct threads threads[THREADS__TABLE_SIZE]; @@ -99,6 +100,8 @@ static inline bool machine__kernel_ip(struct machine *machine, u64 ip) return ip >= kernel_start; } +u8 machine__addr_cpumode(struct machine *machine, u8 cpumode, u64 addr); + struct thread *machine__find_thread(struct machine *machine, pid_t pid, pid_t tid); struct comm *machine__thread_exec_comm(struct machine *machine, diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 7d2c8ce6cfad..f8eab197f35c 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -24,6 +24,7 @@ #include "thread.h" #include "thread-stack.h" #include "stat.h" +#include "arch/common.h" static int perf_session__deliver_event(struct perf_session *session, union perf_event *event, @@ -150,6 +151,9 @@ struct perf_session *perf_session__new(struct perf_data *data, session->machines.host.env = &perf_env; } + session->machines.host.single_address_space = + perf_env__single_address_space(session->machines.host.env); + if (!data || perf_data__is_write(data)) { /* * In O_RDONLY mode this will be performed when reading the diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h index 30e2b4c165fe..5920c3bb8ffe 100644 --- a/tools/perf/util/thread.h +++ b/tools/perf/util/thread.h @@ -96,9 +96,13 @@ struct thread *thread__main_thread(struct machine *machine, struct thread *threa struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al); +struct map *thread__find_map_fb(struct thread *thread, u8 cpumode, u64 addr, + struct addr_location *al); struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al); +struct symbol *thread__find_symbol_fb(struct thread *thread, u8 cpumode, + u64 addr, struct addr_location *al); void thread__find_cpumode_addr_location(struct thread *thread, u64 addr, struct addr_location *al); -- 2.17.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter @ 2018-11-06 22:03 ` David Miller 2018-11-27 14:10 ` Arnaldo Carvalho de Melo ` (4 subsequent siblings) 5 siblings, 0 replies; 17+ messages in thread From: David Miller @ 2018-11-06 22:03 UTC (permalink / raw) To: adrian.hunter; +Cc: acme, jolsa, ak, linux-kernel, leo.yan, mathieu.poirier From: Adrian Hunter <adrian.hunter@intel.com> Date: Tue, 6 Nov 2018 23:07:10 +0200 > For branch stacks or branch samples, the sample cpumode might not be > correct because it applies only to the sample 'ip' and not necessary to > 'addr' or branch stack addresses. Add fallback functions that can be used > to deal with those cases > > Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Acked-by: David S. Miller <davem@davemloft.net> ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter 2018-11-06 22:03 ` David Miller @ 2018-11-27 14:10 ` Arnaldo Carvalho de Melo 2018-11-27 14:45 ` Arnaldo Carvalho de Melo 2018-12-14 20:21 ` [tip:perf/core] perf machine: Record if a arch has a single user/kernel address space tip-bot for Adrian Hunter ` (3 subsequent siblings) 5 siblings, 1 reply; 17+ messages in thread From: Arnaldo Carvalho de Melo @ 2018-11-27 14:10 UTC (permalink / raw) To: Adrian Hunter Cc: Jiri Olsa, Andi Kleen, linux-kernel, leo.yan, David Miller, Mathieu Poirier Em Tue, Nov 06, 2018 at 11:07:10PM +0200, Adrian Hunter escreveu: > For branch stacks or branch samples, the sample cpumode might not be > correct because it applies only to the sample 'ip' and not necessary to > 'addr' or branch stack addresses. Add fallback functions that can be used > to deal with those cases I've split this into two, and the first is causing this: root@quaco ~]# perf top perf: Segmentation fault -------- backtrace -------- perf[0x59baca] /lib64/libc.so.6(+0x385bf)[0x7fa2775dc5bf] perf(perf_env__arch+0x34)[0x4b4514] perf(perf_env__single_address_space+0x1b)[0x57944b] perf(perf_session__new+0x17c)[0x4fdb3c] perf(cmd_top+0x162c)[0x45109c] perf[0x4a621e] perf(main+0x61c)[0x42cbfc] /lib64/libc.so.6(__libc_start_main+0xf2)[0x7fa2775c8412] perf(_start+0x2d)[0x42ce2d] [root@quaco ~]# Its the case where the env info comes from the running machine, via uname(), I'm working on a fix. - Arnaldo > Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> > Cc: stable@vger.kernel.org # 4.19 > --- > tools/perf/arch/common.c | 10 ++++++++++ > tools/perf/arch/common.h | 1 + > tools/perf/util/event.c | 27 +++++++++++++++++++++++++++ > tools/perf/util/machine.c | 27 +++++++++++++++++++++++++++ > tools/perf/util/machine.h | 3 +++ > tools/perf/util/session.c | 4 ++++ > tools/perf/util/thread.h | 4 ++++ > 7 files changed, 76 insertions(+) > > diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c > index 82657c01a3b8..5f69fd0b745a 100644 > --- a/tools/perf/arch/common.c > +++ b/tools/perf/arch/common.c > @@ -200,3 +200,13 @@ int perf_env__lookup_objdump(struct perf_env *env, const char **path) > > return perf_env__lookup_binutils_path(env, "objdump", path); > } > + > +/* > + * Some architectures have a single address space for kernel and user addresses, > + * which makes it possible to determine if an address is in kernel space or user > + * space. > + */ > +bool perf_env__single_address_space(struct perf_env *env) > +{ > + return strcmp(perf_env__arch(env), "sparc"); > +} > diff --git a/tools/perf/arch/common.h b/tools/perf/arch/common.h > index 2167001b18c5..c298a446d1f6 100644 > --- a/tools/perf/arch/common.h > +++ b/tools/perf/arch/common.h > @@ -5,5 +5,6 @@ > #include "../util/env.h" > > int perf_env__lookup_objdump(struct perf_env *env, const char **path); > +bool perf_env__single_address_space(struct perf_env *env); > > #endif /* ARCH_PERF_COMMON_H */ > diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c > index e9c108a6b1c3..9431b20c1337 100644 > --- a/tools/perf/util/event.c > +++ b/tools/perf/util/event.c > @@ -1577,6 +1577,24 @@ struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr, > return al->map; > } > > +/* > + * For branch stacks or branch samples, the sample cpumode might not be correct > + * because it applies only to the sample 'ip' and not necessary to 'addr' or > + * branch stack addresses. If possible, use a fallback to deal with those cases. > + */ > +struct map *thread__find_map_fb(struct thread *thread, u8 cpumode, u64 addr, > + struct addr_location *al) > +{ > + struct map *map = thread__find_map(thread, cpumode, addr, al); > + struct machine *machine = thread->mg->machine; > + u8 addr_cpumode = machine__addr_cpumode(machine, cpumode, addr); > + > + if (map || addr_cpumode == cpumode) > + return map; > + > + return thread__find_map(thread, addr_cpumode, addr, al); > +} > + > struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, > u64 addr, struct addr_location *al) > { > @@ -1586,6 +1604,15 @@ struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, > return al->sym; > } > > +struct symbol *thread__find_symbol_fb(struct thread *thread, u8 cpumode, > + u64 addr, struct addr_location *al) > +{ > + al->sym = NULL; > + if (thread__find_map_fb(thread, cpumode, addr, al)) > + al->sym = map__find_symbol(al->map, al->addr); > + return al->sym; > +} > + > /* > * Callers need to drop the reference to al->thread, obtained in > * machine__findnew_thread() > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c > index 8f36ce813bc5..9397e3f2444d 100644 > --- a/tools/perf/util/machine.c > +++ b/tools/perf/util/machine.c > @@ -2592,6 +2592,33 @@ int machine__get_kernel_start(struct machine *machine) > return err; > } > > +u8 machine__addr_cpumode(struct machine *machine, u8 cpumode, u64 addr) > +{ > + u8 addr_cpumode = cpumode; > + bool kernel_ip; > + > + if (!machine->single_address_space) > + goto out; > + > + kernel_ip = machine__kernel_ip(machine, addr); > + switch (cpumode) { > + case PERF_RECORD_MISC_KERNEL: > + case PERF_RECORD_MISC_USER: > + addr_cpumode = kernel_ip ? PERF_RECORD_MISC_KERNEL : > + PERF_RECORD_MISC_USER; > + break; > + case PERF_RECORD_MISC_GUEST_KERNEL: > + case PERF_RECORD_MISC_GUEST_USER: > + addr_cpumode = kernel_ip ? PERF_RECORD_MISC_GUEST_KERNEL : > + PERF_RECORD_MISC_GUEST_USER; > + break; > + default: > + break; > + } > +out: > + return addr_cpumode; > +} > + > struct dso *machine__findnew_dso(struct machine *machine, const char *filename) > { > return dsos__findnew(&machine->dsos, filename); > diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h > index d856b85862e2..ebde3ea70225 100644 > --- a/tools/perf/util/machine.h > +++ b/tools/perf/util/machine.h > @@ -42,6 +42,7 @@ struct machine { > u16 id_hdr_size; > bool comm_exec; > bool kptr_restrict_warned; > + bool single_address_space; > char *root_dir; > char *mmap_name; > struct threads threads[THREADS__TABLE_SIZE]; > @@ -99,6 +100,8 @@ static inline bool machine__kernel_ip(struct machine *machine, u64 ip) > return ip >= kernel_start; > } > > +u8 machine__addr_cpumode(struct machine *machine, u8 cpumode, u64 addr); > + > struct thread *machine__find_thread(struct machine *machine, pid_t pid, > pid_t tid); > struct comm *machine__thread_exec_comm(struct machine *machine, > diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c > index 7d2c8ce6cfad..f8eab197f35c 100644 > --- a/tools/perf/util/session.c > +++ b/tools/perf/util/session.c > @@ -24,6 +24,7 @@ > #include "thread.h" > #include "thread-stack.h" > #include "stat.h" > +#include "arch/common.h" > > static int perf_session__deliver_event(struct perf_session *session, > union perf_event *event, > @@ -150,6 +151,9 @@ struct perf_session *perf_session__new(struct perf_data *data, > session->machines.host.env = &perf_env; > } > > + session->machines.host.single_address_space = > + perf_env__single_address_space(session->machines.host.env); > + > if (!data || perf_data__is_write(data)) { > /* > * In O_RDONLY mode this will be performed when reading the > diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h > index 30e2b4c165fe..5920c3bb8ffe 100644 > --- a/tools/perf/util/thread.h > +++ b/tools/perf/util/thread.h > @@ -96,9 +96,13 @@ struct thread *thread__main_thread(struct machine *machine, struct thread *threa > > struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr, > struct addr_location *al); > +struct map *thread__find_map_fb(struct thread *thread, u8 cpumode, u64 addr, > + struct addr_location *al); > > struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, > u64 addr, struct addr_location *al); > +struct symbol *thread__find_symbol_fb(struct thread *thread, u8 cpumode, > + u64 addr, struct addr_location *al); > > void thread__find_cpumode_addr_location(struct thread *thread, u64 addr, > struct addr_location *al); > -- > 2.17.1 -- - Arnaldo ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient 2018-11-27 14:10 ` Arnaldo Carvalho de Melo @ 2018-11-27 14:45 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 17+ messages in thread From: Arnaldo Carvalho de Melo @ 2018-11-27 14:45 UTC (permalink / raw) To: Adrian Hunter Cc: Jiri Olsa, Andi Kleen, linux-kernel, leo.yan, David Miller, Mathieu Poirier Em Tue, Nov 27, 2018 at 11:10:36AM -0300, Arnaldo Carvalho de Melo escreveu: > Em Tue, Nov 06, 2018 at 11:07:10PM +0200, Adrian Hunter escreveu: > > For branch stacks or branch samples, the sample cpumode might not be > > correct because it applies only to the sample 'ip' and not necessary to > > 'addr' or branch stack addresses. Add fallback functions that can be used > > to deal with those cases > > I've split this into two, and the first is causing this: > > root@quaco ~]# perf top > perf: Segmentation fault > -------- backtrace -------- > perf[0x59baca] > /lib64/libc.so.6(+0x385bf)[0x7fa2775dc5bf] > perf(perf_env__arch+0x34)[0x4b4514] > perf(perf_env__single_address_space+0x1b)[0x57944b] > perf(perf_session__new+0x17c)[0x4fdb3c] > perf(cmd_top+0x162c)[0x45109c] > perf[0x4a621e] > perf(main+0x61c)[0x42cbfc] > /lib64/libc.so.6(__libc_start_main+0xf2)[0x7fa2775c8412] > perf(_start+0x2d)[0x42ce2d] > [root@quaco ~]# > > Its the case where the env info comes from the running machine, via > uname(), I'm working on a fix. So I'll graft this just before your patch. - Arnaldo diff --git a/tools/perf/util/env.c b/tools/perf/util/env.c index 59f38c7693f8..4c23779e271a 100644 --- a/tools/perf/util/env.c +++ b/tools/perf/util/env.c @@ -166,7 +166,7 @@ const char *perf_env__arch(struct perf_env *env) struct utsname uts; char *arch_name; - if (!env) { /* Assume local operation */ + if (!env || !env->arch) { /* Assume local operation */ if (uname(&uts) < 0) return NULL; arch_name = uts.machine; ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [tip:perf/core] perf machine: Record if a arch has a single user/kernel address space 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter 2018-11-06 22:03 ` David Miller 2018-11-27 14:10 ` Arnaldo Carvalho de Melo @ 2018-12-14 20:21 ` tip-bot for Adrian Hunter 2018-12-14 20:22 ` [tip:perf/core] perf thread: Add fallback functions for cases where cpumode is insufficient tip-bot for Adrian Hunter ` (2 subsequent siblings) 5 siblings, 0 replies; 17+ messages in thread From: tip-bot for Adrian Hunter @ 2018-12-14 20:21 UTC (permalink / raw) To: linux-tip-commits Cc: mathieu.poirier, adrian.hunter, jolsa, hpa, linux-kernel, acme, tglx, leo.yan, mingo, davem, ak Commit-ID: cc9581b785fd3f2e64d44641a94179d18ffdbe34 Gitweb: https://git.kernel.org/tip/cc9581b785fd3f2e64d44641a94179d18ffdbe34 Author: Adrian Hunter <adrian.hunter@intel.com> AuthorDate: Tue, 6 Nov 2018 23:07:10 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Thu, 29 Nov 2018 20:42:47 -0300 perf machine: Record if a arch has a single user/kernel address space Some architectures have a single address space for kernel and user addresses, which makes it possible to determine if an address is in kernel space or user space. Some don't, e.g.: sparc. Cache that info in perf_env so that, for instance, code needing to fallback failed symbol lookups at the kernel space in single address space arches can lookup at userspace. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David S. Miller <davem@davemloft.net> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: stable@vger.kernel.org # 4.19 Link: http://lkml.kernel.org/r/20181106210712.12098-2-adrian.hunter@intel.com [ split from a larger patch ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/arch/common.c | 10 ++++++++++ tools/perf/arch/common.h | 1 + tools/perf/util/machine.h | 1 + tools/perf/util/session.c | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c index 82657c01a3b8..5f69fd0b745a 100644 --- a/tools/perf/arch/common.c +++ b/tools/perf/arch/common.c @@ -200,3 +200,13 @@ int perf_env__lookup_objdump(struct perf_env *env, const char **path) return perf_env__lookup_binutils_path(env, "objdump", path); } + +/* + * Some architectures have a single address space for kernel and user addresses, + * which makes it possible to determine if an address is in kernel space or user + * space. + */ +bool perf_env__single_address_space(struct perf_env *env) +{ + return strcmp(perf_env__arch(env), "sparc"); +} diff --git a/tools/perf/arch/common.h b/tools/perf/arch/common.h index 2167001b18c5..c298a446d1f6 100644 --- a/tools/perf/arch/common.h +++ b/tools/perf/arch/common.h @@ -5,5 +5,6 @@ #include "../util/env.h" int perf_env__lookup_objdump(struct perf_env *env, const char **path); +bool perf_env__single_address_space(struct perf_env *env); #endif /* ARCH_PERF_COMMON_H */ diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index d856b85862e2..ca897a73014c 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -42,6 +42,7 @@ struct machine { u16 id_hdr_size; bool comm_exec; bool kptr_restrict_warned; + bool single_address_space; char *root_dir; char *mmap_name; struct threads threads[THREADS__TABLE_SIZE]; diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 7d2c8ce6cfad..f8eab197f35c 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -24,6 +24,7 @@ #include "thread.h" #include "thread-stack.h" #include "stat.h" +#include "arch/common.h" static int perf_session__deliver_event(struct perf_session *session, union perf_event *event, @@ -150,6 +151,9 @@ struct perf_session *perf_session__new(struct perf_data *data, session->machines.host.env = &perf_env; } + session->machines.host.single_address_space = + perf_env__single_address_space(session->machines.host.env); + if (!data || perf_data__is_write(data)) { /* * In O_RDONLY mode this will be performed when reading the ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [tip:perf/core] perf thread: Add fallback functions for cases where cpumode is insufficient 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter ` (2 preceding siblings ...) 2018-12-14 20:21 ` [tip:perf/core] perf machine: Record if a arch has a single user/kernel address space tip-bot for Adrian Hunter @ 2018-12-14 20:22 ` tip-bot for Adrian Hunter 2018-12-18 13:48 ` [tip:perf/core] perf machine: Record if a arch has a single user/kernel address space tip-bot for Adrian Hunter 2018-12-18 13:49 ` [tip:perf/core] perf thread: Add fallback functions for cases where cpumode is insufficient tip-bot for Adrian Hunter 5 siblings, 0 replies; 17+ messages in thread From: tip-bot for Adrian Hunter @ 2018-12-14 20:22 UTC (permalink / raw) To: linux-tip-commits Cc: adrian.hunter, leo.yan, ak, hpa, jolsa, mathieu.poirier, mingo, davem, linux-kernel, tglx, acme Commit-ID: 23abfb26071009e022355c3bcba6502cd7b4dc61 Gitweb: https://git.kernel.org/tip/23abfb26071009e022355c3bcba6502cd7b4dc61 Author: Adrian Hunter <adrian.hunter@intel.com> AuthorDate: Tue, 6 Nov 2018 23:07:10 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Thu, 29 Nov 2018 20:42:47 -0300 perf thread: Add fallback functions for cases where cpumode is insufficient For branch stacks or branch samples, the sample cpumode might not be correct because it applies only to the sample 'ip' and not necessary to 'addr' or branch stack addresses. Add fallback functions that can be used to deal with those cases Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David S. Miller <davem@davemloft.net> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: stable@vger.kernel.org # 4.19 Link: http://lkml.kernel.org/r/20181106210712.12098-2-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/event.c | 27 +++++++++++++++++++++++++++ tools/perf/util/machine.c | 27 +++++++++++++++++++++++++++ tools/perf/util/machine.h | 2 ++ tools/perf/util/thread.h | 4 ++++ 4 files changed, 60 insertions(+) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index e9c108a6b1c3..9431b20c1337 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -1577,6 +1577,24 @@ struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr, return al->map; } +/* + * For branch stacks or branch samples, the sample cpumode might not be correct + * because it applies only to the sample 'ip' and not necessary to 'addr' or + * branch stack addresses. If possible, use a fallback to deal with those cases. + */ +struct map *thread__find_map_fb(struct thread *thread, u8 cpumode, u64 addr, + struct addr_location *al) +{ + struct map *map = thread__find_map(thread, cpumode, addr, al); + struct machine *machine = thread->mg->machine; + u8 addr_cpumode = machine__addr_cpumode(machine, cpumode, addr); + + if (map || addr_cpumode == cpumode) + return map; + + return thread__find_map(thread, addr_cpumode, addr, al); +} + struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al) { @@ -1586,6 +1604,15 @@ struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, return al->sym; } +struct symbol *thread__find_symbol_fb(struct thread *thread, u8 cpumode, + u64 addr, struct addr_location *al) +{ + al->sym = NULL; + if (thread__find_map_fb(thread, cpumode, addr, al)) + al->sym = map__find_symbol(al->map, al->addr); + return al->sym; +} + /* * Callers need to drop the reference to al->thread, obtained in * machine__findnew_thread() diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 8f36ce813bc5..9397e3f2444d 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -2592,6 +2592,33 @@ int machine__get_kernel_start(struct machine *machine) return err; } +u8 machine__addr_cpumode(struct machine *machine, u8 cpumode, u64 addr) +{ + u8 addr_cpumode = cpumode; + bool kernel_ip; + + if (!machine->single_address_space) + goto out; + + kernel_ip = machine__kernel_ip(machine, addr); + switch (cpumode) { + case PERF_RECORD_MISC_KERNEL: + case PERF_RECORD_MISC_USER: + addr_cpumode = kernel_ip ? PERF_RECORD_MISC_KERNEL : + PERF_RECORD_MISC_USER; + break; + case PERF_RECORD_MISC_GUEST_KERNEL: + case PERF_RECORD_MISC_GUEST_USER: + addr_cpumode = kernel_ip ? PERF_RECORD_MISC_GUEST_KERNEL : + PERF_RECORD_MISC_GUEST_USER; + break; + default: + break; + } +out: + return addr_cpumode; +} + struct dso *machine__findnew_dso(struct machine *machine, const char *filename) { return dsos__findnew(&machine->dsos, filename); diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index ca897a73014c..ebde3ea70225 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -100,6 +100,8 @@ static inline bool machine__kernel_ip(struct machine *machine, u64 ip) return ip >= kernel_start; } +u8 machine__addr_cpumode(struct machine *machine, u8 cpumode, u64 addr); + struct thread *machine__find_thread(struct machine *machine, pid_t pid, pid_t tid); struct comm *machine__thread_exec_comm(struct machine *machine, diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h index 30e2b4c165fe..5920c3bb8ffe 100644 --- a/tools/perf/util/thread.h +++ b/tools/perf/util/thread.h @@ -96,9 +96,13 @@ struct thread *thread__main_thread(struct machine *machine, struct thread *threa struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al); +struct map *thread__find_map_fb(struct thread *thread, u8 cpumode, u64 addr, + struct addr_location *al); struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al); +struct symbol *thread__find_symbol_fb(struct thread *thread, u8 cpumode, + u64 addr, struct addr_location *al); void thread__find_cpumode_addr_location(struct thread *thread, u64 addr, struct addr_location *al); ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [tip:perf/core] perf machine: Record if a arch has a single user/kernel address space 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter ` (3 preceding siblings ...) 2018-12-14 20:22 ` [tip:perf/core] perf thread: Add fallback functions for cases where cpumode is insufficient tip-bot for Adrian Hunter @ 2018-12-18 13:48 ` tip-bot for Adrian Hunter 2018-12-18 13:49 ` [tip:perf/core] perf thread: Add fallback functions for cases where cpumode is insufficient tip-bot for Adrian Hunter 5 siblings, 0 replies; 17+ messages in thread From: tip-bot for Adrian Hunter @ 2018-12-18 13:48 UTC (permalink / raw) To: linux-tip-commits Cc: linux-kernel, jolsa, mathieu.poirier, acme, ak, davem, leo.yan, mingo, adrian.hunter, hpa, tglx Commit-ID: ec1891afae740be581ecf5abc8bda74c4549203f Gitweb: https://git.kernel.org/tip/ec1891afae740be581ecf5abc8bda74c4549203f Author: Adrian Hunter <adrian.hunter@intel.com> AuthorDate: Tue, 6 Nov 2018 23:07:10 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Mon, 17 Dec 2018 14:54:07 -0300 perf machine: Record if a arch has a single user/kernel address space Some architectures have a single address space for kernel and user addresses, which makes it possible to determine if an address is in kernel space or user space. Some don't, e.g.: sparc. Cache that info in perf_env so that, for instance, code needing to fallback failed symbol lookups at the kernel space in single address space arches can lookup at userspace. Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David S. Miller <davem@davemloft.net> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: stable@vger.kernel.org # 4.19 Link: http://lkml.kernel.org/r/20181106210712.12098-2-adrian.hunter@intel.com [ split from a larger patch ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/arch/common.c | 10 ++++++++++ tools/perf/arch/common.h | 1 + tools/perf/util/machine.h | 1 + tools/perf/util/session.c | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c index 82657c01a3b8..5f69fd0b745a 100644 --- a/tools/perf/arch/common.c +++ b/tools/perf/arch/common.c @@ -200,3 +200,13 @@ int perf_env__lookup_objdump(struct perf_env *env, const char **path) return perf_env__lookup_binutils_path(env, "objdump", path); } + +/* + * Some architectures have a single address space for kernel and user addresses, + * which makes it possible to determine if an address is in kernel space or user + * space. + */ +bool perf_env__single_address_space(struct perf_env *env) +{ + return strcmp(perf_env__arch(env), "sparc"); +} diff --git a/tools/perf/arch/common.h b/tools/perf/arch/common.h index 2167001b18c5..c298a446d1f6 100644 --- a/tools/perf/arch/common.h +++ b/tools/perf/arch/common.h @@ -5,5 +5,6 @@ #include "../util/env.h" int perf_env__lookup_objdump(struct perf_env *env, const char **path); +bool perf_env__single_address_space(struct perf_env *env); #endif /* ARCH_PERF_COMMON_H */ diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index d856b85862e2..ca897a73014c 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -42,6 +42,7 @@ struct machine { u16 id_hdr_size; bool comm_exec; bool kptr_restrict_warned; + bool single_address_space; char *root_dir; char *mmap_name; struct threads threads[THREADS__TABLE_SIZE]; diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 7d2c8ce6cfad..f8eab197f35c 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -24,6 +24,7 @@ #include "thread.h" #include "thread-stack.h" #include "stat.h" +#include "arch/common.h" static int perf_session__deliver_event(struct perf_session *session, union perf_event *event, @@ -150,6 +151,9 @@ struct perf_session *perf_session__new(struct perf_data *data, session->machines.host.env = &perf_env; } + session->machines.host.single_address_space = + perf_env__single_address_space(session->machines.host.env); + if (!data || perf_data__is_write(data)) { /* * In O_RDONLY mode this will be performed when reading the ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [tip:perf/core] perf thread: Add fallback functions for cases where cpumode is insufficient 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter ` (4 preceding siblings ...) 2018-12-18 13:48 ` [tip:perf/core] perf machine: Record if a arch has a single user/kernel address space tip-bot for Adrian Hunter @ 2018-12-18 13:49 ` tip-bot for Adrian Hunter 5 siblings, 0 replies; 17+ messages in thread From: tip-bot for Adrian Hunter @ 2018-12-18 13:49 UTC (permalink / raw) To: linux-tip-commits Cc: acme, hpa, jolsa, ak, davem, adrian.hunter, leo.yan, linux-kernel, mathieu.poirier, tglx, mingo Commit-ID: 8e80ad9983caeee09c3a0a1a37e05bff93becce4 Gitweb: https://git.kernel.org/tip/8e80ad9983caeee09c3a0a1a37e05bff93becce4 Author: Adrian Hunter <adrian.hunter@intel.com> AuthorDate: Tue, 6 Nov 2018 23:07:10 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Mon, 17 Dec 2018 14:54:13 -0300 perf thread: Add fallback functions for cases where cpumode is insufficient For branch stacks or branch samples, the sample cpumode might not be correct because it applies only to the sample 'ip' and not necessary to 'addr' or branch stack addresses. Add fallback functions that can be used to deal with those cases Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David S. Miller <davem@davemloft.net> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: stable@vger.kernel.org # 4.19 Link: http://lkml.kernel.org/r/20181106210712.12098-2-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/event.c | 27 +++++++++++++++++++++++++++ tools/perf/util/machine.c | 27 +++++++++++++++++++++++++++ tools/perf/util/machine.h | 2 ++ tools/perf/util/thread.h | 4 ++++ 4 files changed, 60 insertions(+) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index e9c108a6b1c3..9431b20c1337 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -1577,6 +1577,24 @@ struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr, return al->map; } +/* + * For branch stacks or branch samples, the sample cpumode might not be correct + * because it applies only to the sample 'ip' and not necessary to 'addr' or + * branch stack addresses. If possible, use a fallback to deal with those cases. + */ +struct map *thread__find_map_fb(struct thread *thread, u8 cpumode, u64 addr, + struct addr_location *al) +{ + struct map *map = thread__find_map(thread, cpumode, addr, al); + struct machine *machine = thread->mg->machine; + u8 addr_cpumode = machine__addr_cpumode(machine, cpumode, addr); + + if (map || addr_cpumode == cpumode) + return map; + + return thread__find_map(thread, addr_cpumode, addr, al); +} + struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al) { @@ -1586,6 +1604,15 @@ struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, return al->sym; } +struct symbol *thread__find_symbol_fb(struct thread *thread, u8 cpumode, + u64 addr, struct addr_location *al) +{ + al->sym = NULL; + if (thread__find_map_fb(thread, cpumode, addr, al)) + al->sym = map__find_symbol(al->map, al->addr); + return al->sym; +} + /* * Callers need to drop the reference to al->thread, obtained in * machine__findnew_thread() diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c index 8f36ce813bc5..9397e3f2444d 100644 --- a/tools/perf/util/machine.c +++ b/tools/perf/util/machine.c @@ -2592,6 +2592,33 @@ int machine__get_kernel_start(struct machine *machine) return err; } +u8 machine__addr_cpumode(struct machine *machine, u8 cpumode, u64 addr) +{ + u8 addr_cpumode = cpumode; + bool kernel_ip; + + if (!machine->single_address_space) + goto out; + + kernel_ip = machine__kernel_ip(machine, addr); + switch (cpumode) { + case PERF_RECORD_MISC_KERNEL: + case PERF_RECORD_MISC_USER: + addr_cpumode = kernel_ip ? PERF_RECORD_MISC_KERNEL : + PERF_RECORD_MISC_USER; + break; + case PERF_RECORD_MISC_GUEST_KERNEL: + case PERF_RECORD_MISC_GUEST_USER: + addr_cpumode = kernel_ip ? PERF_RECORD_MISC_GUEST_KERNEL : + PERF_RECORD_MISC_GUEST_USER; + break; + default: + break; + } +out: + return addr_cpumode; +} + struct dso *machine__findnew_dso(struct machine *machine, const char *filename) { return dsos__findnew(&machine->dsos, filename); diff --git a/tools/perf/util/machine.h b/tools/perf/util/machine.h index ca897a73014c..ebde3ea70225 100644 --- a/tools/perf/util/machine.h +++ b/tools/perf/util/machine.h @@ -100,6 +100,8 @@ static inline bool machine__kernel_ip(struct machine *machine, u64 ip) return ip >= kernel_start; } +u8 machine__addr_cpumode(struct machine *machine, u8 cpumode, u64 addr); + struct thread *machine__find_thread(struct machine *machine, pid_t pid, pid_t tid); struct comm *machine__thread_exec_comm(struct machine *machine, diff --git a/tools/perf/util/thread.h b/tools/perf/util/thread.h index 30e2b4c165fe..5920c3bb8ffe 100644 --- a/tools/perf/util/thread.h +++ b/tools/perf/util/thread.h @@ -96,9 +96,13 @@ struct thread *thread__main_thread(struct machine *machine, struct thread *threa struct map *thread__find_map(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al); +struct map *thread__find_map_fb(struct thread *thread, u8 cpumode, u64 addr, + struct addr_location *al); struct symbol *thread__find_symbol(struct thread *thread, u8 cpumode, u64 addr, struct addr_location *al); +struct symbol *thread__find_symbol_fb(struct thread *thread, u8 cpumode, + u64 addr, struct addr_location *al); void thread__find_cpumode_addr_location(struct thread *thread, u64 addr, struct addr_location *al); ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 2/3] perf tools: Use fallback for sample_addr_correlates_sym() cases 2018-11-06 21:07 [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient Adrian Hunter 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter @ 2018-11-06 21:07 ` Adrian Hunter 2018-12-14 20:22 ` [tip:perf/core] " tip-bot for Adrian Hunter 2018-12-18 13:50 ` tip-bot for Adrian Hunter 2018-11-06 21:07 ` [PATCH V2 3/3] perf tools: Use fallbacks for branch stacks Adrian Hunter 2018-11-19 13:37 ` [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient Adrian Hunter 3 siblings, 2 replies; 17+ messages in thread From: Adrian Hunter @ 2018-11-06 21:07 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Andi Kleen, linux-kernel, leo.yan, David Miller, Mathieu Poirier thread__resolve() is used in the sample_addr_correlates_sym() cases where 'addr' is a destination of a branch which does not necessarily have the same cpumode as the 'ip'. Use the fallback function in that case. This patch depends on patch "perf tools: Add fallback functions for cases where cpumode is insufficient". Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: stable@vger.kernel.org # 4.19 --- tools/perf/util/event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 9431b20c1337..24493200cf80 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -1706,7 +1706,7 @@ bool sample_addr_correlates_sym(struct perf_event_attr *attr) void thread__resolve(struct thread *thread, struct addr_location *al, struct perf_sample *sample) { - thread__find_map(thread, sample->cpumode, sample->addr, al); + thread__find_map_fb(thread, sample->cpumode, sample->addr, al); al->cpu = sample->cpu; al->sym = NULL; -- 2.17.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [tip:perf/core] perf tools: Use fallback for sample_addr_correlates_sym() cases 2018-11-06 21:07 ` [PATCH V2 2/3] perf tools: Use fallback for sample_addr_correlates_sym() cases Adrian Hunter @ 2018-12-14 20:22 ` tip-bot for Adrian Hunter 2018-12-18 13:50 ` tip-bot for Adrian Hunter 1 sibling, 0 replies; 17+ messages in thread From: tip-bot for Adrian Hunter @ 2018-12-14 20:22 UTC (permalink / raw) To: linux-tip-commits Cc: jolsa, mathieu.poirier, hpa, mingo, leo.yan, tglx, linux-kernel, acme, adrian.hunter, davem, ak Commit-ID: cbf7c5b09202693cfc17ac87d7ad45f622ab4937 Gitweb: https://git.kernel.org/tip/cbf7c5b09202693cfc17ac87d7ad45f622ab4937 Author: Adrian Hunter <adrian.hunter@intel.com> AuthorDate: Tue, 6 Nov 2018 23:07:11 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Thu, 29 Nov 2018 20:42:47 -0300 perf tools: Use fallback for sample_addr_correlates_sym() cases thread__resolve() is used in the sample_addr_correlates_sym() cases where 'addr' is a destination of a branch which does not necessarily have the same cpumode as the 'ip'. Use the fallback function in that case. This patch depends on patch "perf tools: Add fallback functions for cases where cpumode is insufficient". Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David S. Miller <davem@davemloft.net> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: stable@vger.kernel.org # 4.19 Link: http://lkml.kernel.org/r/20181106210712.12098-3-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 9431b20c1337..24493200cf80 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -1706,7 +1706,7 @@ bool sample_addr_correlates_sym(struct perf_event_attr *attr) void thread__resolve(struct thread *thread, struct addr_location *al, struct perf_sample *sample) { - thread__find_map(thread, sample->cpumode, sample->addr, al); + thread__find_map_fb(thread, sample->cpumode, sample->addr, al); al->cpu = sample->cpu; al->sym = NULL; ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [tip:perf/core] perf tools: Use fallback for sample_addr_correlates_sym() cases 2018-11-06 21:07 ` [PATCH V2 2/3] perf tools: Use fallback for sample_addr_correlates_sym() cases Adrian Hunter 2018-12-14 20:22 ` [tip:perf/core] " tip-bot for Adrian Hunter @ 2018-12-18 13:50 ` tip-bot for Adrian Hunter 1 sibling, 0 replies; 17+ messages in thread From: tip-bot for Adrian Hunter @ 2018-12-18 13:50 UTC (permalink / raw) To: linux-tip-commits Cc: mathieu.poirier, tglx, jolsa, acme, ak, davem, linux-kernel, adrian.hunter, leo.yan, hpa, mingo Commit-ID: 225f99e0c811e23836c4911a2ff147e167dd1fe8 Gitweb: https://git.kernel.org/tip/225f99e0c811e23836c4911a2ff147e167dd1fe8 Author: Adrian Hunter <adrian.hunter@intel.com> AuthorDate: Tue, 6 Nov 2018 23:07:11 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Mon, 17 Dec 2018 14:54:16 -0300 perf tools: Use fallback for sample_addr_correlates_sym() cases thread__resolve() is used in the sample_addr_correlates_sym() cases where 'addr' is a destination of a branch which does not necessarily have the same cpumode as the 'ip'. Use the fallback function in that case. This patch depends on patch "perf tools: Add fallback functions for cases where cpumode is insufficient". Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David S. Miller <davem@davemloft.net> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: stable@vger.kernel.org # 4.19 Link: http://lkml.kernel.org/r/20181106210712.12098-3-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/event.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c index 9431b20c1337..24493200cf80 100644 --- a/tools/perf/util/event.c +++ b/tools/perf/util/event.c @@ -1706,7 +1706,7 @@ bool sample_addr_correlates_sym(struct perf_event_attr *attr) void thread__resolve(struct thread *thread, struct addr_location *al, struct perf_sample *sample) { - thread__find_map(thread, sample->cpumode, sample->addr, al); + thread__find_map_fb(thread, sample->cpumode, sample->addr, al); al->cpu = sample->cpu; al->sym = NULL; ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V2 3/3] perf tools: Use fallbacks for branch stacks 2018-11-06 21:07 [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient Adrian Hunter 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter 2018-11-06 21:07 ` [PATCH V2 2/3] perf tools: Use fallback for sample_addr_correlates_sym() cases Adrian Hunter @ 2018-11-06 21:07 ` Adrian Hunter 2018-12-14 20:23 ` [tip:perf/core] perf script: " tip-bot for Adrian Hunter 2018-12-18 13:50 ` tip-bot for Adrian Hunter 2018-11-19 13:37 ` [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient Adrian Hunter 3 siblings, 2 replies; 17+ messages in thread From: Adrian Hunter @ 2018-11-06 21:07 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Andi Kleen, linux-kernel, leo.yan, David Miller, Mathieu Poirier Branch stacks do not necessarily have the same cpumode as the 'ip'. Use the fallback functions in those cases. This patch depends on patch "perf tools: Add fallback functions for cases where cpumode is insufficient". Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: stable@vger.kernel.org # 4.19 --- tools/perf/builtin-script.c | 12 ++++++------ .../util/scripting-engines/trace-event-python.c | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index b5bc85bd0bbe..a7b4d3f611c5 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -728,8 +728,8 @@ static int perf_sample__fprintf_brstack(struct perf_sample *sample, if (PRINT_FIELD(DSO)) { memset(&alf, 0, sizeof(alf)); memset(&alt, 0, sizeof(alt)); - thread__find_map(thread, sample->cpumode, from, &alf); - thread__find_map(thread, sample->cpumode, to, &alt); + thread__find_map_fb(thread, sample->cpumode, from, &alf); + thread__find_map_fb(thread, sample->cpumode, to, &alt); } printed += fprintf(fp, " 0x%"PRIx64, from); @@ -775,8 +775,8 @@ static int perf_sample__fprintf_brstacksym(struct perf_sample *sample, from = br->entries[i].from; to = br->entries[i].to; - thread__find_symbol(thread, sample->cpumode, from, &alf); - thread__find_symbol(thread, sample->cpumode, to, &alt); + thread__find_symbol_fb(thread, sample->cpumode, from, &alf); + thread__find_symbol_fb(thread, sample->cpumode, to, &alt); printed += symbol__fprintf_symname_offs(alf.sym, &alf, fp); if (PRINT_FIELD(DSO)) { @@ -820,11 +820,11 @@ static int perf_sample__fprintf_brstackoff(struct perf_sample *sample, from = br->entries[i].from; to = br->entries[i].to; - if (thread__find_map(thread, sample->cpumode, from, &alf) && + if (thread__find_map_fb(thread, sample->cpumode, from, &alf) && !alf.map->dso->adjust_symbols) from = map__map_ip(alf.map, from); - if (thread__find_map(thread, sample->cpumode, to, &alt) && + if (thread__find_map_fb(thread, sample->cpumode, to, &alt) && !alt.map->dso->adjust_symbols) to = map__map_ip(alt.map, to); diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 69aa93d4ee99..0c4b050f6fc2 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -494,14 +494,14 @@ static PyObject *python_process_brstack(struct perf_sample *sample, pydict_set_item_string_decref(pyelem, "cycles", PyLong_FromUnsignedLongLong(br->entries[i].flags.cycles)); - thread__find_map(thread, sample->cpumode, - br->entries[i].from, &al); + thread__find_map_fb(thread, sample->cpumode, + br->entries[i].from, &al); dsoname = get_dsoname(al.map); pydict_set_item_string_decref(pyelem, "from_dsoname", _PyUnicode_FromString(dsoname)); - thread__find_map(thread, sample->cpumode, - br->entries[i].to, &al); + thread__find_map_fb(thread, sample->cpumode, + br->entries[i].to, &al); dsoname = get_dsoname(al.map); pydict_set_item_string_decref(pyelem, "to_dsoname", _PyUnicode_FromString(dsoname)); @@ -576,14 +576,14 @@ static PyObject *python_process_brstacksym(struct perf_sample *sample, if (!pyelem) Py_FatalError("couldn't create Python dictionary"); - thread__find_symbol(thread, sample->cpumode, - br->entries[i].from, &al); + thread__find_symbol_fb(thread, sample->cpumode, + br->entries[i].from, &al); get_symoff(al.sym, &al, true, bf, sizeof(bf)); pydict_set_item_string_decref(pyelem, "from", _PyUnicode_FromString(bf)); - thread__find_symbol(thread, sample->cpumode, - br->entries[i].to, &al); + thread__find_symbol_fb(thread, sample->cpumode, + br->entries[i].to, &al); get_symoff(al.sym, &al, true, bf, sizeof(bf)); pydict_set_item_string_decref(pyelem, "to", _PyUnicode_FromString(bf)); -- 2.17.1 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [tip:perf/core] perf script: Use fallbacks for branch stacks 2018-11-06 21:07 ` [PATCH V2 3/3] perf tools: Use fallbacks for branch stacks Adrian Hunter @ 2018-12-14 20:23 ` tip-bot for Adrian Hunter 2018-12-18 13:50 ` tip-bot for Adrian Hunter 1 sibling, 0 replies; 17+ messages in thread From: tip-bot for Adrian Hunter @ 2018-12-14 20:23 UTC (permalink / raw) To: linux-tip-commits Cc: mathieu.poirier, hpa, davem, ak, jolsa, tglx, acme, mingo, adrian.hunter, linux-kernel, leo.yan Commit-ID: 4ea9a7a364b6311b98c4a4e8e3692cdc253015dc Gitweb: https://git.kernel.org/tip/4ea9a7a364b6311b98c4a4e8e3692cdc253015dc Author: Adrian Hunter <adrian.hunter@intel.com> AuthorDate: Tue, 6 Nov 2018 23:07:12 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Thu, 29 Nov 2018 20:42:47 -0300 perf script: Use fallbacks for branch stacks Branch stacks do not necessarily have the same cpumode as the 'ip'. Use the fallback functions in those cases. This patch depends on patch "perf tools: Add fallback functions for cases where cpumode is insufficient". Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David S. Miller <davem@davemloft.net> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: stable@vger.kernel.org # 4.19 Link: http://lkml.kernel.org/r/20181106210712.12098-4-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/builtin-script.c | 12 ++++++------ tools/perf/util/scripting-engines/trace-event-python.c | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 04913136bac9..3ea98fe72f7f 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -724,8 +724,8 @@ static int perf_sample__fprintf_brstack(struct perf_sample *sample, if (PRINT_FIELD(DSO)) { memset(&alf, 0, sizeof(alf)); memset(&alt, 0, sizeof(alt)); - thread__find_map(thread, sample->cpumode, from, &alf); - thread__find_map(thread, sample->cpumode, to, &alt); + thread__find_map_fb(thread, sample->cpumode, from, &alf); + thread__find_map_fb(thread, sample->cpumode, to, &alt); } printed += fprintf(fp, " 0x%"PRIx64, from); @@ -771,8 +771,8 @@ static int perf_sample__fprintf_brstacksym(struct perf_sample *sample, from = br->entries[i].from; to = br->entries[i].to; - thread__find_symbol(thread, sample->cpumode, from, &alf); - thread__find_symbol(thread, sample->cpumode, to, &alt); + thread__find_symbol_fb(thread, sample->cpumode, from, &alf); + thread__find_symbol_fb(thread, sample->cpumode, to, &alt); printed += symbol__fprintf_symname_offs(alf.sym, &alf, fp); if (PRINT_FIELD(DSO)) { @@ -816,11 +816,11 @@ static int perf_sample__fprintf_brstackoff(struct perf_sample *sample, from = br->entries[i].from; to = br->entries[i].to; - if (thread__find_map(thread, sample->cpumode, from, &alf) && + if (thread__find_map_fb(thread, sample->cpumode, from, &alf) && !alf.map->dso->adjust_symbols) from = map__map_ip(alf.map, from); - if (thread__find_map(thread, sample->cpumode, to, &alt) && + if (thread__find_map_fb(thread, sample->cpumode, to, &alt) && !alt.map->dso->adjust_symbols) to = map__map_ip(alt.map, to); diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 69aa93d4ee99..0c4b050f6fc2 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -494,14 +494,14 @@ static PyObject *python_process_brstack(struct perf_sample *sample, pydict_set_item_string_decref(pyelem, "cycles", PyLong_FromUnsignedLongLong(br->entries[i].flags.cycles)); - thread__find_map(thread, sample->cpumode, - br->entries[i].from, &al); + thread__find_map_fb(thread, sample->cpumode, + br->entries[i].from, &al); dsoname = get_dsoname(al.map); pydict_set_item_string_decref(pyelem, "from_dsoname", _PyUnicode_FromString(dsoname)); - thread__find_map(thread, sample->cpumode, - br->entries[i].to, &al); + thread__find_map_fb(thread, sample->cpumode, + br->entries[i].to, &al); dsoname = get_dsoname(al.map); pydict_set_item_string_decref(pyelem, "to_dsoname", _PyUnicode_FromString(dsoname)); @@ -576,14 +576,14 @@ static PyObject *python_process_brstacksym(struct perf_sample *sample, if (!pyelem) Py_FatalError("couldn't create Python dictionary"); - thread__find_symbol(thread, sample->cpumode, - br->entries[i].from, &al); + thread__find_symbol_fb(thread, sample->cpumode, + br->entries[i].from, &al); get_symoff(al.sym, &al, true, bf, sizeof(bf)); pydict_set_item_string_decref(pyelem, "from", _PyUnicode_FromString(bf)); - thread__find_symbol(thread, sample->cpumode, - br->entries[i].to, &al); + thread__find_symbol_fb(thread, sample->cpumode, + br->entries[i].to, &al); get_symoff(al.sym, &al, true, bf, sizeof(bf)); pydict_set_item_string_decref(pyelem, "to", _PyUnicode_FromString(bf)); ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [tip:perf/core] perf script: Use fallbacks for branch stacks 2018-11-06 21:07 ` [PATCH V2 3/3] perf tools: Use fallbacks for branch stacks Adrian Hunter 2018-12-14 20:23 ` [tip:perf/core] perf script: " tip-bot for Adrian Hunter @ 2018-12-18 13:50 ` tip-bot for Adrian Hunter 1 sibling, 0 replies; 17+ messages in thread From: tip-bot for Adrian Hunter @ 2018-12-18 13:50 UTC (permalink / raw) To: linux-tip-commits Cc: ak, leo.yan, davem, tglx, adrian.hunter, mingo, acme, mathieu.poirier, jolsa, hpa, linux-kernel Commit-ID: 692d0e63324d2954a0c63a812a8588e97023a295 Gitweb: https://git.kernel.org/tip/692d0e63324d2954a0c63a812a8588e97023a295 Author: Adrian Hunter <adrian.hunter@intel.com> AuthorDate: Tue, 6 Nov 2018 23:07:12 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Mon, 17 Dec 2018 14:54:18 -0300 perf script: Use fallbacks for branch stacks Branch stacks do not necessarily have the same cpumode as the 'ip'. Use the fallback functions in those cases. This patch depends on patch "perf tools: Add fallback functions for cases where cpumode is insufficient". Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: David S. Miller <davem@davemloft.net> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: stable@vger.kernel.org # 4.19 Link: http://lkml.kernel.org/r/20181106210712.12098-4-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/builtin-script.c | 12 ++++++------ tools/perf/util/scripting-engines/trace-event-python.c | 16 ++++++++-------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 04913136bac9..3ea98fe72f7f 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -724,8 +724,8 @@ static int perf_sample__fprintf_brstack(struct perf_sample *sample, if (PRINT_FIELD(DSO)) { memset(&alf, 0, sizeof(alf)); memset(&alt, 0, sizeof(alt)); - thread__find_map(thread, sample->cpumode, from, &alf); - thread__find_map(thread, sample->cpumode, to, &alt); + thread__find_map_fb(thread, sample->cpumode, from, &alf); + thread__find_map_fb(thread, sample->cpumode, to, &alt); } printed += fprintf(fp, " 0x%"PRIx64, from); @@ -771,8 +771,8 @@ static int perf_sample__fprintf_brstacksym(struct perf_sample *sample, from = br->entries[i].from; to = br->entries[i].to; - thread__find_symbol(thread, sample->cpumode, from, &alf); - thread__find_symbol(thread, sample->cpumode, to, &alt); + thread__find_symbol_fb(thread, sample->cpumode, from, &alf); + thread__find_symbol_fb(thread, sample->cpumode, to, &alt); printed += symbol__fprintf_symname_offs(alf.sym, &alf, fp); if (PRINT_FIELD(DSO)) { @@ -816,11 +816,11 @@ static int perf_sample__fprintf_brstackoff(struct perf_sample *sample, from = br->entries[i].from; to = br->entries[i].to; - if (thread__find_map(thread, sample->cpumode, from, &alf) && + if (thread__find_map_fb(thread, sample->cpumode, from, &alf) && !alf.map->dso->adjust_symbols) from = map__map_ip(alf.map, from); - if (thread__find_map(thread, sample->cpumode, to, &alt) && + if (thread__find_map_fb(thread, sample->cpumode, to, &alt) && !alt.map->dso->adjust_symbols) to = map__map_ip(alt.map, to); diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 69aa93d4ee99..0c4b050f6fc2 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -494,14 +494,14 @@ static PyObject *python_process_brstack(struct perf_sample *sample, pydict_set_item_string_decref(pyelem, "cycles", PyLong_FromUnsignedLongLong(br->entries[i].flags.cycles)); - thread__find_map(thread, sample->cpumode, - br->entries[i].from, &al); + thread__find_map_fb(thread, sample->cpumode, + br->entries[i].from, &al); dsoname = get_dsoname(al.map); pydict_set_item_string_decref(pyelem, "from_dsoname", _PyUnicode_FromString(dsoname)); - thread__find_map(thread, sample->cpumode, - br->entries[i].to, &al); + thread__find_map_fb(thread, sample->cpumode, + br->entries[i].to, &al); dsoname = get_dsoname(al.map); pydict_set_item_string_decref(pyelem, "to_dsoname", _PyUnicode_FromString(dsoname)); @@ -576,14 +576,14 @@ static PyObject *python_process_brstacksym(struct perf_sample *sample, if (!pyelem) Py_FatalError("couldn't create Python dictionary"); - thread__find_symbol(thread, sample->cpumode, - br->entries[i].from, &al); + thread__find_symbol_fb(thread, sample->cpumode, + br->entries[i].from, &al); get_symoff(al.sym, &al, true, bf, sizeof(bf)); pydict_set_item_string_decref(pyelem, "from", _PyUnicode_FromString(bf)); - thread__find_symbol(thread, sample->cpumode, - br->entries[i].to, &al); + thread__find_symbol_fb(thread, sample->cpumode, + br->entries[i].to, &al); get_symoff(al.sym, &al, true, bf, sizeof(bf)); pydict_set_item_string_decref(pyelem, "to", _PyUnicode_FromString(bf)); ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient 2018-11-06 21:07 [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient Adrian Hunter ` (2 preceding siblings ...) 2018-11-06 21:07 ` [PATCH V2 3/3] perf tools: Use fallbacks for branch stacks Adrian Hunter @ 2018-11-19 13:37 ` Adrian Hunter 2018-11-19 15:44 ` Arnaldo Carvalho de Melo 3 siblings, 1 reply; 17+ messages in thread From: Adrian Hunter @ 2018-11-19 13:37 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Jiri Olsa, Andi Kleen, linux-kernel, leo.yan, David Miller, Mathieu Poirier On 6/11/18 11:07 PM, Adrian Hunter wrote: > Here is V2: > These patches probably deal with most cases except the one fixed by David > Miller's "perf callchain: Honour the ordering of > PERF_CONTEXT_{USER,KERNEL,etc}" patch, and also cat_backtrace() which looks > like it has the same problem, and the cs-etm fix. Are these patches ok? ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient 2018-11-19 13:37 ` [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient Adrian Hunter @ 2018-11-19 15:44 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 17+ messages in thread From: Arnaldo Carvalho de Melo @ 2018-11-19 15:44 UTC (permalink / raw) To: Adrian Hunter Cc: Jiri Olsa, Andi Kleen, linux-kernel, leo.yan, David Miller, Mathieu Poirier Em Mon, Nov 19, 2018 at 03:37:37PM +0200, Adrian Hunter escreveu: > On 6/11/18 11:07 PM, Adrian Hunter wrote: > > Here is V2: > > These patches probably deal with most cases except the one fixed by David > > Miller's "perf callchain: Honour the ordering of > > PERF_CONTEXT_{USER,KERNEL,etc}" patch, and also cat_backtrace() which looks > > like it has the same problem, and the cs-etm fix. > Are these patches ok? Just got back from LPC, will resume reviewing these soon. - Arnaldo ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2018-12-18 13:50 UTC | newest] Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-11-06 21:07 [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient Adrian Hunter 2018-11-06 21:07 ` [PATCH V2 1/3] perf tools: Add fallback functions for cases where cpumode is insufficient Adrian Hunter 2018-11-06 22:03 ` David Miller 2018-11-27 14:10 ` Arnaldo Carvalho de Melo 2018-11-27 14:45 ` Arnaldo Carvalho de Melo 2018-12-14 20:21 ` [tip:perf/core] perf machine: Record if a arch has a single user/kernel address space tip-bot for Adrian Hunter 2018-12-14 20:22 ` [tip:perf/core] perf thread: Add fallback functions for cases where cpumode is insufficient tip-bot for Adrian Hunter 2018-12-18 13:48 ` [tip:perf/core] perf machine: Record if a arch has a single user/kernel address space tip-bot for Adrian Hunter 2018-12-18 13:49 ` [tip:perf/core] perf thread: Add fallback functions for cases where cpumode is insufficient tip-bot for Adrian Hunter 2018-11-06 21:07 ` [PATCH V2 2/3] perf tools: Use fallback for sample_addr_correlates_sym() cases Adrian Hunter 2018-12-14 20:22 ` [tip:perf/core] " tip-bot for Adrian Hunter 2018-12-18 13:50 ` tip-bot for Adrian Hunter 2018-11-06 21:07 ` [PATCH V2 3/3] perf tools: Use fallbacks for branch stacks Adrian Hunter 2018-12-14 20:23 ` [tip:perf/core] perf script: " tip-bot for Adrian Hunter 2018-12-18 13:50 ` tip-bot for Adrian Hunter 2018-11-19 13:37 ` [PATCH V2 0/3] perf tools: Fix for cases where cpumode is incorrect or insufficient Adrian Hunter 2018-11-19 15:44 ` Arnaldo Carvalho de Melo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).