Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf mem: Clean up perf_pmus__num_mem_pmus()

The number of mem PMUs can be calculated by searching the
perf_pmus__scan_mem().

Remove the ARCH specific perf_pmus__num_mem_pmus()

Tested-by: Leo Yan <leo.yan@linaro.org>
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Cc: ravi.bangoria@amd.com
Cc: james.clark@arm.com
Cc: will@kernel.org
Cc: mike.leach@linaro.org
Cc: renyu.zj@linux.alibaba.com
Cc: yuhaixin.yhx@linux.alibaba.com
Cc: tmricht@linux.ibm.com
Cc: atrajeev@linux.vnet.ibm.com
Cc: linux-arm-kernel@lists.infradead.org
Cc: john.g.garry@oracle.com
Link: https://lore.kernel.org/r/20240123185036.3461837-8-kan.liang@linux.intel.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>

authored by

Kan Liang and committed by
Namhyung Kim
821aca20 70f4b20d

+17 -19
-10
tools/perf/arch/x86/util/pmu.c
··· 42 42 pmu->mem_events = perf_mem_events_intel; 43 43 } 44 44 } 45 - 46 - int perf_pmus__num_mem_pmus(void) 47 - { 48 - /* AMD uses IBS OP pmu and not a core PMU for perf mem/c2c */ 49 - if (x86__is_amd_cpu()) 50 - return 1; 51 - 52 - /* Intel uses core pmus for perf mem/c2c */ 53 - return perf_pmus__num_core_pmus(); 54 - }
+1 -1
tools/perf/builtin-c2c.c
··· 3278 3278 PARSE_OPT_KEEP_UNKNOWN); 3279 3279 3280 3280 /* Max number of arguments multiplied by number of PMUs that can support them. */ 3281 - rec_argc = argc + 11 * perf_pmus__num_mem_pmus(); 3281 + rec_argc = argc + 11 * (perf_pmu__mem_events_num_mem_pmus(pmu) + 1); 3282 3282 3283 3283 rec_argv = calloc(rec_argc + 1, sizeof(char *)); 3284 3284 if (!rec_argv)
+1 -1
tools/perf/builtin-mem.c
··· 106 106 PARSE_OPT_KEEP_UNKNOWN); 107 107 108 108 /* Max number of arguments multiplied by number of PMUs that can support them. */ 109 - rec_argc = argc + 9 * perf_pmus__num_mem_pmus(); 109 + rec_argc = argc + 9 * (perf_pmu__mem_events_num_mem_pmus(pmu) + 1); 110 110 111 111 if (mem->cpu_list) 112 112 rec_argc += 2;
+14
tools/perf/util/mem-events.c
··· 62 62 return perf_pmus__scan_mem(NULL); 63 63 } 64 64 65 + /** 66 + * perf_pmu__mem_events_num_mem_pmus - Get the number of mem PMUs since the given pmu 67 + * @pmu: Start pmu. If it's NULL, search the entire PMU list. 68 + */ 69 + int perf_pmu__mem_events_num_mem_pmus(struct perf_pmu *pmu) 70 + { 71 + int num = 0; 72 + 73 + while ((pmu = perf_pmus__scan_mem(pmu)) != NULL) 74 + num++; 75 + 76 + return num; 77 + } 78 + 65 79 static const char *perf_pmu__mem_events_name(int i, struct perf_pmu *pmu) 66 80 { 67 81 struct perf_mem_event *e;
+1
tools/perf/util/mem-events.h
··· 43 43 44 44 struct perf_mem_event *perf_pmu__mem_events_ptr(struct perf_pmu *pmu, int i); 45 45 struct perf_pmu *perf_mem_events_find_pmu(void); 46 + int perf_pmu__mem_events_num_mem_pmus(struct perf_pmu *pmu); 46 47 bool is_mem_loads_aux_event(struct evsel *leader); 47 48 48 49 void perf_pmu__mem_events_list(struct perf_pmu *pmu);
-6
tools/perf/util/pmus.c
··· 345 345 return NULL; 346 346 } 347 347 348 - int __weak perf_pmus__num_mem_pmus(void) 349 - { 350 - /* All core PMUs are for mem events. */ 351 - return perf_pmus__num_core_pmus(); 352 - } 353 - 354 348 /** Struct for ordering events as output in perf list. */ 355 349 struct sevent { 356 350 /** PMU for event. */
-1
tools/perf/util/pmus.h
··· 17 17 18 18 const struct perf_pmu *perf_pmus__pmu_for_pmu_filter(const char *str); 19 19 20 - int perf_pmus__num_mem_pmus(void); 21 20 void perf_pmus__print_pmu_events(const struct print_callbacks *print_cb, void *print_state); 22 21 bool perf_pmus__have_event(const char *pname, const char *name); 23 22 int perf_pmus__num_core_pmus(void);