libperf: Adopt perf_mmap__read_done() from tools/perf
authorJiri Olsa <jolsa@kernel.org>
Mon, 7 Oct 2019 12:53:19 +0000 (14:53 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 10 Oct 2019 14:45:32 +0000 (11:45 -0300)
Move perf_mmap__read_init() from tools/perf to libperf and export it in
the perf/mmap.h header.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20191007125344.14268-12-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
20 files changed:
tools/perf/arch/x86/tests/perf-time-to-tsc.c
tools/perf/builtin-kvm.c
tools/perf/builtin-top.c
tools/perf/builtin-trace.c
tools/perf/lib/include/perf/mmap.h
tools/perf/lib/libperf.map
tools/perf/lib/mmap.c
tools/perf/tests/backward-ring-buffer.c
tools/perf/tests/bpf.c
tools/perf/tests/code-reading.c
tools/perf/tests/keep-tracking.c
tools/perf/tests/mmap-basic.c
tools/perf/tests/openat-syscall-tp-fields.c
tools/perf/tests/perf-record.c
tools/perf/tests/sw-clock.c
tools/perf/tests/switch-tracking.c
tools/perf/tests/task-exit.c
tools/perf/util/evlist.c
tools/perf/util/mmap.c
tools/perf/util/mmap.h

index 6a0c3ff78e01e4ff599e0d49708803b15cc0aa31..c90d925f7ae643513ae6a68d08029c7b3306706c 100644 (file)
@@ -142,7 +142,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe
 next_event:
                        perf_mmap__consume(&md->core);
                }
-               perf_mmap__read_done(md);
+               perf_mmap__read_done(&md->core);
        }
 
        if (!comm1_time || !comm2_time)
index b6a8078dd446c7225d9d4946341dc3c8a4c2e40a..4c087a8c9fedd7f8f59e09c72237cd452d012c5f 100644 (file)
@@ -794,7 +794,7 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,
                        break;
        }
 
-       perf_mmap__read_done(md);
+       perf_mmap__read_done(&md->core);
        return n;
 }
 
index 4a4bb7b20c39b7f31ac04fcc77375b0321e2572b..1a54069ccd9c6ef4799042f4693ecde3b10c6e4b 100644 (file)
@@ -894,7 +894,7 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)
                }
        }
 
-       perf_mmap__read_done(md);
+       perf_mmap__read_done(&md->core);
 }
 
 static void perf_top__mmap_read(struct perf_top *top)
index cd69d68e7f1de95a4aeccc45031d127c7f49ff17..23116289f710c6e822ad7fd3c7c592fc69db8d1a 100644 (file)
@@ -3821,7 +3821,7 @@ again:
                                draining = true;
                        }
                }
-               perf_mmap__read_done(md);
+               perf_mmap__read_done(&md->core);
        }
 
        if (trace->nr_events == before) {
index 646e9052b003c1559ec110abf9c2d759f5aacfeb..4f946e7f724b6d813e5e877c111fad3310804cde 100644 (file)
@@ -8,5 +8,6 @@ struct perf_mmap;
 
 LIBPERF_API void perf_mmap__consume(struct perf_mmap *map);
 LIBPERF_API int perf_mmap__read_init(struct perf_mmap *map);
+LIBPERF_API void perf_mmap__read_done(struct perf_mmap *map);
 
 #endif /* __LIBPERF_MMAP_H */
index bc3fbb213a3ec1e4218501856d1426bd065f151f..7e3ea2e9c9175eb5510d4ee8ac16ab1b59996ac6 100644 (file)
@@ -42,6 +42,7 @@ LIBPERF_0.0.1 {
                perf_evlist__poll;
                perf_mmap__consume;
                perf_mmap__read_init;
+               perf_mmap__read_done;
        local:
                *;
 };
index fdbc6c550dea85244a0fd682aa5700d24d11959d..97297cba44e3359f88061a309756aa3316e5e511 100644 (file)
@@ -175,3 +175,20 @@ int perf_mmap__read_init(struct perf_mmap *map)
 
        return __perf_mmap__read_init(map);
 }
+
+/*
+ * Mandatory for overwrite mode
+ * The direction of overwrite mode is backward.
+ * The last perf_mmap__read() will set tail to map->core.prev.
+ * Need to correct the map->core.prev to head which is the end of next read.
+ */
+void perf_mmap__read_done(struct perf_mmap *map)
+{
+       /*
+        * Check if event was unmapped due to a POLLHUP/POLLERR.
+        */
+       if (!refcount_read(&map->refcnt))
+               return;
+
+       map->prev = perf_mmap__read_head(map);
+}
index ff3a986983ab28b51d6e2cfba44a9b6074b879c6..13e67cd213bd13c9c2af42ba77917a4e739f0339 100644 (file)
@@ -54,7 +54,7 @@ static int count_samples(struct evlist *evlist, int *sample_count,
                                return TEST_FAIL;
                        }
                }
-               perf_mmap__read_done(map);
+               perf_mmap__read_done(&map->core);
        }
        return TEST_OK;
 }
index 73d26c63d624efeb3209d541391cdfc662c525f9..fd45529e29c14f12ae9e9bc22e08590cb09a410f 100644 (file)
@@ -194,7 +194,7 @@ static int do_test(struct bpf_object *obj, int (*func)(void),
                        if (type == PERF_RECORD_SAMPLE)
                                count ++;
                }
-               perf_mmap__read_done(md);
+               perf_mmap__read_done(&md->core);
        }
 
        if (count != expect) {
index cf992e0b27ff73a9caaea31da3fa4d58b865a311..9947cda29bad4800195b7d73d7f3146c0153989c 100644 (file)
@@ -435,7 +435,7 @@ static int process_events(struct machine *machine, struct evlist *evlist,
                        if (ret < 0)
                                return ret;
                }
-               perf_mmap__read_done(md);
+               perf_mmap__read_done(&md->core);
        }
        return 0;
 }
index e85da7e77269b54d7348b970f1247e3c6cdc7b46..e950907f6f579c407d5b13743d99fabab72c1346 100644 (file)
@@ -49,7 +49,7 @@ static int find_comm(struct evlist *evlist, const char *comm)
                                found += 1;
                        perf_mmap__consume(&md->core);
                }
-               perf_mmap__read_done(md);
+               perf_mmap__read_done(&md->core);
        }
        return found;
 }
index 77f42f0ac15d540f95ec1eb285c08b695537f12f..bb15d405a42c64b7e8bc2707ade3ead1118737e1 100644 (file)
@@ -142,7 +142,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse
                nr_events[evsel->idx]++;
                perf_mmap__consume(&md->core);
        }
-       perf_mmap__read_done(md);
+       perf_mmap__read_done(&md->core);
 
 out_init:
        err = 0;
index d6a563120d935e591285c31494daba5bf53c7f3b..c95eb1bbf3962460824c7fd6bce05382b341d5f7 100644 (file)
@@ -124,7 +124,7 @@ int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtest
 
                                goto out_ok;
                        }
-                       perf_mmap__read_done(md);
+                       perf_mmap__read_done(&md->core);
                }
 
                if (nr_events == before)
index 2587cb8b2c0fecd5a89092acd7b05126f9397fbc..92a53be3b32b5287e7c7f0f0c52d31285f16a142 100644 (file)
@@ -279,7 +279,7 @@ int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unus
 
                                perf_mmap__consume(&md->core);
                        }
-                       perf_mmap__read_done(md);
+                       perf_mmap__read_done(&md->core);
                }
 
                /*
index 808669507c30ad4eec802a4d95852597c5452939..ace20921ad5523590e1fd73824c906528e19090a 100644 (file)
@@ -120,7 +120,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 next_event:
                perf_mmap__consume(&md->core);
        }
-       perf_mmap__read_done(md);
+       perf_mmap__read_done(&md->core);
 
 out_init:
        if ((u64) nr_samples == total_periods) {
index bedfdec349720c999214555a82724b26ef93782b..8400fb17c170e0539b0a8917b32f8a4f1461fce1 100644 (file)
@@ -280,7 +280,7 @@ static int process_events(struct evlist *evlist,
                        if (ret < 0)
                                goto out_free_nodes;
                }
-               perf_mmap__read_done(md);
+               perf_mmap__read_done(&md->core);
        }
 
        events_array = calloc(cnt, sizeof(struct event_node));
index 035d42375d4bb63a60e45f9ab47f40d1a2814d3c..c6a13948821c4fcd358cfd049d9ef2b82991a8e3 100644 (file)
@@ -127,7 +127,7 @@ retry:
 
                perf_mmap__consume(&md->core);
        }
-       perf_mmap__read_done(md);
+       perf_mmap__read_done(&md->core);
 
 out_init:
        if (!exited || !nr_exit) {
index d9a4a4b188eddbfd259b4189f4cc17e8fad196bd..6e070ee9ad3905faa362241bab4a8c7d2e7241ac 100644 (file)
@@ -1822,7 +1822,7 @@ static void *perf_evlist__poll_thread(void *arg)
                                perf_mmap__consume(&map->core);
                                got_data = true;
                        }
-                       perf_mmap__read_done(map);
+                       perf_mmap__read_done(&map->core);
                }
 
                if (draining && !got_data)
index 59379118c2f1bea932fbbdc19144e4fbde4f71e9..2dedef9b06fd1dc8b273942f96b6e3135212f88d 100644 (file)
@@ -405,20 +405,3 @@ int perf_mmap__push(struct mmap *md, void *to,
 out:
        return rc;
 }
-
-/*
- * Mandatory for overwrite mode
- * The direction of overwrite mode is backward.
- * The last perf_mmap__read() will set tail to map->core.prev.
- * Need to correct the map->core.prev to head which is the end of next read.
- */
-void perf_mmap__read_done(struct mmap *map)
-{
-       /*
-        * Check if event was unmapped due to a POLLHUP/POLLERR.
-        */
-       if (!refcount_read(&map->core.refcnt))
-               return;
-
-       map->core.prev = perf_mmap__read_head(&map->core);
-}
index 6d818ef51f05ceb80dc5c34f64de82d4411e5cfd..0b15702be1a5ebba5ad3bf597065e3c8c31aebba 100644 (file)
@@ -54,5 +54,4 @@ int perf_mmap__push(struct mmap *md, void *to,
 
 size_t mmap__mmap_len(struct mmap *map);
 
-void perf_mmap__read_done(struct mmap *map);
 #endif /*__PERF_MMAP_H */