perf tools: Add support for weight v7 (modified)
[deliverable/linux.git] / tools / perf / builtin-record.c
index 774c90713a53fe8a27f0561a8476d5c23748edab..cdf58ecc04b106a5b783d4f17b69ae1ef7528f4a 100644 (file)
@@ -5,8 +5,6 @@
  * (or a CPU, or a PID) into the perf.data output file - for
  * later analysis via perf report.
  */
-#define _FILE_OFFSET_BITS 64
-
 #include "builtin.h"
 
 #include "perf.h"
@@ -474,7 +472,9 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
        }
 
        if (forks) {
-               err = perf_evlist__prepare_workload(evsel_list, opts, argv);
+               err = perf_evlist__prepare_workload(evsel_list, &opts->target,
+                                                   argv, opts->pipe_output,
+                                                   true);
                if (err < 0) {
                        pr_err("Couldn't run the workload!\n");
                        goto out_delete_session;
@@ -573,13 +573,15 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
                                         perf_event__synthesize_guest_os, tool);
        }
 
-       if (!opts->target.system_wide)
+       if (perf_target__has_task(&opts->target))
                err = perf_event__synthesize_thread_map(tool, evsel_list->threads,
                                                  process_synthesized_event,
                                                  machine);
-       else
+       else if (perf_target__has_cpu(&opts->target))
                err = perf_event__synthesize_threads(tool, process_synthesized_event,
                                               machine);
+       else /* command specified */
+               err = 0;
 
        if (err != 0)
                goto out_delete_session;
@@ -951,6 +953,8 @@ const struct option record_options[] = {
        OPT_CALLBACK('j', "branch-filter", &record.opts.branch_stack,
                     "branch filter mask", "branch stack filter modes",
                     parse_branch_stack),
+       OPT_BOOLEAN('W', "weight", &record.opts.sample_weight,
+                   "sample by weight (on special events only)"),
        OPT_END()
 };
 
@@ -962,7 +966,7 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
        struct perf_record *rec = &record;
        char errbuf[BUFSIZ];
 
-       evsel_list = perf_evlist__new(NULL, NULL);
+       evsel_list = perf_evlist__new();
        if (evsel_list == NULL)
                return -ENOMEM;
 
@@ -1024,7 +1028,7 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
                ui__error("%s", errbuf);
 
                err = -saved_errno;
-               goto out_free_fd;
+               goto out_symbol_exit;
        }
 
        err = -ENOMEM;
@@ -1055,6 +1059,9 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
        }
 
        err = __cmd_record(&record, argc, argv);
+
+       perf_evlist__munmap(evsel_list);
+       perf_evlist__close(evsel_list);
 out_free_fd:
        perf_evlist__delete_maps(evsel_list);
 out_symbol_exit:
This page took 0.037969 seconds and 5 git commands to generate.