]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - tools/perf/builtin-record.c
perf kmem: Fix a memory leak
[karo-tx-linux.git] / tools / perf / builtin-record.c
index 766fa0a91a320547490d66c7a9452fbd2a1b863f..0abfb18b911fb93f022f0e6ac1e7b4dda4fb1e4d 100644 (file)
@@ -272,8 +272,18 @@ try_again:
                exit(-1);
        }
 
-       if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0)
+       if (perf_evlist__mmap(evlist, opts->mmap_pages, false) < 0) {
+               if (errno == EPERM)
+                       die("Permission error mapping pages.\n"
+                           "Consider increasing "
+                           "/proc/sys/kernel/perf_event_mlock_kb,\n"
+                           "or try again with a smaller value of -m/--mmap_pages.\n"
+                           "(current value: %d)\n", opts->mmap_pages);
+               else if (!is_power_of_2(opts->mmap_pages))
+                       die("--mmap_pages/-m value must be a power of two.");
+
                die("failed to mmap with %d (%s)\n", errno, strerror(errno));
+       }
 
        if (rec->file_new)
                session->evlist = evlist;
@@ -493,6 +503,13 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
                        return err;
        }
 
+       if (!!rec->no_buildid
+           && !perf_header__has_feat(&session->header, HEADER_BUILD_ID)) {
+               pr_err("Couldn't generating buildids. "
+                      "Use --no-buildid to profile anyway.\n");
+               return -1;
+       }
+
        rec->post_processing_offset = lseek(output, 0, SEEK_CUR);
 
        machine = perf_session__find_host_machine(session);
@@ -700,6 +717,7 @@ const struct option record_options[] = {
        OPT_BOOLEAN('d', "data", &record.opts.sample_address,
                    "Sample addresses"),
        OPT_BOOLEAN('T', "timestamp", &record.opts.sample_time, "Sample timestamps"),
+       OPT_BOOLEAN('P', "period", &record.opts.period, "Sample period"),
        OPT_BOOLEAN('n', "no-samples", &record.opts.no_samples,
                    "don't sample"),
        OPT_BOOLEAN('N', "no-buildid-cache", &record.no_buildid_cache,