Merge tag 'ktest-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux...
[linux-2.6-microblaze.git] / tools / perf / builtin-c2c.c
index f78eea9..16b40f5 100644 (file)
@@ -3215,12 +3215,19 @@ static int parse_record_events(const struct option *opt,
                               const char *str, int unset __maybe_unused)
 {
        bool *event_set = (bool *) opt->value;
+       struct perf_pmu *pmu;
+
+       pmu = perf_mem_events_find_pmu();
+       if (!pmu) {
+               pr_err("failed: there is no PMU that supports perf c2c\n");
+               exit(-1);
+       }
 
        if (!strcmp(str, "list")) {
-               perf_mem_events__list();
+               perf_pmu__mem_events_list(pmu);
                exit(0);
        }
-       if (perf_mem_events__parse(str))
+       if (perf_pmu__mem_events_parse(pmu, str))
                exit(-1);
 
        *event_set = true;
@@ -3238,13 +3245,13 @@ 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;
        struct perf_mem_event *e;
+       struct perf_pmu *pmu;
        struct option options[] = {
        OPT_CALLBACK('e', "event", &event_set, "event",
                     "event selector. Use 'perf c2c record -e list' to list available events",
@@ -3256,7 +3263,13 @@ static int perf_c2c__record(int argc, const char **argv)
        OPT_END()
        };
 
-       if (perf_mem_events__init()) {
+       pmu = perf_mem_events_find_pmu();
+       if (!pmu) {
+               pr_err("failed: no PMU supports the memory events\n");
+               return -1;
+       }
+
+       if (perf_pmu__mem_events_init(pmu)) {
                pr_err("failed: memory events not supported\n");
                return -1;
        }
@@ -3265,22 +3278,16 @@ static int perf_c2c__record(int argc, const char **argv)
                             PARSE_OPT_KEEP_UNKNOWN);
 
        /* Max number of arguments multiplied by number of PMUs that can support them. */
-       rec_argc = argc + 11 * perf_pmus__num_mem_pmus();
+       rec_argc = argc + 11 * (perf_pmu__mem_events_num_mem_pmus(pmu) + 1);
 
        rec_argv = calloc(rec_argc + 1, sizeof(char *));
        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) {
-               e = perf_mem_events__ptr(PERF_MEM_EVENTS__LOAD_STORE);
+               e = perf_pmu__mem_events_ptr(pmu, PERF_MEM_EVENTS__LOAD_STORE);
                /*
                 * The load and store operations are required, use the event
                 * PERF_MEM_EVENTS__LOAD_STORE if it is supported.
@@ -3289,15 +3296,15 @@ static int perf_c2c__record(int argc, const char **argv)
                        e->record = true;
                        rec_argv[i++] = "-W";
                } else {
-                       e = perf_mem_events__ptr(PERF_MEM_EVENTS__LOAD);
+                       e = perf_pmu__mem_events_ptr(pmu, PERF_MEM_EVENTS__LOAD);
                        e->record = true;
 
-                       e = perf_mem_events__ptr(PERF_MEM_EVENTS__STORE);
+                       e = perf_pmu__mem_events_ptr(pmu, PERF_MEM_EVENTS__STORE);
                        e->record = true;
                }
        }
 
-       e = perf_mem_events__ptr(PERF_MEM_EVENTS__LOAD);
+       e = perf_pmu__mem_events_ptr(pmu, PERF_MEM_EVENTS__LOAD);
        if (e->record)
                rec_argv[i++] = "-W";
 
@@ -3305,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;
 
@@ -3332,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;
 }