mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
perf kmem: Support legacy tracepoints
Commit11e9734bcb
("mm/slab_common: unify NUMA and UMA version of tracepoints") removed tracepoints 'kmalloc_node' and 'kmem_cache_alloc_node', we need to consider the tool should be backward compatible. If it detect the tracepoint "kmem:kmalloc_node", this patch enables the legacy tracepoints, otherwise, it will ignore them. Fixes:11e9734bcb
("mm/slab_common: unify NUMA and UMA version of tracepoints") Reported-by: Ravi Bangoria <ravi.bangoria@amd.com> Reviewed-by: James Clark <james.clark@arm.com> Signed-off-by: Leo Yan <leo.yan@linaro.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Vlastimil Babka <vbabka@suse.cz> Link: https://lore.kernel.org/r/20230108062400.250690-1-leo.yan@linaro.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
d891f2b724
commit
b3719108ae
@ -1824,6 +1824,19 @@ static int parse_line_opt(const struct option *opt __maybe_unused,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool slab_legacy_tp_is_exposed(void)
|
||||
{
|
||||
/*
|
||||
* The tracepoints "kmem:kmalloc_node" and
|
||||
* "kmem:kmem_cache_alloc_node" have been removed on the latest
|
||||
* kernel, if the tracepoint "kmem:kmalloc_node" is existed it
|
||||
* means the tool is running on an old kernel, we need to
|
||||
* rollback to support these legacy tracepoints.
|
||||
*/
|
||||
return IS_ERR(trace_event__tp_format("kmem", "kmalloc_node")) ?
|
||||
false : true;
|
||||
}
|
||||
|
||||
static int __cmd_record(int argc, const char **argv)
|
||||
{
|
||||
const char * const record_args[] = {
|
||||
@ -1831,22 +1844,28 @@ static int __cmd_record(int argc, const char **argv)
|
||||
};
|
||||
const char * const slab_events[] = {
|
||||
"-e", "kmem:kmalloc",
|
||||
"-e", "kmem:kmalloc_node",
|
||||
"-e", "kmem:kfree",
|
||||
"-e", "kmem:kmem_cache_alloc",
|
||||
"-e", "kmem:kmem_cache_alloc_node",
|
||||
"-e", "kmem:kmem_cache_free",
|
||||
};
|
||||
const char * const slab_legacy_events[] = {
|
||||
"-e", "kmem:kmalloc_node",
|
||||
"-e", "kmem:kmem_cache_alloc_node",
|
||||
};
|
||||
const char * const page_events[] = {
|
||||
"-e", "kmem:mm_page_alloc",
|
||||
"-e", "kmem:mm_page_free",
|
||||
};
|
||||
unsigned int rec_argc, i, j;
|
||||
const char **rec_argv;
|
||||
unsigned int slab_legacy_tp_exposed = slab_legacy_tp_is_exposed();
|
||||
|
||||
rec_argc = ARRAY_SIZE(record_args) + argc - 1;
|
||||
if (kmem_slab)
|
||||
if (kmem_slab) {
|
||||
rec_argc += ARRAY_SIZE(slab_events);
|
||||
if (slab_legacy_tp_exposed)
|
||||
rec_argc += ARRAY_SIZE(slab_legacy_events);
|
||||
}
|
||||
if (kmem_page)
|
||||
rec_argc += ARRAY_SIZE(page_events) + 1; /* for -g */
|
||||
|
||||
@ -1861,6 +1880,10 @@ static int __cmd_record(int argc, const char **argv)
|
||||
if (kmem_slab) {
|
||||
for (j = 0; j < ARRAY_SIZE(slab_events); j++, i++)
|
||||
rec_argv[i] = strdup(slab_events[j]);
|
||||
if (slab_legacy_tp_exposed) {
|
||||
for (j = 0; j < ARRAY_SIZE(slab_legacy_events); j++, i++)
|
||||
rec_argv[i] = strdup(slab_legacy_events[j]);
|
||||
}
|
||||
}
|
||||
if (kmem_page) {
|
||||
rec_argv[i++] = strdup("-g");
|
||||
|
Loading…
Reference in New Issue
Block a user