]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
perf report: Fix input reload/switch with symbol sort key
authorDmitry Vyukov <dvyukov@google.com>
Wed, 8 Jan 2025 06:36:23 +0000 (07:36 +0100)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 19 Feb 2025 21:27:59 +0000 (13:27 -0800)
Currently the code checks that there is no "ipc" in the sort order
and add an ipc string. This will always error out on the second pass
after input reload/switch, since the sort order already contains "ipc".
Do the ipc check/fixup only on the first pass.

Signed-off-by: Dmitry Vyukov <dvyukov@google.com>
Link: https://lore.kernel.org/r/20250108063628.215577-1-dvyukov@google.com
Fixes: ec6ae74fe8f0 ("perf report: Display average IPC and IPC coverage per symbol")
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/builtin-report.c

index d32b4e2805add3662dd88073b4a10ca148ea9258..c1226da6c610258f1703390cbe3fa0fcca597284 100644 (file)
@@ -1758,22 +1758,24 @@ repeat:
                symbol_conf.enable_latency = false;
        }
 
-       if (sort_order && strstr(sort_order, "ipc")) {
-               parse_options_usage(report_usage, options, "s", 1);
-               goto error;
-       }
-
-       if (sort_order && strstr(sort_order, "symbol")) {
-               if (sort__mode == SORT_MODE__BRANCH) {
-                       snprintf(sort_tmp, sizeof(sort_tmp), "%s,%s",
-                                sort_order, "ipc_lbr");
-                       report.symbol_ipc = true;
-               } else {
-                       snprintf(sort_tmp, sizeof(sort_tmp), "%s,%s",
-                                sort_order, "ipc_null");
+       if (last_key != K_SWITCH_INPUT_DATA) {
+               if (sort_order && strstr(sort_order, "ipc")) {
+                       parse_options_usage(report_usage, options, "s", 1);
+                       goto error;
                }
 
-               sort_order = sort_tmp;
+               if (sort_order && strstr(sort_order, "symbol")) {
+                       if (sort__mode == SORT_MODE__BRANCH) {
+                               snprintf(sort_tmp, sizeof(sort_tmp), "%s,%s",
+                                        sort_order, "ipc_lbr");
+                               report.symbol_ipc = true;
+                       } else {
+                               snprintf(sort_tmp, sizeof(sort_tmp), "%s,%s",
+                                        sort_order, "ipc_null");
+                       }
+
+                       sort_order = sort_tmp;
+               }
        }
 
        if ((last_key != K_SWITCH_INPUT_DATA && last_key != K_RELOAD) &&