mm/migrate: correct failure handling if !hugepage_migration_support()
[firefly-linux-kernel-4.4.55.git] / tools / perf / builtin-record.c
index b7f5e438276b3d7b11a0fcf9621af52a1b974873..3c394bf16fa8cd86ce01d3d5852bab8a078f5ae4 100644 (file)
@@ -183,7 +183,7 @@ static int record__open(struct record *rec)
 
        perf_evlist__config(evlist, opts);
 
-       list_for_each_entry(pos, &evlist->entries, node) {
+       evlist__for_each(evlist, pos) {
 try_again:
                if (perf_evsel__open(pos, evlist->cpus, evlist->threads) < 0) {
                        if (perf_evsel__fallback(pos, errno, msg, sizeof(msg))) {
@@ -499,7 +499,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
         * (apart from group members) have enable_on_exec=1 set,
         * so don't spoil it by prematurely enabling them.
         */
-       if (!target__none(&opts->target))
+       if (!target__none(&opts->target) && !opts->initial_delay)
                perf_evlist__enable(rec->evlist);
 
        /*
@@ -508,6 +508,11 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
        if (forks)
                perf_evlist__start_workload(rec->evlist);
 
+       if (opts->initial_delay) {
+               usleep(opts->initial_delay * 1000);
+               perf_evlist__enable(rec->evlist);
+       }
+
        for (;;) {
                int hits = rec->samples;
 
@@ -833,7 +838,7 @@ const struct option record_options[] = {
                    "record events on existing thread id"),
        OPT_INTEGER('r', "realtime", &record.realtime_prio,
                    "collect data with this RT SCHED_FIFO priority"),
-       OPT_BOOLEAN('D', "no-delay", &record.opts.no_delay,
+       OPT_BOOLEAN(0, "no-buffering", &record.opts.no_buffering,
                    "collect data without buffering"),
        OPT_BOOLEAN('R', "raw-samples", &record.opts.raw_samples,
                    "collect raw sample records from all opened counters"),
@@ -877,6 +882,8 @@ const struct option record_options[] = {
        OPT_CALLBACK('G', "cgroup", &record.evlist, "name",
                     "monitor event in cgroup name only",
                     parse_cgroups),
+       OPT_UINTEGER('D', "delay", &record.opts.initial_delay,
+                 "ms to wait before starting measurement after program start"),
        OPT_STRING('u', "uid", &record.opts.target.uid_str, "user",
                   "user to profile"),
 
@@ -968,8 +975,6 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
        }
 
        err = __cmd_record(&record, argc, argv);
-
-       perf_evlist__munmap(rec->evlist);
 out_symbol_exit:
        symbol__exit();
        return err;