perf lock info: Display both map and thread by default

Change "perf lock info" argument handling to:

Display both map and thread info (rather than an error) when neither are
specified.

Display both map and thread info (rather than just thread info) when
both are requested.

Signed-off-by: Nick Forrington <nick.forrington@arm.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20240513091413.738537-2-nick.forrington@arm.com
This commit is contained in:
Nick Forrington 2024-05-13 09:14:12 +00:00 committed by Namhyung Kim
parent af75201634
commit f7d4485fce
2 changed files with 18 additions and 15 deletions

View File

@ -111,11 +111,11 @@ INFO OPTIONS
-t::
--threads::
dump thread list in perf.data
dump only the thread list in perf.data
-m::
--map::
dump map of lock instances (address:name table)
dump only the map of lock instances (address:name table)
CONTENTION OPTIONS

View File

@ -1477,20 +1477,16 @@ static void dump_map(void)
fprintf(lock_output, " %#llx: %s\n", (unsigned long long)st->addr, st->name);
}
static int dump_info(void)
static void dump_info(void)
{
int rc = 0;
if (info_threads)
dump_threads();
else if (info_map)
dump_map();
else {
rc = -1;
pr_err("Unknown type of information\n");
}
return rc;
if (info_map) {
if (info_threads)
fputc('\n', lock_output);
dump_map();
}
}
static const struct evsel_str_handler lock_tracepoints[] = {
@ -1992,7 +1988,7 @@ static int __cmd_report(bool display_info)
setup_pager();
if (display_info) /* used for info subcommand */
err = dump_info();
dump_info();
else {
combine_result();
sort_result();
@ -2568,9 +2564,9 @@ int cmd_lock(int argc, const char **argv)
const struct option info_options[] = {
OPT_BOOLEAN('t', "threads", &info_threads,
"dump thread list in perf.data"),
"dump the thread list in perf.data"),
OPT_BOOLEAN('m', "map", &info_map,
"map of lock instances (address:name table)"),
"dump the map of lock instances (address:name table)"),
OPT_PARENT(lock_options)
};
@ -2684,6 +2680,13 @@ int cmd_lock(int argc, const char **argv)
if (argc)
usage_with_options(info_usage, info_options);
}
/* If neither threads nor map requested, display both */
if (!info_threads && !info_map) {
info_threads = true;
info_map = true;
}
/* recycling report_lock_ops */
trace_handler = &report_lock_ops;
rc = __cmd_report(true);