perf mem: Clean up perf_mem_events__record_args()
authorKan Liang <kan.liang@linux.intel.com>
Tue, 23 Jan 2024 18:50:35 +0000 (10:50 -0800)
committerNamhyung Kim <namhyung@kernel.org>
Wed, 24 Jan 2024 22:05:11 +0000 (14:05 -0800)
The current code iterates all memory PMUs. It doesn't matter if the
system has only one memory PMU or multiple PMUs. The check of
perf_pmus__num_mem_pmus() is not required anymore.

The rec_tmp is not used in c2c and mem. Removing them as well.

Suggested-by: Leo Yan <leo.yan@linaro.org>
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-7-kan.liang@linux.intel.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
tools/perf/builtin-c2c.c
tools/perf/builtin-mem.c
tools/perf/util/mem-events.c
tools/perf/util/mem-events.h

index 838481505e0846529c7ebeefd624fa1e3493650c..3bcb903b6b3886d5dade4462fa304fd2733db77a 100644 (file)
@@ -3245,9 +3245,8 @@ static const char * const *record_mem_usage = __usage_record;
 
 static int perf_c2c__record(int argc, const char **argv)
 {
-       int rec_argc, i = 0, j, rec_tmp_nr = 0;
+       int rec_argc, i = 0, j;
        const char **rec_argv;
-       char **rec_tmp;
        int ret;
        bool all_user = false, all_kernel = false;
        bool event_set = false;
@@ -3285,12 +3284,6 @@ static int perf_c2c__record(int argc, const char **argv)
        if (!rec_argv)
                return -1;
 
-       rec_tmp = calloc(rec_argc + 1, sizeof(char *));
-       if (!rec_tmp) {
-               free(rec_argv);
-               return -1;
-       }
-
        rec_argv[i++] = "record";
 
        if (!event_set) {
@@ -3319,7 +3312,7 @@ static int perf_c2c__record(int argc, const char **argv)
        rec_argv[i++] = "--phys-data";
        rec_argv[i++] = "--sample-cpu";
 
-       ret = perf_mem_events__record_args(rec_argv, &i, rec_tmp, &rec_tmp_nr);
+       ret = perf_mem_events__record_args(rec_argv, &i);
        if (ret)
                goto out;
 
@@ -3346,10 +3339,6 @@ static int perf_c2c__record(int argc, const char **argv)
 
        ret = cmd_record(i, rec_argv);
 out:
-       for (i = 0; i < rec_tmp_nr; i++)
-               free(rec_tmp[i]);
-
-       free(rec_tmp);
        free(rec_argv);
        return ret;
 }
index ef64bae77ca7bcb4336de9d86a008545268a680a..1d92e309c97cdaab26411a0fb80f1d1494a1bc04 100644 (file)
@@ -72,10 +72,9 @@ static const char * const *record_mem_usage = __usage;
 
 static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
 {
-       int rec_argc, i = 0, j, tmp_nr = 0;
+       int rec_argc, i = 0, j;
        int start, end;
        const char **rec_argv;
-       char **rec_tmp;
        int ret;
        bool all_user = false, all_kernel = false;
        struct perf_mem_event *e;
@@ -116,15 +115,6 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
        if (!rec_argv)
                return -1;
 
-       /*
-        * Save the allocated event name strings.
-        */
-       rec_tmp = calloc(rec_argc + 1, sizeof(char *));
-       if (!rec_tmp) {
-               free(rec_argv);
-               return -1;
-       }
-
        rec_argv[i++] = "record";
 
        e = perf_pmu__mem_events_ptr(pmu, PERF_MEM_EVENTS__LOAD_STORE);
@@ -163,7 +153,7 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
                rec_argv[i++] = "--data-page-size";
 
        start = i;
-       ret = perf_mem_events__record_args(rec_argv, &i, rec_tmp, &tmp_nr);
+       ret = perf_mem_events__record_args(rec_argv, &i);
        if (ret)
                goto out;
        end = i;
@@ -193,10 +183,6 @@ static int __cmd_record(int argc, const char **argv, struct perf_mem *mem)
 
        ret = cmd_record(i, rec_argv);
 out:
-       for (i = 0; i < tmp_nr; i++)
-               free(rec_tmp[i]);
-
-       free(rec_tmp);
        free(rec_argv);
        return ret;
 }
index 7d7df3d0b2b936f41746d17941594f613a9c7c2f..a20611b4fb1bc6d80bb2baa4140fc9fa22b0a4e2 100644 (file)
@@ -218,14 +218,14 @@ void perf_pmu__mem_events_list(struct perf_pmu *pmu)
        }
 }
 
-int perf_mem_events__record_args(const char **rec_argv, int *argv_nr,
-                                char **rec_tmp, int *tmp_nr)
+int perf_mem_events__record_args(const char **rec_argv, int *argv_nr)
 {
        const char *mnt = sysfs__mount();
        struct perf_pmu *pmu = NULL;
-       int i = *argv_nr, k = 0;
        struct perf_mem_event *e;
-
+       int i = *argv_nr;
+       const char *s;
+       char *copy;
 
        while ((pmu = perf_pmus__scan_mem(pmu)) != NULL) {
                for (int j = 0; j < PERF_MEM_EVENTS__MAX; j++) {
@@ -240,30 +240,20 @@ int perf_mem_events__record_args(const char **rec_argv, int *argv_nr,
                                return -1;
                        }
 
-                       if (perf_pmus__num_mem_pmus() == 1) {
-                               rec_argv[i++] = "-e";
-                               rec_argv[i++] = perf_pmu__mem_events_name(j, pmu);
-                       } else {
-                               const char *s = perf_pmu__mem_events_name(j, pmu);
-
-                               if (!perf_pmu__mem_events_supported(mnt, pmu, e))
-                                       continue;
+                       s = perf_pmu__mem_events_name(j, pmu);
+                       if (!s || !perf_pmu__mem_events_supported(mnt, pmu, e))
+                               continue;
 
-                               rec_argv[i++] = "-e";
-                               if (s) {
-                                       char *copy = strdup(s);
-                                       if (!copy)
-                                               return -1;
+                       copy = strdup(s);
+                       if (!copy)
+                               return -1;
 
-                                       rec_argv[i++] = copy;
-                                       rec_tmp[k++] = copy;
-                               }
-                       }
+                       rec_argv[i++] = "-e";
+                       rec_argv[i++] = copy;
                }
        }
 
        *argv_nr = i;
-       *tmp_nr = k;
        return 0;
 }
 
index f817a507b106ae8653c7109f8a94b89eae960d3b..c97cd3caa766c29d8e16eda27a1ac93e9619ba9b 100644 (file)
@@ -46,8 +46,7 @@ struct perf_pmu *perf_mem_events_find_pmu(void);
 bool is_mem_loads_aux_event(struct evsel *leader);
 
 void perf_pmu__mem_events_list(struct perf_pmu *pmu);
-int perf_mem_events__record_args(const char **rec_argv, int *argv_nr,
-                                char **rec_tmp, int *tmp_nr);
+int perf_mem_events__record_args(const char **rec_argv, int *argv_nr);
 
 int perf_mem__tlb_scnprintf(char *out, size_t sz, struct mem_info *mem_info);
 int perf_mem__lvl_scnprintf(char *out, size_t sz, struct mem_info *mem_info);