diff options
| author | Wang Nan <wangnan0@huawei.com> | 2017-12-02 21:00:41 -0500 |
|---|---|---|
| committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2017-12-05 13:43:54 -0500 |
| commit | 8eb7a1fe31612fd3e8ae8042dd2ebaf7575504cb (patch) | |
| tree | 894be1553d77d66d41e4838c89712240059da1b2 | |
| parent | ca6a9a05391960be5e8161a59a9854b32325d901 (diff) | |
perf mmap: Remove overwrite and check_messup from mmap read
All perf_mmap__read_forward() read from read-write ring buffer, so no
need check_messup. Reading from backward ring buffer doesn't require
check_messup because it never mess up. Cleanup arguments lists.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/20171203020044.81680-6-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
| -rw-r--r-- | tools/perf/util/evlist.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/mmap.c | 28 | ||||
| -rw-r--r-- | tools/perf/util/mmap.h | 2 |
3 files changed, 6 insertions, 26 deletions
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c index a59134fb141f..68c1f9546650 100644 --- a/tools/perf/util/evlist.c +++ b/tools/perf/util/evlist.c | |||
| @@ -711,7 +711,7 @@ union perf_event *perf_evlist__mmap_read_forward(struct perf_evlist *evlist, int | |||
| 711 | * No need for read-write ring buffer: kernel stop outputting when | 711 | * No need for read-write ring buffer: kernel stop outputting when |
| 712 | * it hit md->prev (perf_mmap__consume()). | 712 | * it hit md->prev (perf_mmap__consume()). |
| 713 | */ | 713 | */ |
| 714 | return perf_mmap__read_forward(md, false); | 714 | return perf_mmap__read_forward(md); |
| 715 | } | 715 | } |
| 716 | 716 | ||
| 717 | union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist *evlist, int idx) | 717 | union perf_event *perf_evlist__mmap_read_backward(struct perf_evlist *evlist, int idx) |
diff --git a/tools/perf/util/mmap.c b/tools/perf/util/mmap.c index 703ed41a9269..3f262e707a41 100644 --- a/tools/perf/util/mmap.c +++ b/tools/perf/util/mmap.c | |||
| @@ -21,33 +21,13 @@ size_t perf_mmap__mmap_len(struct perf_mmap *map) | |||
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | /* When check_messup is true, 'end' must points to a good entry */ | 23 | /* When check_messup is true, 'end' must points to a good entry */ |
| 24 | static union perf_event *perf_mmap__read(struct perf_mmap *map, bool check_messup, | 24 | static union perf_event *perf_mmap__read(struct perf_mmap *map, |
| 25 | u64 start, u64 end, u64 *prev) | 25 | u64 start, u64 end, u64 *prev) |
| 26 | { | 26 | { |
| 27 | unsigned char *data = map->base + page_size; | 27 | unsigned char *data = map->base + page_size; |
| 28 | union perf_event *event = NULL; | 28 | union perf_event *event = NULL; |
| 29 | int diff = end - start; | 29 | int diff = end - start; |
| 30 | 30 | ||
| 31 | if (check_messup) { | ||
| 32 | /* | ||
| 33 | * If we're further behind than half the buffer, there's a chance | ||
| 34 | * the writer will bite our tail and mess up the samples under us. | ||
| 35 | * | ||
| 36 | * If we somehow ended up ahead of the 'end', we got messed up. | ||
| 37 | * | ||
| 38 | * In either case, truncate and restart at 'end'. | ||
| 39 | */ | ||
| 40 | if (diff > map->mask / 2 || diff < 0) { | ||
| 41 | fprintf(stderr, "WARNING: failed to keep up with mmap data.\n"); | ||
| 42 | |||
| 43 | /* | ||
| 44 | * 'end' points to a known good entry, start there. | ||
| 45 | */ | ||
| 46 | start = end; | ||
| 47 | diff = 0; | ||
| 48 | } | ||
| 49 | } | ||
| 50 | |||
| 51 | if (diff >= (int)sizeof(event->header)) { | 31 | if (diff >= (int)sizeof(event->header)) { |
| 52 | size_t size; | 32 | size_t size; |
| 53 | 33 | ||
| @@ -89,7 +69,7 @@ broken_event: | |||
| 89 | return event; | 69 | return event; |
| 90 | } | 70 | } |
| 91 | 71 | ||
| 92 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map, bool check_messup) | 72 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map) |
| 93 | { | 73 | { |
| 94 | u64 head; | 74 | u64 head; |
| 95 | u64 old = map->prev; | 75 | u64 old = map->prev; |
| @@ -102,7 +82,7 @@ union perf_event *perf_mmap__read_forward(struct perf_mmap *map, bool check_mess | |||
| 102 | 82 | ||
| 103 | head = perf_mmap__read_head(map); | 83 | head = perf_mmap__read_head(map); |
| 104 | 84 | ||
| 105 | return perf_mmap__read(map, check_messup, old, head, &map->prev); | 85 | return perf_mmap__read(map, old, head, &map->prev); |
| 106 | } | 86 | } |
| 107 | 87 | ||
| 108 | union perf_event *perf_mmap__read_backward(struct perf_mmap *map) | 88 | union perf_event *perf_mmap__read_backward(struct perf_mmap *map) |
| @@ -138,7 +118,7 @@ union perf_event *perf_mmap__read_backward(struct perf_mmap *map) | |||
| 138 | else | 118 | else |
| 139 | end = head + map->mask + 1; | 119 | end = head + map->mask + 1; |
| 140 | 120 | ||
| 141 | return perf_mmap__read(map, false, start, end, &map->prev); | 121 | return perf_mmap__read(map, start, end, &map->prev); |
| 142 | } | 122 | } |
| 143 | 123 | ||
| 144 | void perf_mmap__read_catchup(struct perf_mmap *map) | 124 | void perf_mmap__read_catchup(struct perf_mmap *map) |
diff --git a/tools/perf/util/mmap.h b/tools/perf/util/mmap.h index 2c3d291785de..d640273b7762 100644 --- a/tools/perf/util/mmap.h +++ b/tools/perf/util/mmap.h | |||
| @@ -86,7 +86,7 @@ static inline void perf_mmap__write_tail(struct perf_mmap *md, u64 tail) | |||
| 86 | pc->data_tail = tail; | 86 | pc->data_tail = tail; |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map, bool check_messup); | 89 | union perf_event *perf_mmap__read_forward(struct perf_mmap *map); |
| 90 | union perf_event *perf_mmap__read_backward(struct perf_mmap *map); | 90 | union perf_event *perf_mmap__read_backward(struct perf_mmap *map); |
| 91 | 91 | ||
| 92 | int perf_mmap__push(struct perf_mmap *md, bool backward, | 92 | int perf_mmap__push(struct perf_mmap *md, bool backward, |
