perf evlist: Store 'overwrite' in struct perf_mmap
PATCH v2 1/8 perf evlist: Store 'overwrite' in struct perf_mmap
From: Kan Liang <[email protected]>
It has been determined that the map is for overwrite mode (evlist->overwrite_mmap) or non-overwrite mode (evlist->mmap) when calling perf_evlist__alloc_mmap().
Store the information in struct perf_mmap, which will be used later to simpler the perf_mmap__read*() interfaces.
---
Changes since V1:
- New patch to store 'overwrite' in struct perf_mmap at allocation
tools/perf/util/evlist.c | 8 +++++--- tools/perf/util/mmap.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-)
tools/perf/util/evlist.c +5 -3
@@ -722,7 +722,8 @@ void perf_evlist__munmap(struct perf_evlist *evlist)zfree (&evlist->overwrite_mmap); } -static struct perf_mmap *perf_evlist__alloc_mmap (struct perf_evlist *evlist) +static struct perf_mmap *perf_evlist__alloc_mmap (struct perf_evlist *evlist, +bool overwrite) {int i;struct perf_mmap *map;
@@ -736,6 +737,7 @@ static struct perf_mmap *perf_evlist__alloc_mmap(struct perf_evlist *evlist)for (i =0 ; i < evlist->nr_mmaps; i++) { map[i].fd =-1 ; + map[i].overwrite = overwrite;/* * When the perf_mmap() call is made we grab one refcount, plus * one extra to let perf_mmap__consume() get the last
@@ -779,7 +781,7 @@ static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, maps = evlist->overwrite_mmap;if (!maps) { - maps =perf_evlist__alloc_mmap (evlist); + maps =perf_evlist__alloc_mmap (evlist, true);if (!maps)return -1 ; evlist->overwrite_mmap = maps;
@@ -1029,7 +1031,7 @@ int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages,struct mmap_params mp;if (!evlist->mmap) - evlist->mmap =perf_evlist__alloc_mmap (evlist); + evlist->mmap =perf_evlist__alloc_mmap (evlist, false);if (!evlist->mmap)return -ENOMEM ;
tools/perf/util/mmap.h +1 -0
@@ -20,6 +20,7 @@ struct perf_mmap {int fd;refcount_t refcnt;u64 prev; +bool overwrite;struct auxtrace_mmap auxtrace_mmap;char event_copy[PERF_SAMPLE_MAX_SIZE ]__aligned(8) ; };
Signature · 1 line
2.4.11
PATCH v2 2/8 perf mmap: Store mmap scope in struct perf_mmap
From: Kan Liang <[email protected]>
There are too many boilerplates for the perf_mmap__read*() interfaces.
The 'start' and 'end' should be stored in struct perf_mmap at initialization. They will be used later.
The old 'startp' and 'endp' are used by perf_mmap__read_event() now. They cannot be removed. So the old 'startp/endp' and new 'md->start/md->end' will exist simultaneously now.
The old one will be removed later.
---
Changes since V1:
- Using the 'overwrite' which set in previous patch
- Add the reason of keeping old starp/end in the change log
tools/perf/util/mmap.c | 12 ++++++++---- tools/perf/util/mmap.h | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-)
tools/perf/util/mmap.c +8 -4
@@ -250,13 +250,15 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite, *startp = overwrite ? head : old; *endp = overwrite ? old : head; + md->start = md->overwrite ? head : old; + md->end = md->overwrite ? old : head; -if (*startp == *endp) +if (md->start == md->end)return -EAGAIN ; - size = *endp - *startp; + size = md->end - md->start;if (size > (unsigned long )(md->mask) +1 ) { -if (!overwrite) { +if (!md->overwrite) {WARN_ONCE (1 ,"failed to keep up with mmap data. (warn only once)\n" ); md->prev = head;
@@ -268,8 +270,10 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,* Backward ring buffer is full. We still have a chance to read * most of data from it. */ -if (overwrite_rb_find_range (data, md->mask, head, startp, endp)) +if (overwrite_rb_find_range (data, md->mask, head, &md->start, &md->end))return -EINVAL ; + *startp = md->start; + *endp = md->end; }return 0 ;
tools/perf/util/mmap.h +2 -0
@@ -20,6 +20,8 @@ struct perf_mmap {int fd;refcount_t refcnt;u64 prev; +u64 start; +u64 end;bool overwrite;struct auxtrace_mmap auxtrace_mmap;char event_copy[PERF_SAMPLE_MAX_SIZE ]__aligned(8) ;
Signature · 1 line
2.4.11
tip-bot for Kan Liang
merge bot[tip:perf/core] perf mmap: Store mmap scope in struct perf_mmap()
perf mmap: Store mmap scope in struct perf_mmap()
Commit-ID: 4fda3459e3c2e5ca35d304646aeeb811242537b2 Gitweb: https://git.kernel.org/tip/4fda3459e3c2e5ca35d304646aeeb811242537b2 Author: Kan Liang <[email protected]> AuthorDate: Tue, 6 Mar 2018 10:36:01 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 8 Mar 2018 10:05:50 -0300
perf mmap: Store mmap scope in struct perf_mmap()
There is too much boilerplate in the perf_mmap__read*() interfaces.
The 'start' and 'end' variables should be stored in struct perf_mmap at initialization. They will be used later.
The old 'startp' and 'endp' pointers are used by perf_mmap__read_event() now. They cannot be removed. So the old 'startp/endp' and new 'md->start/md->end' will exist simultaneously now. The old one will be removed later.
--- tools/perf/util/mmap.c | 12 ++++++++---- tools/perf/util/mmap.h | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-)
tools/perf/util/mmap.c +8 -4
@@ -250,13 +250,15 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite, *startp = overwrite ? head : old; *endp = overwrite ? old : head; + md->start = md->overwrite ? head : old; + md->end = md->overwrite ? old : head; -if (*startp == *endp) +if (md->start == md->end)return -EAGAIN ; - size = *endp - *startp; + size = md->end - md->start;if (size > (unsigned long )(md->mask) +1 ) { -if (!overwrite) { +if (!md->overwrite) {WARN_ONCE (1 ,"failed to keep up with mmap data. (warn only once)\n" ); md->prev = head;
@@ -268,8 +270,10 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,* Backward ring buffer is full. We still have a chance to read * most of data from it. */ -if (overwrite_rb_find_range (data, md->mask, head, startp, endp)) +if (overwrite_rb_find_range (data, md->mask, head, &md->start, &md->end))return -EINVAL ; + *startp = md->start; + *endp = md->end; }return 0 ;
tools/perf/util/mmap.h +2 -0
@@ -20,6 +20,8 @@ struct perf_mmap {int fd;refcount_t refcnt;u64 prev; +u64 start; +u64 end;bool overwrite;struct auxtrace_mmap auxtrace_mmap;char event_copy[PERF_SAMPLE_MAX_SIZE ]__aligned(8) ;
PATCH v2 3/8 perf mmap: Using the stored scope data in perf_mmap__push
In reply to [email protected]From: Kan Liang <[email protected]>
Using the 'start' and 'end' which are stored in struct perf_mmap to replace the temporary 'start' and 'end'.
The temporary variables will be discarded later.
It doesn't need to pass 'overwrite' to perf_mmap__push(). It's stored in struct perf_mmap.
---
Changes since V1:
- Remove the 'overwrite' parameter from perf_mmap__push().
tools/perf/builtin-record.c | 2 +- tools/perf/util/mmap.c | 24 ++++++++++++------------ tools/perf/util/mmap.h | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-)
tools/perf/builtin-record.c +1 -1
@@ -510,7 +510,7 @@ static int record__mmap_read_evlist(struct record *rec, struct perf_evlist *evlistruct auxtrace_mmap *mm = &maps[i].auxtrace_mmap;if (maps[i].base) { -if (perf_mmap__push (&maps[i], overwrite, rec, record__pushfn) !=0 ) { +if (perf_mmap__push (&maps[i], rec, record__pushfn) !=0 ) { rc =-1 ; goto out; }
tools/perf/util/mmap.c +12 -12
@@ -279,8 +279,8 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,return 0 ; } -int perf_mmap__push (struct perf_mmap *md,bool overwrite, -void *to,int push (void *to,void *buf,size_t size)) +int perf_mmap__push (struct perf_mmap *md,void *to, +int push (void *to,void *buf,size_t size)) {u64 head =perf_mmap__read_head (md);u64 end, start;
@@ -289,16 +289,16 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite,void *buf;int rc =0 ; - rc =perf_mmap__read_init (md, overwrite, &start, &end); + rc =perf_mmap__read_init (md, md->overwrite, &start, &end);if (rc <0 )return (rc == -EAGAIN ) ?0 :-1 ; - size = end - start; + size = md->end - md->start; -if ((start & md->mask) + size != (end & md->mask)) { - buf = &data[start & md->mask]; - size = md->mask +1 - (start & md->mask); - start += size; +if ((md->start & md->mask) + size != (md->end & md->mask)) { + buf = &data[md->start & md->mask]; + size = md->mask +1 - (md->start & md->mask); + md->start += size;if (push (to, buf, size) <0 ) { rc =-1 ;
@@ -306,9 +306,9 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite, } } - buf = &data[start & md->mask]; - size = end - start; - start += size; + buf = &data[md->start & md->mask]; + size = md->end - md->start; + md->start += size;if (push (to, buf, size) <0 ) { rc =-1 ;
@@ -316,7 +316,7 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite, } md->prev = head; -perf_mmap__consume (md, overwrite); +perf_mmap__consume (md, md->overwrite); out:return rc; }
tools/perf/util/mmap.h +2 -2
@@ -93,8 +93,8 @@ union perf_event *perf_mmap__read_event(struct perf_mmap *map,bool overwrite, u64 *startp, u64 end); -int perf_mmap__push (struct perf_mmap *md,bool backward, -void *to,int push (void *to,void *buf,size_t size)); +int perf_mmap__push (struct perf_mmap *md,void *to, +int push (void *to,void *buf,size_t size));size_t perf_mmap__mmap_len (struct perf_mmap *map);
Signature · 1 line
2.4.11
tip-bot for Kan Liang
merge bot[tip:perf/core] perf mmap: Use the stored scope data in perf_mmap__push()
perf mmap: Use the stored scope data in perf_mmap__push()
Commit-ID: 07a9461da67292ffdf3f4a02522caf475b1151d7 Gitweb: https://git.kernel.org/tip/07a9461da67292ffdf3f4a02522caf475b1151d7 Author: Kan Liang <[email protected]> AuthorDate: Tue, 6 Mar 2018 10:36:02 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 8 Mar 2018 10:05:51 -0300
perf mmap: Use the stored scope data in perf_mmap__push()
Using the 'start' and 'end' which are stored in struct perf_mmap to replace the temporary 'start' and 'end'.
The temporary variables will be discarded later.
It doesn't need to pass 'overwrite' to perf_mmap__push(). It's stored in struct perf_mmap.
--- tools/perf/builtin-record.c | 2 +- tools/perf/util/mmap.c | 24 ++++++++++++------------ tools/perf/util/mmap.h | 4 ++-- 3 files changed, 15 insertions(+), 15 deletions(-)
tools/perf/builtin-record.c +1 -1
@@ -533,7 +533,7 @@ static int record__mmap_read_evlist(struct record *rec, struct perf_evlist *evlistruct auxtrace_mmap *mm = &maps[i].auxtrace_mmap;if (maps[i].base) { -if (perf_mmap__push (&maps[i], overwrite, rec, record__pushfn) !=0 ) { +if (perf_mmap__push (&maps[i], rec, record__pushfn) !=0 ) { rc =-1 ; goto out; }
tools/perf/util/mmap.c +12 -12
@@ -279,8 +279,8 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,return 0 ; } -int perf_mmap__push (struct perf_mmap *md,bool overwrite, -void *to,int push (void *to,void *buf,size_t size)) +int perf_mmap__push (struct perf_mmap *md,void *to, +int push (void *to,void *buf,size_t size)) {u64 head =perf_mmap__read_head (md);u64 end, start;
@@ -289,16 +289,16 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite,void *buf;int rc =0 ; - rc =perf_mmap__read_init (md, overwrite, &start, &end); + rc =perf_mmap__read_init (md, md->overwrite, &start, &end);if (rc <0 )return (rc == -EAGAIN ) ?0 :-1 ; - size = end - start; + size = md->end - md->start; -if ((start & md->mask) + size != (end & md->mask)) { - buf = &data[start & md->mask]; - size = md->mask +1 - (start & md->mask); - start += size; +if ((md->start & md->mask) + size != (md->end & md->mask)) { + buf = &data[md->start & md->mask]; + size = md->mask +1 - (md->start & md->mask); + md->start += size;if (push (to, buf, size) <0 ) { rc =-1 ;
@@ -306,9 +306,9 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite, } } - buf = &data[start & md->mask]; - size = end - start; - start += size; + buf = &data[md->start & md->mask]; + size = md->end - md->start; + md->start += size;if (push (to, buf, size) <0 ) { rc =-1 ;
@@ -316,7 +316,7 @@ int perf_mmap__push(struct perf_mmap *md, bool overwrite, } md->prev = head; -perf_mmap__consume (md, overwrite); +perf_mmap__consume (md, md->overwrite); out:return rc; }
tools/perf/util/mmap.h +2 -2
@@ -93,8 +93,8 @@ union perf_event *perf_mmap__read_event(struct perf_mmap *map,bool overwrite, u64 *startp, u64 end); -int perf_mmap__push (struct perf_mmap *md,bool backward, -void *to,int push (void *to,void *buf,size_t size)); +int perf_mmap__push (struct perf_mmap *md,void *to, +int push (void *to,void *buf,size_t size));size_t perf_mmap__mmap_len (struct perf_mmap *map);
PATCH v2 4/8 perf mmap: Using the stored data in perf_mmap__read_event
In reply to [email protected]From: Kan Liang <[email protected]>
Using the 'start', 'end' and 'overwrite' which are stored in struct perf_mmap to replace the parameters of perf_mmap__read_event(). The parameters will be discarded later.
No functional change.
---
Changes since V1:
- Remove old startp/overwrite/end.
tools/perf/util/mmap.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)
tools/perf/util/mmap.c +8 -10
@@ -76,8 +76,9 @@ static union perf_event *perf_mmap__read(struct perf_mmap *map,* perf_mmap__read_done() */ union perf_event *perf_mmap__read_event (struct perf_mmap *map, -bool overwrite, -u64 *startp,u64 end) +bool overwrite__maybe_unused , +u64 *startp__maybe_unused , +u64 end__maybe_unused ) {union perf_event *event;
@@ -87,17 +88,14 @@ union perf_event *perf_mmap__read_event(struct perf_mmap *map,if (!refcount_read (&map->refcnt))return NULL ; -if (startp ==NULL ) -return NULL ; -/* non-overwirte doesn't pause the ringbuffer */ -if (!overwrite) - end =perf_mmap__read_head (map); +if (!map->overwrite) + map->end =perf_mmap__read_head (map); - event =perf_mmap__read (map, startp, end); + event =perf_mmap__read (map, &map->start, map->end); -if (!overwrite) - map->prev = *startp; +if (!map->overwrite) + map->prev = map->start;return event; }
Signature · 1 line
2.4.11
tip-bot for Kan Liang
merge bot[tip:perf/core] perf mmap: Use the stored data in perf_mmap__read_event()
perf mmap: Use the stored data in perf_mmap__read_event()
Commit-ID: b9de0f6e507b2f0ee305aba338b79941deb5a461 Gitweb: https://git.kernel.org/tip/b9de0f6e507b2f0ee305aba338b79941deb5a461 Author: Kan Liang <[email protected]> AuthorDate: Tue, 6 Mar 2018 10:36:03 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 8 Mar 2018 10:05:51 -0300
perf mmap: Use the stored data in perf_mmap__read_event()
Using the 'start', 'end' and 'overwrite' which are stored in struct perf_mmap to replace the parameters of perf_mmap__read_event(). The parameters will be discarded later.
No functional change.
--- tools/perf/util/mmap.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)
tools/perf/util/mmap.c +8 -10
@@ -76,8 +76,9 @@ static union perf_event *perf_mmap__read(struct perf_mmap *map,* perf_mmap__read_done() */ union perf_event *perf_mmap__read_event (struct perf_mmap *map, -bool overwrite, -u64 *startp,u64 end) +bool overwrite__maybe_unused , +u64 *startp__maybe_unused , +u64 end__maybe_unused ) {union perf_event *event;
@@ -87,17 +88,14 @@ union perf_event *perf_mmap__read_event(struct perf_mmap *map,if (!refcount_read (&map->refcnt))return NULL ; -if (startp ==NULL ) -return NULL ; -/* non-overwirte doesn't pause the ringbuffer */ -if (!overwrite) - end =perf_mmap__read_head (map); +if (!map->overwrite) + map->end =perf_mmap__read_head (map); - event =perf_mmap__read (map, startp, end); + event =perf_mmap__read (map, &map->start, map->end); -if (!overwrite) - map->prev = *startp; +if (!map->overwrite) + map->prev = map->start;return event; }
PATCH v2 5/8 perf mmap: Using stored 'overwrite' in perf_mmap__consume
In reply to [email protected]From: Kan Liang <[email protected]>
The 'overwrite' is set at allocation. It will not be changed. Using it to replace the parameter of perf_mmap__consume(). The parameters will be discarded later.
No functional change.
---
No change since V1
tools/perf/util/mmap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/util/mmap.c +2 -2
@@ -118,9 +118,9 @@ void perf_mmap__put(struct perf_mmap *map)perf_mmap__munmap (map); } -void perf_mmap__consume (struct perf_mmap *map,bool overwrite) +void perf_mmap__consume (struct perf_mmap *map,bool overwrite__maybe_unused ) { -if (!overwrite) { +if (!map->overwrite) {u64 old = map->prev;perf_mmap__write_tail (map, old);
Signature · 1 line
2.4.11
tip-bot for Kan Liang
merge bot[tip:perf/core] perf mmap: Use stored 'overwrite' in perf_mmap__consume()
perf mmap: Use stored 'overwrite' in perf_mmap__consume()
Commit-ID: bdec8b2f7eed4f16b764ca258487d26f8079f5ff Gitweb: https://git.kernel.org/tip/bdec8b2f7eed4f16b764ca258487d26f8079f5ff Author: Kan Liang <[email protected]> AuthorDate: Tue, 6 Mar 2018 10:36:04 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 8 Mar 2018 10:05:52 -0300
perf mmap: Use stored 'overwrite' in perf_mmap__consume()
The 'overwrite' is set at allocation. It will not be changed. Using it to replace the parameter of perf_mmap__consume(). The parameters will be discarded later.
No functional change.
--- tools/perf/util/mmap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/util/mmap.c +2 -2
@@ -118,9 +118,9 @@ void perf_mmap__put(struct perf_mmap *map)perf_mmap__munmap (map); } -void perf_mmap__consume (struct perf_mmap *map,bool overwrite) +void perf_mmap__consume (struct perf_mmap *map,bool overwrite__maybe_unused ) { -if (!overwrite) { +if (!map->overwrite) {u64 old = map->prev;perf_mmap__write_tail (map, old);
PATCH v2 6/8 perf tools: Refine perf_mmap__consume
In reply to [email protected]From: Kan Liang <[email protected]>
It doesn't need to pass the 'overwrite' to perf_mmap__consume(). Discard the parameter.
---
No change since V1
tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 +- tools/perf/builtin-kvm.c | 4 ++-- tools/perf/builtin-top.c | 2 +- tools/perf/builtin-trace.c | 2 +- tools/perf/tests/code-reading.c | 2 +- tools/perf/tests/keep-tracking.c | 2 +- tools/perf/tests/mmap-basic.c | 2 +- tools/perf/tests/openat-syscall-tp-fields.c | 2 +- tools/perf/tests/perf-record.c | 2 +- tools/perf/tests/sw-clock.c | 2 +- tools/perf/tests/switch-tracking.c | 2 +- tools/perf/tests/task-exit.c | 2 +- tools/perf/util/mmap.c | 6 +++--- tools/perf/util/mmap.h | 2 +- tools/perf/util/python.c | 2 +- 15 files changed, 18 insertions(+), 18 deletions(-)
tools/perf/arch/x86/tests/perf-time-to-tsc.c +1 -1
@@ -134,7 +134,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe comm2_time = sample.time; } next_event: -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md); }
tools/perf/builtin-kvm.c +2 -2
@@ -760,7 +760,7 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { err =perf_evlist__parse_sample_timestamp (evlist, event, ×tamp);if (err) { -perf_mmap__consume (md, false); +perf_mmap__consume (md);pr_err ("Failed to parse sample\n" );return -1 ; }
@@ -770,7 +770,7 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,* FIXME: Here we can't consume the event, as perf_session__queue_event will * point to it, and it'll get possibly overwritten by the kernel. */ -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (err) {pr_err ("Failed to enqueue sample: %d\n" , err);
tools/perf/builtin-top.c +1 -1
@@ -879,7 +879,7 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx) }else ++session->evlist->stats.nr_unknown_events; next_event: -perf_mmap__consume (md, opts->overwrite); +perf_mmap__consume (md); }perf_mmap__read_done (md);
tools/perf/builtin-trace.c +1 -1
@@ -2492,7 +2492,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)trace__handle_event (trace, event, &sample); next_event: -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (interrupted) goto out_disable;
tools/perf/tests/code-reading.c +1 -1
@@ -420,7 +420,7 @@ static int process_events(struct machine *machine, struct perf_evlist *evlist,while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { ret =process_event (machine, evlist, event, state); -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (ret <0 )return ret; }
tools/perf/tests/keep-tracking.c +1 -1
@@ -42,7 +42,7 @@ static int find_comm(struct perf_evlist *evlist, const char *comm) (pid_t)event->comm.tid == getpid() && strcmp(event->comm.comm, comm) == 0) found +=1 ; -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md); }
tools/perf/tests/mmap-basic.c +1 -1
@@ -135,7 +135,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse goto out_delete_evlist; } nr_events[evsel->idx]++; -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md);
tools/perf/tests/openat-syscall-tp-fields.c +1 -1
@@ -101,7 +101,7 @@ int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtest ++nr_events;if (type !=PERF_RECORD_SAMPLE ) { -perf_mmap__consume (md, false); +perf_mmap__consume (md);continue ; }
tools/perf/tests/perf-record.c +1 -1
@@ -272,7 +272,7 @@ int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unus ++errs; } -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md); }
tools/perf/tests/sw-clock.c +1 -1
@@ -114,7 +114,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) total_periods += sample.period; nr_samples++; next_event: -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md);
tools/perf/tests/switch-tracking.c +1 -1
@@ -270,7 +270,7 @@ static int process_events(struct perf_evlist *evlist,while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { cnt +=1 ; ret =add_event (evlist, &events, event); -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (ret <0 ) goto out_free_nodes; }
tools/perf/tests/task-exit.c +1 -1
@@ -120,7 +120,7 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unusedif (event->header.type ==PERF_RECORD_EXIT ) nr_exit++; -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md);
tools/perf/util/mmap.c +3 -3
@@ -118,7 +118,7 @@ void perf_mmap__put(struct perf_mmap *map)perf_mmap__munmap (map); } -void perf_mmap__consume (struct perf_mmap *map,bool overwrite__maybe_unused ) +void perf_mmap__consume (struct perf_mmap *map) {if (!map->overwrite) {u64 old = map->prev;
@@ -260,7 +260,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,WARN_ONCE (1 ,"failed to keep up with mmap data. (warn only once)\n" ); md->prev = head; -perf_mmap__consume (md, overwrite); +perf_mmap__consume (md);return -EAGAIN ; }
@@ -314,7 +314,7 @@ int perf_mmap__push(struct perf_mmap *md, void *to, } md->prev = head; -perf_mmap__consume (md, md->overwrite); +perf_mmap__consume (md); out:return rc; }
tools/perf/util/mmap.h +1 -1
@@ -66,7 +66,7 @@ void perf_mmap__munmap(struct perf_mmap *map);void perf_mmap__get (struct perf_mmap *map);void perf_mmap__put (struct perf_mmap *map); -void perf_mmap__consume (struct perf_mmap *map,bool overwrite); +void perf_mmap__consume (struct perf_mmap *map);static inline u64 perf_mmap__read_head (struct perf_mmap *mm) {
tools/perf/util/python.c +1 -1
@@ -1013,7 +1013,7 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist, err =perf_evsel__parse_sample (evsel, event, &pevent->sample);/* Consume the even only after we parsed it out. */ -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (err) return PyErr_Format(PyExc_OSError,
Signature · 1 line
2.4.11
tip-bot for Kan Liang
merge bot[tip:perf/core] perf mmap: Simplify perf_mmap__consume()
perf mmap: Simplify perf_mmap__consume()
Commit-ID: d6ace3df43049a46aa1f5596c0c8d75433321437 Gitweb: https://git.kernel.org/tip/d6ace3df43049a46aa1f5596c0c8d75433321437 Author: Kan Liang <[email protected]> AuthorDate: Tue, 6 Mar 2018 10:36:05 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 8 Mar 2018 10:05:52 -0300
perf mmap: Simplify perf_mmap__consume()
It isn't necessary to pass the 'overwrite' argument to perf_mmap__consume(). Discard it.
--- tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 +- tools/perf/builtin-kvm.c | 4 ++-- tools/perf/builtin-top.c | 2 +- tools/perf/builtin-trace.c | 2 +- tools/perf/tests/code-reading.c | 2 +- tools/perf/tests/keep-tracking.c | 2 +- tools/perf/tests/mmap-basic.c | 2 +- tools/perf/tests/openat-syscall-tp-fields.c | 2 +- tools/perf/tests/perf-record.c | 2 +- tools/perf/tests/sw-clock.c | 2 +- tools/perf/tests/switch-tracking.c | 2 +- tools/perf/tests/task-exit.c | 2 +- tools/perf/util/mmap.c | 6 +++--- tools/perf/util/mmap.h | 2 +- tools/perf/util/python.c | 2 +- 15 files changed, 18 insertions(+), 18 deletions(-)
tools/perf/arch/x86/tests/perf-time-to-tsc.c +1 -1
@@ -134,7 +134,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybe comm2_time = sample.time; } next_event: -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md); }
tools/perf/builtin-kvm.c +2 -2
@@ -760,7 +760,7 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { err =perf_evlist__parse_sample_timestamp (evlist, event, ×tamp);if (err) { -perf_mmap__consume (md, false); +perf_mmap__consume (md);pr_err ("Failed to parse sample\n" );return -1 ; }
@@ -770,7 +770,7 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,* FIXME: Here we can't consume the event, as perf_session__queue_event will * point to it, and it'll get possibly overwritten by the kernel. */ -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (err) {pr_err ("Failed to enqueue sample: %d\n" , err);
tools/perf/builtin-top.c +1 -1
@@ -879,7 +879,7 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx) }else ++session->evlist->stats.nr_unknown_events; next_event: -perf_mmap__consume (md, opts->overwrite); +perf_mmap__consume (md); }perf_mmap__read_done (md);
tools/perf/builtin-trace.c +1 -1
@@ -2522,7 +2522,7 @@ again:trace__handle_event (trace, event, &sample); next_event: -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (interrupted) goto out_disable;
tools/perf/tests/code-reading.c +1 -1
@@ -420,7 +420,7 @@ static int process_events(struct machine *machine, struct perf_evlist *evlist,while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { ret =process_event (machine, evlist, event, state); -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (ret <0 )return ret; }
tools/perf/tests/keep-tracking.c +1 -1
@@ -42,7 +42,7 @@ static int find_comm(struct perf_evlist *evlist, const char *comm) (pid_t)event->comm.tid == getpid() && strcmp(event->comm.comm, comm) == 0) found +=1 ; -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md); }
tools/perf/tests/mmap-basic.c +1 -1
@@ -135,7 +135,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse goto out_delete_evlist; } nr_events[evsel->idx]++; -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md);
tools/perf/tests/openat-syscall-tp-fields.c +1 -1
@@ -101,7 +101,7 @@ int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtest ++nr_events;if (type !=PERF_RECORD_SAMPLE ) { -perf_mmap__consume (md, false); +perf_mmap__consume (md);continue ; }
tools/perf/tests/perf-record.c +1 -1
@@ -272,7 +272,7 @@ int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unus ++errs; } -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md); }
tools/perf/tests/sw-clock.c +1 -1
@@ -114,7 +114,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id) total_periods += sample.period; nr_samples++; next_event: -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md);
tools/perf/tests/switch-tracking.c +1 -1
@@ -270,7 +270,7 @@ static int process_events(struct perf_evlist *evlist,while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { cnt +=1 ; ret =add_event (evlist, &events, event); -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (ret <0 ) goto out_free_nodes; }
tools/perf/tests/task-exit.c +1 -1
@@ -120,7 +120,7 @@ retry:if (event->header.type ==PERF_RECORD_EXIT ) nr_exit++; -perf_mmap__consume (md, false); +perf_mmap__consume (md); }perf_mmap__read_done (md);
tools/perf/util/mmap.c +3 -3
@@ -118,7 +118,7 @@ void perf_mmap__put(struct perf_mmap *map)perf_mmap__munmap (map); } -void perf_mmap__consume (struct perf_mmap *map,bool overwrite__maybe_unused ) +void perf_mmap__consume (struct perf_mmap *map) {if (!map->overwrite) {u64 old = map->prev;
@@ -260,7 +260,7 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,WARN_ONCE (1 ,"failed to keep up with mmap data. (warn only once)\n" ); md->prev = head; -perf_mmap__consume (md, overwrite); +perf_mmap__consume (md);return -EAGAIN ; }
@@ -314,7 +314,7 @@ int perf_mmap__push(struct perf_mmap *md, void *to, } md->prev = head; -perf_mmap__consume (md, md->overwrite); +perf_mmap__consume (md); out:return rc; }
tools/perf/util/mmap.h +1 -1
@@ -66,7 +66,7 @@ void perf_mmap__munmap(struct perf_mmap *map);void perf_mmap__get (struct perf_mmap *map);void perf_mmap__put (struct perf_mmap *map); -void perf_mmap__consume (struct perf_mmap *map,bool overwrite); +void perf_mmap__consume (struct perf_mmap *map);static inline u64 perf_mmap__read_head (struct perf_mmap *mm) {
tools/perf/util/python.c +1 -1
@@ -1013,7 +1013,7 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist, err =perf_evsel__parse_sample (evsel, event, &pevent->sample);/* Consume the even only after we parsed it out. */ -perf_mmap__consume (md, false); +perf_mmap__consume (md);if (err) return PyErr_Format(PyExc_OSError,
PATCH v2 7/8 perf tools: Refine perf_mmap__read_event
In reply to [email protected]From: Kan Liang <[email protected]>
It doesn't need to pass the 'overwrite', 'start' and 'end' to perf_mmap__read_event.
Discard the parameters.
---
No change since V1
tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 +- tools/perf/builtin-kvm.c | 2 +- tools/perf/builtin-top.c | 2 +- tools/perf/builtin-trace.c | 2 +- tools/perf/tests/backward-ring-buffer.c | 2 +- tools/perf/tests/bpf.c | 2 +- tools/perf/tests/code-reading.c | 2 +- tools/perf/tests/keep-tracking.c | 2 +- tools/perf/tests/mmap-basic.c | 2 +- tools/perf/tests/openat-syscall-tp-fields.c | 2 +- tools/perf/tests/perf-record.c | 2 +- tools/perf/tests/sw-clock.c | 2 +- tools/perf/tests/switch-tracking.c | 2 +- tools/perf/tests/task-exit.c | 2 +- tools/perf/util/mmap.c | 5 +---- tools/perf/util/mmap.h | 4 +--- tools/perf/util/python.c | 2 +- 17 files changed, 17 insertions(+), 22 deletions(-)
tools/perf/arch/x86/tests/perf-time-to-tsc.c +1 -1
@@ -115,7 +115,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybeif (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {struct perf_sample sample; if (event->header.type != PERF_RECORD_COMM ||
tools/perf/builtin-kvm.c +1 -1
@@ -757,7 +757,7 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,if (err <0 )return (err == -EAGAIN ) ?0 :-1 ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { err =perf_evlist__parse_sample_timestamp (evlist, event, ×tamp);if (err) {perf_mmap__consume (md);
tools/perf/builtin-top.c +1 -1
@@ -824,7 +824,7 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)if (perf_mmap__read_init (md, opts->overwrite, &start, &end) <0 )return ; -while ((event =perf_mmap__read_event (md, opts->overwrite, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { ret =perf_evlist__parse_sample (evlist, event, &sample);if (ret) {pr_err ("Can't parse sample, err = %d\n" , ret);
tools/perf/builtin-trace.c +1 -1
@@ -2479,7 +2479,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {struct perf_sample sample; ++trace->nr_events;
tools/perf/tests/backward-ring-buffer.c +1 -1
@@ -36,7 +36,7 @@ static int count_samples(struct perf_evlist *evlist, int *sample_count,u64 start, end;perf_mmap__read_init (map, true, &start, &end); -while ((event =perf_mmap__read_event (map, true, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (map)) !=NULL ) {const u32 type = event->header.type;switch (type) {
tools/perf/tests/bpf.c +1 -1
@@ -183,7 +183,7 @@ static int do_test(struct bpf_object *obj, int (*func)(void),if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {const u32 type = event->header.type;if (type ==PERF_RECORD_SAMPLE )
tools/perf/tests/code-reading.c +1 -1
@@ -418,7 +418,7 @@ static int process_events(struct machine *machine, struct perf_evlist *evlist,if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { ret =process_event (machine, evlist, event, state);perf_mmap__consume (md);if (ret <0 )
tools/perf/tests/keep-tracking.c +1 -1
@@ -36,7 +36,7 @@ static int find_comm(struct perf_evlist *evlist, const char *comm) md = &evlist->mmap[i];if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { if (event->header.type == PERF_RECORD_COMM && (pid_t)event->comm.pid == getpid() && (pid_t)event->comm.tid == getpid() &&
tools/perf/tests/mmap-basic.c +1 -1
@@ -112,7 +112,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuseif (perf_mmap__read_init (md, false, &start, &end) <0 ) goto out_init; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {struct perf_sample sample;if (event->header.type !=PERF_RECORD_SAMPLE ) {
tools/perf/tests/openat-syscall-tp-fields.c +1 -1
@@ -93,7 +93,7 @@ int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtestif (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {const u32 type = event->header.type;int tp_flags;struct perf_sample sample;
tools/perf/tests/perf-record.c +1 -1
@@ -171,7 +171,7 @@ int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unusif (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {const u32 type = event->header.type;const char *name =perf_event__name (type);
tools/perf/tests/sw-clock.c +1 -1
@@ -99,7 +99,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)if (perf_mmap__read_init (md, false, &start, &end) <0 ) goto out_init; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {struct perf_sample sample;if (event->header.type !=PERF_RECORD_SAMPLE )
tools/perf/tests/switch-tracking.c +1 -1
@@ -267,7 +267,7 @@ static int process_events(struct perf_evlist *evlist,if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { cnt +=1 ; ret =add_event (evlist, &events, event);perf_mmap__consume (md);
tools/perf/tests/task-exit.c +1 -1
@@ -116,7 +116,7 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unusedif (perf_mmap__read_init (md, false, &start, &end) <0 ) goto out_init; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {if (event->header.type ==PERF_RECORD_EXIT ) nr_exit++;
tools/perf/util/mmap.c +1 -4
@@ -75,10 +75,7 @@ static union perf_event *perf_mmap__read(struct perf_mmap *map,* } * perf_mmap__read_done() */ -union perf_event *perf_mmap__read_event (struct perf_mmap *map, -bool overwrite__maybe_unused , -u64 *startp__maybe_unused , -u64 end__maybe_unused ) +union perf_event *perf_mmap__read_event (struct perf_mmap *map) {union perf_event *event;
tools/perf/util/mmap.h +1 -3
@@ -89,9 +89,7 @@ static inline void perf_mmap__write_tail(struct perf_mmap *md, u64 tail)union perf_event *perf_mmap__read_forward (struct perf_mmap *map); -union perf_event *perf_mmap__read_event (struct perf_mmap *map, -bool overwrite, -u64 *startp,u64 end); +union perf_event *perf_mmap__read_event (struct perf_mmap *map);int perf_mmap__push (struct perf_mmap *md,void *to,int push (void *to,void *buf,size_t size));
tools/perf/util/python.c +1 -1
@@ -995,7 +995,7 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,if (perf_mmap__read_init (md, false, &start, &end) <0 ) goto end; - event =perf_mmap__read_event (md, false, &start, end); + event =perf_mmap__read_event (md);if (event !=NULL ) {PyObject *pyevent =pyrf_event__new (event);struct pyrf_event *pevent = (struct pyrf_event *)pyevent;
Signature · 1 line
2.4.11
tip-bot for Kan Liang
merge bot[tip:perf/core] perf mmap: Simplify perf_mmap__read_event()
perf mmap: Simplify perf_mmap__read_event()
Commit-ID: 0019dc87b928380e2c85fcd8694e512079d7b580 Gitweb: https://git.kernel.org/tip/0019dc87b928380e2c85fcd8694e512079d7b580 Author: Kan Liang <[email protected]> AuthorDate: Tue, 6 Mar 2018 10:36:06 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 8 Mar 2018 10:05:53 -0300
perf mmap: Simplify perf_mmap__read_event()
It isn't necessary to pass the 'overwrite', 'start' and 'end' argument to perf_mmap__read_event(). Discard them.
--- tools/perf/arch/x86/tests/perf-time-to-tsc.c | 2 +- tools/perf/builtin-kvm.c | 2 +- tools/perf/builtin-top.c | 2 +- tools/perf/builtin-trace.c | 2 +- tools/perf/tests/backward-ring-buffer.c | 2 +- tools/perf/tests/bpf.c | 2 +- tools/perf/tests/code-reading.c | 2 +- tools/perf/tests/keep-tracking.c | 2 +- tools/perf/tests/mmap-basic.c | 2 +- tools/perf/tests/openat-syscall-tp-fields.c | 2 +- tools/perf/tests/perf-record.c | 2 +- tools/perf/tests/sw-clock.c | 2 +- tools/perf/tests/switch-tracking.c | 2 +- tools/perf/tests/task-exit.c | 2 +- tools/perf/util/mmap.c | 5 +---- tools/perf/util/mmap.h | 4 +--- tools/perf/util/python.c | 2 +- 17 files changed, 17 insertions(+), 22 deletions(-)
tools/perf/arch/x86/tests/perf-time-to-tsc.c +1 -1
@@ -115,7 +115,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybeif (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {struct perf_sample sample; if (event->header.type != PERF_RECORD_COMM ||
tools/perf/builtin-kvm.c +1 -1
@@ -757,7 +757,7 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,if (err <0 )return (err == -EAGAIN ) ?0 :-1 ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { err =perf_evlist__parse_sample_timestamp (evlist, event, ×tamp);if (err) {perf_mmap__consume (md);
tools/perf/builtin-top.c +1 -1
@@ -824,7 +824,7 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)if (perf_mmap__read_init (md, opts->overwrite, &start, &end) <0 )return ; -while ((event =perf_mmap__read_event (md, opts->overwrite, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { ret =perf_evlist__parse_sample (evlist, event, &sample);if (ret) {pr_err ("Can't parse sample, err = %d\n" , ret);
tools/perf/builtin-trace.c +1 -1
@@ -2509,7 +2509,7 @@ again:if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {struct perf_sample sample; ++trace->nr_events;
tools/perf/tests/backward-ring-buffer.c +1 -1
@@ -36,7 +36,7 @@ static int count_samples(struct perf_evlist *evlist, int *sample_count,u64 start, end;perf_mmap__read_init (map, true, &start, &end); -while ((event =perf_mmap__read_event (map, true, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (map)) !=NULL ) {const u32 type = event->header.type;switch (type) {
tools/perf/tests/bpf.c +1 -1
@@ -183,7 +183,7 @@ static int do_test(struct bpf_object *obj, int (*func)(void),if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {const u32 type = event->header.type;if (type ==PERF_RECORD_SAMPLE )
tools/perf/tests/code-reading.c +1 -1
@@ -418,7 +418,7 @@ static int process_events(struct machine *machine, struct perf_evlist *evlist,if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { ret =process_event (machine, evlist, event, state);perf_mmap__consume (md);if (ret <0 )
tools/perf/tests/keep-tracking.c +1 -1
@@ -36,7 +36,7 @@ static int find_comm(struct perf_evlist *evlist, const char *comm) md = &evlist->mmap[i];if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { if (event->header.type == PERF_RECORD_COMM && (pid_t)event->comm.pid == getpid() && (pid_t)event->comm.tid == getpid() &&
tools/perf/tests/mmap-basic.c +1 -1
@@ -112,7 +112,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuseif (perf_mmap__read_init (md, false, &start, &end) <0 ) goto out_init; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {struct perf_sample sample;if (event->header.type !=PERF_RECORD_SAMPLE ) {
tools/perf/tests/openat-syscall-tp-fields.c +1 -1
@@ -93,7 +93,7 @@ int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtestif (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {const u32 type = event->header.type;int tp_flags;struct perf_sample sample;
tools/perf/tests/perf-record.c +1 -1
@@ -171,7 +171,7 @@ int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unusif (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {const u32 type = event->header.type;const char *name =perf_event__name (type);
tools/perf/tests/sw-clock.c +1 -1
@@ -99,7 +99,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)if (perf_mmap__read_init (md, false, &start, &end) <0 ) goto out_init; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {struct perf_sample sample;if (event->header.type !=PERF_RECORD_SAMPLE )
tools/perf/tests/switch-tracking.c +1 -1
@@ -267,7 +267,7 @@ static int process_events(struct perf_evlist *evlist,if (perf_mmap__read_init (md, false, &start, &end) <0 )continue ; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) { cnt +=1 ; ret =add_event (evlist, &events, event);perf_mmap__consume (md);
tools/perf/tests/task-exit.c +1 -1
@@ -116,7 +116,7 @@ retry:if (perf_mmap__read_init (md, false, &start, &end) <0 ) goto out_init; -while ((event =perf_mmap__read_event (md, false, &start, end)) !=NULL ) { +while ((event =perf_mmap__read_event (md)) !=NULL ) {if (event->header.type ==PERF_RECORD_EXIT ) nr_exit++;
tools/perf/util/mmap.c +1 -4
@@ -75,10 +75,7 @@ static union perf_event *perf_mmap__read(struct perf_mmap *map,* } * perf_mmap__read_done() */ -union perf_event *perf_mmap__read_event (struct perf_mmap *map, -bool overwrite__maybe_unused , -u64 *startp__maybe_unused , -u64 end__maybe_unused ) +union perf_event *perf_mmap__read_event (struct perf_mmap *map) {union perf_event *event;
tools/perf/util/mmap.h +1 -3
@@ -89,9 +89,7 @@ static inline void perf_mmap__write_tail(struct perf_mmap *md, u64 tail)union perf_event *perf_mmap__read_forward (struct perf_mmap *map); -union perf_event *perf_mmap__read_event (struct perf_mmap *map, -bool overwrite, -u64 *startp,u64 end); +union perf_event *perf_mmap__read_event (struct perf_mmap *map);int perf_mmap__push (struct perf_mmap *md,void *to,int push (void *to,void *buf,size_t size));
tools/perf/util/python.c +1 -1
@@ -995,7 +995,7 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,if (perf_mmap__read_init (md, false, &start, &end) <0 ) goto end; - event =perf_mmap__read_event (md, false, &start, end); + event =perf_mmap__read_event (md);if (event !=NULL ) {PyObject *pyevent =pyrf_event__new (event);struct pyrf_event *pevent = (struct pyrf_event *)pyevent;
PATCH v2 8/8 perf tools: Refine perf_mmap__read_init
In reply to [email protected]From: Kan Liang <[email protected]>
It doesn't need to pass the 'start', 'end' and 'overwrite' to perf_mmap__read_init().
The data is stored in the struct perf_mmap.
Discard the parameters.
---
Changes since V1:
- Remove the parameter 'overwrite'.
tools/perf/arch/x86/tests/perf-time-to-tsc.c | 3 +-- tools/perf/builtin-kvm.c | 3 +-- tools/perf/builtin-top.c | 3 +-- tools/perf/builtin-trace.c | 3 +-- tools/perf/tests/backward-ring-buffer.c | 3 +-- tools/perf/tests/bpf.c | 3 +-- tools/perf/tests/code-reading.c | 3 +-- tools/perf/tests/keep-tracking.c | 3 +-- tools/perf/tests/mmap-basic.c | 3 +-- tools/perf/tests/openat-syscall-tp-fields.c | 3 +-- tools/perf/tests/perf-record.c | 3 +-- tools/perf/tests/sw-clock.c | 3 +-- tools/perf/tests/switch-tracking.c | 3 +-- tools/perf/tests/task-exit.c | 3 +-- tools/perf/util/mmap.c | 10 ++-------- tools/perf/util/mmap.h | 3 +-- tools/perf/util/python.c | 3 +-- 17 files changed, 18 insertions(+), 40 deletions(-)
tools/perf/arch/x86/tests/perf-time-to-tsc.c +1 -2
@@ -61,7 +61,6 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybeu64 test_tsc, comm1_tsc, comm2_tsc;u64 test_time, comm1_time =0 , comm2_time =0 ;struct perf_mmap *md; -u64 end, start; threads =thread_map__new (-1 ,getpid (),UINT_MAX );CHECK_NOT_NULL__ (threads);
@@ -112,7 +111,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybefor (i =0 ; i < evlist->nr_mmaps; i++) { md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/builtin-kvm.c +1 -2
@@ -746,14 +746,13 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,struct perf_evlist *evlist = kvm->evlist;union perf_event *event;struct perf_mmap *md; -u64 end, start;u64 timestamp;s64 n =0 ;int err; *mmap_time =ULLONG_MAX ; md = &evlist->mmap[idx]; - err =perf_mmap__read_init (md, false, &start, &end); + err =perf_mmap__read_init (md);if (err <0 )return (err == -EAGAIN ) ?0 :-1 ;
tools/perf/builtin-top.c +1 -2
@@ -817,11 +817,10 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)struct perf_session *session = top->session;union perf_event *event;struct machine *machine; -u64 end, start;int ret; md = opts->overwrite ? &evlist->overwrite_mmap[idx] : &evlist->mmap[idx]; -if (perf_mmap__read_init (md, opts->overwrite, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )return ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/builtin-trace.c +1 -2
@@ -2473,10 +2473,9 @@ static int trace__run(struct trace *trace, int argc, const char **argv)for (i =0 ; i < evlist->nr_mmaps; i++) {union perf_event *event;struct perf_mmap *md; -u64 end, start; md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/backward-ring-buffer.c +1 -2
@@ -33,9 +33,8 @@ static int count_samples(struct perf_evlist *evlist, int *sample_count,for (i =0 ; i < evlist->nr_mmaps; i++) {struct perf_mmap *map = &evlist->overwrite_mmap[i];union perf_event *event; -u64 start, end; -perf_mmap__read_init (map, true, &start, &end); +perf_mmap__read_init (map);while ((event =perf_mmap__read_event (map)) !=NULL ) {const u32 type = event->header.type;
tools/perf/tests/bpf.c +1 -2
@@ -177,10 +177,9 @@ static int do_test(struct bpf_object *obj, int (*func)(void),for (i =0 ; i < evlist->nr_mmaps; i++) {union perf_event *event;struct perf_mmap *md; -u64 end, start; md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/code-reading.c +1 -2
@@ -410,12 +410,11 @@ static int process_events(struct machine *machine, struct perf_evlist *evlist, {union perf_event *event;struct perf_mmap *md; -u64 end, start;int i, ret;for (i =0 ; i < evlist->nr_mmaps; i++) { md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/keep-tracking.c +1 -2
@@ -28,13 +28,12 @@ static int find_comm(struct perf_evlist *evlist, const char *comm) {union perf_event *event;struct perf_mmap *md; -u64 end, start;int i, found; found =0 ;for (i =0 ; i < evlist->nr_mmaps; i++) { md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) { if (event->header.type == PERF_RECORD_COMM &&
tools/perf/tests/mmap-basic.c +1 -2
@@ -39,7 +39,6 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unusestruct perf_evsel *evsels[nsyscalls], *evsel;char sbuf[STRERR_BUFSIZE ];struct perf_mmap *md; -u64 end, start; threads =thread_map__new (-1 ,getpid (),UINT_MAX );if (threads ==NULL ) {
@@ -109,7 +108,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse } md = &evlist->mmap[0 ]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 ) goto out_init;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/openat-syscall-tp-fields.c +1 -2
@@ -87,10 +87,9 @@ int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtestfor (i =0 ; i < evlist->nr_mmaps; i++) {union perf_event *event;struct perf_mmap *md; -u64 end, start; md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/perf-record.c +1 -2
@@ -165,10 +165,9 @@ int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unusfor (i =0 ; i < evlist->nr_mmaps; i++) {union perf_event *event;struct perf_mmap *md; -u64 end, start; md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/sw-clock.c +1 -2
@@ -40,7 +40,6 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)struct cpu_map *cpus;struct thread_map *threads;struct perf_mmap *md; -u64 end, start; attr.sample_freq =500 ;
@@ -96,7 +95,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)perf_evlist__disable (evlist); md = &evlist->mmap[0 ]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 ) goto out_init;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/switch-tracking.c +1 -2
@@ -259,12 +259,11 @@ static int process_events(struct perf_evlist *evlist,LIST_HEAD (events);struct event_node *events_array, *node;struct perf_mmap *md; -u64 end, start;int i, ret;for (i =0 ; i < evlist->nr_mmaps; i++) { md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/task-exit.c +1 -2
@@ -48,7 +48,6 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unusedstruct cpu_map *cpus;struct thread_map *threads;struct perf_mmap *md; -u64 end, start;signal (SIGCHLD , sig_handler);
@@ -113,7 +112,7 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused retry: md = &evlist->mmap[0 ]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 ) goto out_init;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/util/mmap.c +2 -8
@@ -235,16 +235,13 @@ static int overwrite_rb_find_range(void *buf, int mask, u64 head, u64 *start, u6/* * Report the start and end of the available data in ringbuffer */ -int perf_mmap__read_init (struct perf_mmap *md,bool overwrite, -u64 *startp,u64 *endp) +int perf_mmap__read_init (struct perf_mmap *md) {u64 head =perf_mmap__read_head (md);u64 old = md->prev;unsigned char *data = md->base + page_size;unsigned long size; - *startp = overwrite ? head : old; - *endp = overwrite ? old : head; md->start = md->overwrite ? head : old; md->end = md->overwrite ? old : head;
@@ -267,8 +264,6 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,*/ if (overwrite_rb_find_range (data, md->mask, head, &md->start, &md->end))return -EINVAL ; - *startp = md->start; - *endp = md->end; }return 0 ;
@@ -278,13 +273,12 @@ int perf_mmap__push(struct perf_mmap *md, void *to, int push(void *to, void *buf, size_t size)) {u64 head =perf_mmap__read_head (md); -u64 end, start;unsigned char *data = md->base + page_size;unsigned long size;void *buf;int rc =0 ; - rc =perf_mmap__read_init (md, md->overwrite, &start, &end); + rc =perf_mmap__read_init (md);if (rc <0 )return (rc == -EAGAIN ) ?0 :-1 ;
tools/perf/util/mmap.h +1 -2
@@ -96,7 +96,6 @@ int perf_mmap__push(struct perf_mmap *md, void *to,size_t perf_mmap__mmap_len (struct perf_mmap *map); -int perf_mmap__read_init (struct perf_mmap *md,bool overwrite, -u64 *startp,u64 *endp); +int perf_mmap__read_init (struct perf_mmap *md);void perf_mmap__read_done (struct perf_mmap *map);#endif /*__PERF_MMAP_H */
tools/perf/util/python.c +1 -2
@@ -984,7 +984,6 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,int sample_id_all =1 , cpu;static char *kwlist[] = {"cpu" ,"sample_id_all" ,NULL };struct perf_mmap *md; -u64 end, start;int err; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i", kwlist,
@@ -992,7 +991,7 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,return NULL ; md = &evlist->mmap[cpu]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 ) goto end; event =perf_mmap__read_event (md);
Signature · 1 line
2.4.11
tip-bot for Kan Liang
merge bot[tip:perf/core] perf mmap: Simplify perf_mmap__read_init()
perf mmap: Simplify perf_mmap__read_init()
Commit-ID: b9bae2c841b73eac6bfed510bc24a3051754ff51 Gitweb: https://git.kernel.org/tip/b9bae2c841b73eac6bfed510bc24a3051754ff51 Author: Kan Liang <[email protected]> AuthorDate: Tue, 6 Mar 2018 10:36:07 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 8 Mar 2018 10:05:53 -0300
perf mmap: Simplify perf_mmap__read_init()
It isn't necessary to pass the 'start', 'end' and 'overwrite' arguments to perf_mmap__read_init(). The data is stored in the struct perf_mmap.
Discard the parameters.
--- tools/perf/arch/x86/tests/perf-time-to-tsc.c | 3 +-- tools/perf/builtin-kvm.c | 3 +-- tools/perf/builtin-top.c | 3 +-- tools/perf/builtin-trace.c | 3 +-- tools/perf/tests/backward-ring-buffer.c | 3 +-- tools/perf/tests/bpf.c | 3 +-- tools/perf/tests/code-reading.c | 3 +-- tools/perf/tests/keep-tracking.c | 3 +-- tools/perf/tests/mmap-basic.c | 3 +-- tools/perf/tests/openat-syscall-tp-fields.c | 3 +-- tools/perf/tests/perf-record.c | 3 +-- tools/perf/tests/sw-clock.c | 3 +-- tools/perf/tests/switch-tracking.c | 3 +-- tools/perf/tests/task-exit.c | 3 +-- tools/perf/util/mmap.c | 10 ++-------- tools/perf/util/mmap.h | 3 +-- tools/perf/util/python.c | 3 +-- 17 files changed, 18 insertions(+), 40 deletions(-)
tools/perf/arch/x86/tests/perf-time-to-tsc.c +1 -2
@@ -61,7 +61,6 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybeu64 test_tsc, comm1_tsc, comm2_tsc;u64 test_time, comm1_time =0 , comm2_time =0 ;struct perf_mmap *md; -u64 end, start; threads =thread_map__new (-1 ,getpid (),UINT_MAX );CHECK_NOT_NULL__ (threads);
@@ -112,7 +111,7 @@ int test__perf_time_to_tsc(struct test *test __maybe_unused, int subtest __maybefor (i =0 ; i < evlist->nr_mmaps; i++) { md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/builtin-kvm.c +1 -2
@@ -746,14 +746,13 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,struct perf_evlist *evlist = kvm->evlist;union perf_event *event;struct perf_mmap *md; -u64 end, start;u64 timestamp;s64 n =0 ;int err; *mmap_time =ULLONG_MAX ; md = &evlist->mmap[idx]; - err =perf_mmap__read_init (md, false, &start, &end); + err =perf_mmap__read_init (md);if (err <0 )return (err == -EAGAIN ) ?0 :-1 ;
tools/perf/builtin-top.c +1 -2
@@ -817,11 +817,10 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)struct perf_session *session = top->session;union perf_event *event;struct machine *machine; -u64 end, start;int ret; md = opts->overwrite ? &evlist->overwrite_mmap[idx] : &evlist->mmap[idx]; -if (perf_mmap__read_init (md, opts->overwrite, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )return ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/builtin-trace.c +1 -2
@@ -2503,10 +2503,9 @@ again:for (i =0 ; i < evlist->nr_mmaps; i++) {union perf_event *event;struct perf_mmap *md; -u64 end, start; md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/backward-ring-buffer.c +1 -2
@@ -33,9 +33,8 @@ static int count_samples(struct perf_evlist *evlist, int *sample_count,for (i =0 ; i < evlist->nr_mmaps; i++) {struct perf_mmap *map = &evlist->overwrite_mmap[i];union perf_event *event; -u64 start, end; -perf_mmap__read_init (map, true, &start, &end); +perf_mmap__read_init (map);while ((event =perf_mmap__read_event (map)) !=NULL ) {const u32 type = event->header.type;
tools/perf/tests/bpf.c +1 -2
@@ -177,10 +177,9 @@ static int do_test(struct bpf_object *obj, int (*func)(void),for (i =0 ; i < evlist->nr_mmaps; i++) {union perf_event *event;struct perf_mmap *md; -u64 end, start; md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/code-reading.c +1 -2
@@ -410,12 +410,11 @@ static int process_events(struct machine *machine, struct perf_evlist *evlist, {union perf_event *event;struct perf_mmap *md; -u64 end, start;int i, ret;for (i =0 ; i < evlist->nr_mmaps; i++) { md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/keep-tracking.c +1 -2
@@ -28,13 +28,12 @@ static int find_comm(struct perf_evlist *evlist, const char *comm) {union perf_event *event;struct perf_mmap *md; -u64 end, start;int i, found; found =0 ;for (i =0 ; i < evlist->nr_mmaps; i++) { md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) { if (event->header.type == PERF_RECORD_COMM &&
tools/perf/tests/mmap-basic.c +1 -2
@@ -39,7 +39,6 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unusestruct perf_evsel *evsels[nsyscalls], *evsel;char sbuf[STRERR_BUFSIZE ];struct perf_mmap *md; -u64 end, start; threads =thread_map__new (-1 ,getpid (),UINT_MAX );if (threads ==NULL ) {
@@ -109,7 +108,7 @@ int test__basic_mmap(struct test *test __maybe_unused, int subtest __maybe_unuse } md = &evlist->mmap[0 ]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 ) goto out_init;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/openat-syscall-tp-fields.c +1 -2
@@ -87,10 +87,9 @@ int test__syscall_openat_tp_fields(struct test *test __maybe_unused, int subtestfor (i =0 ; i < evlist->nr_mmaps; i++) {union perf_event *event;struct perf_mmap *md; -u64 end, start; md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/perf-record.c +1 -2
@@ -165,10 +165,9 @@ int test__PERF_RECORD(struct test *test __maybe_unused, int subtest __maybe_unusfor (i =0 ; i < evlist->nr_mmaps; i++) {union perf_event *event;struct perf_mmap *md; -u64 end, start; md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/sw-clock.c +1 -2
@@ -40,7 +40,6 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)struct cpu_map *cpus;struct thread_map *threads;struct perf_mmap *md; -u64 end, start; attr.sample_freq =500 ;
@@ -96,7 +95,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)perf_evlist__disable (evlist); md = &evlist->mmap[0 ]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 ) goto out_init;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/switch-tracking.c +1 -2
@@ -259,12 +259,11 @@ static int process_events(struct perf_evlist *evlist,LIST_HEAD (events);struct event_node *events_array, *node;struct perf_mmap *md; -u64 end, start;int i, ret;for (i =0 ; i < evlist->nr_mmaps; i++) { md = &evlist->mmap[i]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 )continue ;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/tests/task-exit.c +1 -2
@@ -48,7 +48,6 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unusedstruct cpu_map *cpus;struct thread_map *threads;struct perf_mmap *md; -u64 end, start;signal (SIGCHLD , sig_handler);
@@ -113,7 +112,7 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused retry: md = &evlist->mmap[0 ]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 ) goto out_init;while ((event =perf_mmap__read_event (md)) !=NULL ) {
tools/perf/util/mmap.c +2 -8
@@ -235,16 +235,13 @@ static int overwrite_rb_find_range(void *buf, int mask, u64 head, u64 *start, u6/* * Report the start and end of the available data in ringbuffer */ -int perf_mmap__read_init (struct perf_mmap *md,bool overwrite, -u64 *startp,u64 *endp) +int perf_mmap__read_init (struct perf_mmap *md) {u64 head =perf_mmap__read_head (md);u64 old = md->prev;unsigned char *data = md->base + page_size;unsigned long size; - *startp = overwrite ? head : old; - *endp = overwrite ? old : head; md->start = md->overwrite ? head : old; md->end = md->overwrite ? old : head;
@@ -267,8 +264,6 @@ int perf_mmap__read_init(struct perf_mmap *md, bool overwrite,*/ if (overwrite_rb_find_range (data, md->mask, head, &md->start, &md->end))return -EINVAL ; - *startp = md->start; - *endp = md->end; }return 0 ;
@@ -278,13 +273,12 @@ int perf_mmap__push(struct perf_mmap *md, void *to, int push(void *to, void *buf, size_t size)) {u64 head =perf_mmap__read_head (md); -u64 end, start;unsigned char *data = md->base + page_size;unsigned long size;void *buf;int rc =0 ; - rc =perf_mmap__read_init (md, md->overwrite, &start, &end); + rc =perf_mmap__read_init (md);if (rc <0 )return (rc == -EAGAIN ) ?0 :-1 ;
tools/perf/util/mmap.h +1 -2
@@ -96,7 +96,6 @@ int perf_mmap__push(struct perf_mmap *md, void *to,size_t perf_mmap__mmap_len (struct perf_mmap *map); -int perf_mmap__read_init (struct perf_mmap *md,bool overwrite, -u64 *startp,u64 *endp); +int perf_mmap__read_init (struct perf_mmap *md);void perf_mmap__read_done (struct perf_mmap *map);#endif /*__PERF_MMAP_H */
tools/perf/util/python.c +1 -2
@@ -984,7 +984,6 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,int sample_id_all =1 , cpu;static char *kwlist[] = {"cpu" ,"sample_id_all" ,NULL };struct perf_mmap *md; -u64 end, start;int err; if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i", kwlist,
@@ -992,7 +991,7 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,return NULL ; md = &evlist->mmap[cpu]; -if (perf_mmap__read_init (md, false, &start, &end) <0 ) +if (perf_mmap__read_init (md) <0 ) goto end; event =perf_mmap__read_event (md);
Quoted 9 lines · On Tue, Mar 06, 2018 at 10:36:00AM -0500, [email protected] wrote:
From: Kan Liang <[email protected]>
It has been determined that the map is for overwrite mode (
evlist->overwrite_mmap) or non-overwrite mode (evlist->mmap) when callingperf_evlist__alloc_mmap().
Store the information in structperf_mmap, which will be used later to simpler the perf_mmap__read*() interfaces.Signed-off-by Kan Liang <[email protected]>
nice cleanup! for the patchset:
thanks,
jirka
tip-bot for Kan Liang
merge botperf evlist: Store 'overwrite' in struct perf_mmap
Commit-ID: 2c5f6d876b4edda8740f5a2826cf9b1a67fa76fb Gitweb: https://git.kernel.org/tip/2c5f6d876b4edda8740f5a2826cf9b1a67fa76fb Author: Kan Liang <[email protected]> AuthorDate: Tue, 6 Mar 2018 10:36:00 -0500 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 8 Mar 2018 10:05:50 -0300
perf evlist: Store 'overwrite' in struct perf_mmap
It has been determined that the map is for overwrite mode (evlist->overwrite_mmap) or non-overwrite mode (evlist->mmap) when calling perf_evlist__alloc_mmap().
Store the information in struct perf_mmap, which will be used later to simplify the perf_mmap__read*() interfaces.
--- tools/perf/util/evlist.c | 8 +++++--- tools/perf/util/mmap.h | 1 + 2 files changed, 6 insertions(+), 3 deletions(-)
tools/perf/util/evlist.c +5 -3
@@ -722,7 +722,8 @@ void perf_evlist__munmap(struct perf_evlist *evlist)zfree (&evlist->overwrite_mmap); } -static struct perf_mmap *perf_evlist__alloc_mmap (struct perf_evlist *evlist) +static struct perf_mmap *perf_evlist__alloc_mmap (struct perf_evlist *evlist, +bool overwrite) {int i;struct perf_mmap *map;
@@ -736,6 +737,7 @@ static struct perf_mmap *perf_evlist__alloc_mmap(struct perf_evlist *evlist)for (i =0 ; i < evlist->nr_mmaps; i++) { map[i].fd =-1 ; + map[i].overwrite = overwrite;/* * When the perf_mmap() call is made we grab one refcount, plus * one extra to let perf_mmap__consume() get the last
@@ -779,7 +781,7 @@ static int perf_evlist__mmap_per_evsel(struct perf_evlist *evlist, int idx, maps = evlist->overwrite_mmap;if (!maps) { - maps =perf_evlist__alloc_mmap (evlist); + maps =perf_evlist__alloc_mmap (evlist, true);if (!maps)return -1 ; evlist->overwrite_mmap = maps;
@@ -1029,7 +1031,7 @@ int perf_evlist__mmap_ex(struct perf_evlist *evlist, unsigned int pages,struct mmap_params mp;if (!evlist->mmap) - evlist->mmap =perf_evlist__alloc_mmap (evlist); + evlist->mmap =perf_evlist__alloc_mmap (evlist, false);if (!evlist->mmap)return -ENOMEM ;
tools/perf/util/mmap.h +1 -0
@@ -20,6 +20,7 @@ struct perf_mmap {int fd;refcount_t refcnt;u64 prev; +bool overwrite;struct auxtrace_mmap auxtrace_mmap;char event_copy[PERF_SAMPLE_MAX_SIZE ]__aligned(8) ; };