]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - tools/perf/util/evlist.c
libperf: Add 'overwrite' to 'struct perf_mmap'
[linux.git] / tools / perf / util / evlist.c
index 253dd8dd0e12d3d775af648a8e1d903fdde4993e..16d47a420bc2cde71068619ec0df2f56f0cbfdac 100644 (file)
 #include <inttypes.h>
 #include <poll.h>
 #include "cpumap.h"
+#include "util/mmap.h"
 #include "thread_map.h"
 #include "target.h"
 #include "evlist.h"
 #include "evsel.h"
 #include "debug.h"
 #include "units.h"
-#include "util.h"
+#include "util.h" // page_size
+#include "../perf.h"
 #include "asm/bug.h"
 #include "bpf-event.h"
 #include <signal.h>
 #include <unistd.h>
 #include <sched.h>
+#include <stdlib.h>
 
 #include "parse-events.h"
 #include <subcmd/parse-options.h>
@@ -34,6 +37,7 @@
 #include <linux/hash.h>
 #include <linux/log2.h>
 #include <linux/err.h>
+#include <linux/string.h>
 #include <linux/zalloc.h>
 #include <perf/evlist.h>
 #include <perf/evsel.h>
@@ -121,7 +125,7 @@ static void perf_evlist__update_id_pos(struct evlist *evlist)
        perf_evlist__set_id_pos(evlist);
 }
 
-static void perf_evlist__purge(struct evlist *evlist)
+static void evlist__purge(struct evlist *evlist)
 {
        struct evsel *pos, *n;
 
@@ -134,7 +138,7 @@ static void perf_evlist__purge(struct evlist *evlist)
        evlist->core.nr_entries = 0;
 }
 
-void perf_evlist__exit(struct evlist *evlist)
+void evlist__exit(struct evlist *evlist)
 {
        zfree(&evlist->mmap);
        zfree(&evlist->overwrite_mmap);
@@ -146,14 +150,14 @@ void evlist__delete(struct evlist *evlist)
        if (evlist == NULL)
                return;
 
-       perf_evlist__munmap(evlist);
+       evlist__munmap(evlist);
        evlist__close(evlist);
        perf_cpu_map__put(evlist->core.cpus);
        perf_thread_map__put(evlist->core.threads);
        evlist->core.cpus = NULL;
        evlist->core.threads = NULL;
-       perf_evlist__purge(evlist);
-       perf_evlist__exit(evlist);
+       evlist__purge(evlist);
+       evlist__exit(evlist);
        free(evlist);
 }
 
@@ -420,7 +424,7 @@ int perf_evlist__alloc_pollfd(struct evlist *evlist)
 }
 
 static int __perf_evlist__add_pollfd(struct evlist *evlist, int fd,
-                                    struct perf_mmap *map, short revent)
+                                    struct mmap *map, short revent)
 {
        int pos = fdarray__add(&evlist->pollfd, fd, revent | POLLERR | POLLHUP);
        /*
@@ -444,7 +448,7 @@ int perf_evlist__add_pollfd(struct evlist *evlist, int fd)
 static void perf_evlist__munmap_filtered(struct fdarray *fda, int fd,
                                         void *arg __maybe_unused)
 {
-       struct perf_mmap *map = fda->priv[fd].ptr;
+       struct mmap *map = fda->priv[fd].ptr;
 
        if (map)
                perf_mmap__put(map);
@@ -648,7 +652,7 @@ static int perf_evlist__set_paused(struct evlist *evlist, bool value)
                return 0;
 
        for (i = 0; i < evlist->nr_mmaps; i++) {
-               int fd = evlist->overwrite_mmap[i].fd;
+               int fd = evlist->overwrite_mmap[i].core.fd;
                int err;
 
                if (fd < 0)
@@ -670,7 +674,7 @@ static int perf_evlist__resume(struct evlist *evlist)
        return perf_evlist__set_paused(evlist, false);
 }
 
-static void perf_evlist__munmap_nofree(struct evlist *evlist)
+static void evlist__munmap_nofree(struct evlist *evlist)
 {
        int i;
 
@@ -683,29 +687,29 @@ static void perf_evlist__munmap_nofree(struct evlist *evlist)
                        perf_mmap__munmap(&evlist->overwrite_mmap[i]);
 }
 
-void perf_evlist__munmap(struct evlist *evlist)
+void evlist__munmap(struct evlist *evlist)
 {
-       perf_evlist__munmap_nofree(evlist);
+       evlist__munmap_nofree(evlist);
        zfree(&evlist->mmap);
        zfree(&evlist->overwrite_mmap);
 }
 
-static struct perf_mmap *perf_evlist__alloc_mmap(struct evlist *evlist,
-                                                bool overwrite)
+static struct mmap *evlist__alloc_mmap(struct evlist *evlist,
+                                      bool overwrite)
 {
        int i;
-       struct perf_mmap *map;
+       struct mmap *map;
 
        evlist->nr_mmaps = perf_cpu_map__nr(evlist->core.cpus);
        if (perf_cpu_map__empty(evlist->core.cpus))
                evlist->nr_mmaps = perf_thread_map__nr(evlist->core.threads);
-       map = zalloc(evlist->nr_mmaps * sizeof(struct perf_mmap));
+       map = zalloc(evlist->nr_mmaps * sizeof(struct mmap));
        if (!map)
                return NULL;
 
        for (i = 0; i < evlist->nr_mmaps; i++) {
-               map[i].fd = -1;
-               map[i].overwrite = overwrite;
+               map[i].core.fd = -1;
+               map[i].core.overwrite = overwrite;
                /*
                 * When the perf_mmap() call is made we grab one refcount, plus
                 * one extra to let perf_mmap__consume() get the last
@@ -715,7 +719,7 @@ static struct perf_mmap *perf_evlist__alloc_mmap(struct evlist *evlist,
                 * Each PERF_EVENT_IOC_SET_OUTPUT points to this mmap and
                 * thus does perf_mmap__get() on it.
                 */
-               refcount_set(&map[i].refcnt, 0);
+               refcount_set(&map[i].core.refcnt, 0);
        }
        return map;
 }
@@ -729,7 +733,7 @@ perf_evlist__should_poll(struct evlist *evlist __maybe_unused,
        return true;
 }
 
-static int perf_evlist__mmap_per_evsel(struct evlist *evlist, int idx,
+static int evlist__mmap_per_evsel(struct evlist *evlist, int idx,
                                       struct mmap_params *mp, int cpu_idx,
                                       int thread, int *_output, int *_output_overwrite)
 {
@@ -738,7 +742,7 @@ static int perf_evlist__mmap_per_evsel(struct evlist *evlist, int idx,
        int evlist_cpu = cpu_map__cpu(evlist->core.cpus, cpu_idx);
 
        evlist__for_each_entry(evlist, evsel) {
-               struct perf_mmap *maps = evlist->mmap;
+               struct mmap *maps = evlist->mmap;
                int *output = _output;
                int fd;
                int cpu;
@@ -749,7 +753,7 @@ static int perf_evlist__mmap_per_evsel(struct evlist *evlist, int idx,
                        maps = evlist->overwrite_mmap;
 
                        if (!maps) {
-                               maps = perf_evlist__alloc_mmap(evlist, true);
+                               maps = evlist__alloc_mmap(evlist, true);
                                if (!maps)
                                        return -1;
                                evlist->overwrite_mmap = maps;
@@ -807,7 +811,7 @@ static int perf_evlist__mmap_per_evsel(struct evlist *evlist, int idx,
        return 0;
 }
 
-static int perf_evlist__mmap_per_cpu(struct evlist *evlist,
+static int evlist__mmap_per_cpu(struct evlist *evlist,
                                     struct mmap_params *mp)
 {
        int cpu, thread;
@@ -823,7 +827,7 @@ static int perf_evlist__mmap_per_cpu(struct evlist *evlist,
                                              true);
 
                for (thread = 0; thread < nr_threads; thread++) {
-                       if (perf_evlist__mmap_per_evsel(evlist, cpu, mp, cpu,
+                       if (evlist__mmap_per_evsel(evlist, cpu, mp, cpu,
                                                        thread, &output, &output_overwrite))
                                goto out_unmap;
                }
@@ -832,11 +836,11 @@ static int perf_evlist__mmap_per_cpu(struct evlist *evlist,
        return 0;
 
 out_unmap:
-       perf_evlist__munmap_nofree(evlist);
+       evlist__munmap_nofree(evlist);
        return -1;
 }
 
-static int perf_evlist__mmap_per_thread(struct evlist *evlist,
+static int evlist__mmap_per_thread(struct evlist *evlist,
                                        struct mmap_params *mp)
 {
        int thread;
@@ -850,7 +854,7 @@ static int perf_evlist__mmap_per_thread(struct evlist *evlist,
                auxtrace_mmap_params__set_idx(&mp->auxtrace_mp, evlist, thread,
                                              false);
 
-               if (perf_evlist__mmap_per_evsel(evlist, thread, mp, 0, thread,
+               if (evlist__mmap_per_evsel(evlist, thread, mp, 0, thread,
                                                &output, &output_overwrite))
                        goto out_unmap;
        }
@@ -858,7 +862,7 @@ static int perf_evlist__mmap_per_thread(struct evlist *evlist,
        return 0;
 
 out_unmap:
-       perf_evlist__munmap_nofree(evlist);
+       evlist__munmap_nofree(evlist);
        return -1;
 }
 
@@ -885,7 +889,7 @@ unsigned long perf_event_mlock_kb_in_pages(void)
        return pages;
 }
 
-size_t perf_evlist__mmap_size(unsigned long pages)
+size_t evlist__mmap_size(unsigned long pages)
 {
        if (pages == UINT_MAX)
                pages = perf_event_mlock_kb_in_pages();
@@ -968,7 +972,7 @@ int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str,
 }
 
 /**
- * perf_evlist__mmap_ex - Create mmaps to receive events.
+ * evlist__mmap_ex - Create mmaps to receive events.
  * @evlist: list of events
  * @pages: map length in pages
  * @overwrite: overwrite older events?
@@ -976,7 +980,7 @@ int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str,
  * @auxtrace_overwrite - overwrite older auxtrace data?
  *
  * If @overwrite is %false the user needs to signal event consumption using
- * perf_mmap__write_tail().  Using perf_evlist__mmap_read() does this
+ * perf_mmap__write_tail().  Using evlist__mmap_read() does this
  * automatically.
  *
  * Similarly, if @auxtrace_overwrite is %false the user needs to signal data
@@ -984,7 +988,7 @@ int perf_evlist__parse_mmap_pages(const struct option *opt, const char *str,
  *
  * Return: %0 on success, negative error code otherwise.
  */
-int perf_evlist__mmap_ex(struct evlist *evlist, unsigned int pages,
+int evlist__mmap_ex(struct evlist *evlist, unsigned int pages,
                         unsigned int auxtrace_pages,
                         bool auxtrace_overwrite, int nr_cblocks, int affinity, int flush,
                         int comp_level)
@@ -1001,14 +1005,14 @@ int perf_evlist__mmap_ex(struct evlist *evlist, unsigned int pages,
                                  .comp_level = comp_level };
 
        if (!evlist->mmap)
-               evlist->mmap = perf_evlist__alloc_mmap(evlist, false);
+               evlist->mmap = evlist__alloc_mmap(evlist, false);
        if (!evlist->mmap)
                return -ENOMEM;
 
        if (evlist->pollfd.entries == NULL && perf_evlist__alloc_pollfd(evlist) < 0)
                return -ENOMEM;
 
-       evlist->mmap_len = perf_evlist__mmap_size(pages);
+       evlist->mmap_len = evlist__mmap_size(pages);
        pr_debug("mmap size %zuB\n", evlist->mmap_len);
        mp.mask = evlist->mmap_len - page_size - 1;
 
@@ -1023,14 +1027,14 @@ int perf_evlist__mmap_ex(struct evlist *evlist, unsigned int pages,
        }
 
        if (perf_cpu_map__empty(cpus))
-               return perf_evlist__mmap_per_thread(evlist, &mp);
+               return evlist__mmap_per_thread(evlist, &mp);
 
-       return perf_evlist__mmap_per_cpu(evlist, &mp);
+       return evlist__mmap_per_cpu(evlist, &mp);
 }
 
-int perf_evlist__mmap(struct evlist *evlist, unsigned int pages)
+int evlist__mmap(struct evlist *evlist, unsigned int pages)
 {
-       return perf_evlist__mmap_ex(evlist, pages, 0, false, 0, PERF_AFFINITY_SYS, 1, 0);
+       return evlist__mmap_ex(evlist, pages, 0, false, 0, PERF_AFFINITY_SYS, 1, 0);
 }
 
 int perf_evlist__create_maps(struct evlist *evlist, struct target *target)
@@ -1844,7 +1848,7 @@ static void *perf_evlist__poll_thread(void *arg)
                        perf_evlist__poll(evlist, 1000);
 
                for (i = 0; i < evlist->nr_mmaps; i++) {
-                       struct perf_mmap *map = &evlist->mmap[i];
+                       struct mmap *map = &evlist->mmap[i];
                        union perf_event *event;
 
                        if (perf_mmap__read_init(map))
@@ -1886,7 +1890,7 @@ int perf_evlist__start_sb_thread(struct evlist *evlist,
                        goto out_delete_evlist;
        }
 
-       if (perf_evlist__mmap(evlist, UINT_MAX))
+       if (evlist__mmap(evlist, UINT_MAX))
                goto out_delete_evlist;
 
        evlist__for_each_entry(evlist, counter) {