mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
804234f271
commit
ec1891afae
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue