perf tool: Fix type for references to data_head/tail
PATCH 1/1 perf tool: Fix type for references to data_head/tail
data_head and data_tail are defined as __u64 in linux/perf_event.h, but perf userspace uses int and unsigned int. Convert all references to u64 for consistency.
--- tools/perf/builtin-record.c | 4 ++-- tools/perf/util/evlist.c | 6 +++--- tools/perf/util/evlist.h | 9 ++++----- 3 files changed, 9 insertions(+), 10 deletions(-)
tools/perf/builtin-record.c +2 -2
@@ -70,8 +70,8 @@ static int process_synthesized_event(struct perf_tool *tool,static int record__mmap_read (struct record *rec,int idx) {struct perf_mmap *md = &rec->evlist->mmap[idx]; -unsigned int head =perf_mmap__read_head (md); -unsigned int old = md->prev; +u64 head =perf_mmap__read_head (md); +u64 old = md->prev;unsigned char *data = md->base + page_size;unsigned long size;void *buf;
tools/perf/util/evlist.c +3 -3
@@ -634,8 +634,8 @@ static struct perf_evsel *perf_evlist__event2evsel(struct perf_evlist *evlist,union perf_event *perf_evlist__mmap_read (struct perf_evlist *evlist,int idx) {struct perf_mmap *md = &evlist->mmap[idx]; -unsigned int head =perf_mmap__read_head (md); -unsigned int old = md->prev; +u64 head =perf_mmap__read_head (md); +u64 old = md->prev;unsigned char *data = md->base + page_size;union perf_event *event =NULL ;
@@ -716,7 +716,7 @@ void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx)struct perf_mmap *md = &evlist->mmap[idx];if (!evlist->overwrite) { -unsigned int old = md->prev; +u64 old = md->prev;perf_mmap__write_tail (md, old); }
tools/perf/util/evlist.h +4 -5
@@ -27,7 +27,7 @@ struct perf_mmap {void *base;int mask;int refcnt; -unsigned int prev; +u64 prev; char event_copy[PERF_SAMPLE_MAX_SIZE] __attribute__((aligned(8))); };
@@ -189,16 +189,15 @@ size_t perf_evlist__fprintf(struct perf_evlist *evlist, FILE *fp);int perf_evlist__strerror_open (struct perf_evlist *evlist,int err,char *buf,size_t size);int perf_evlist__strerror_mmap (struct perf_evlist *evlist,int err,char *buf,size_t size); -static inline unsigned int perf_mmap__read_head (struct perf_mmap *mm) +static inline u64 perf_mmap__read_head (struct perf_mmap *mm) {struct perf_event_mmap_page *pc = mm->base; -int head =ACCESS_ONCE (pc->data_head); +u64 head =ACCESS_ONCE (pc->data_head);rmb ();return head; } -static inline void perf_mmap__write_tail (struct perf_mmap *md, -unsigned long tail) +static inline void perf_mmap__write_tail (struct perf_mmap *md,u64 tail) {struct perf_event_mmap_page *pc = md->base;
Signature · 1 line
2.2.1
Peter Zijlstra
maintainerQuoted 3 lines · David Ahern
data_headanddata_tailare defined as__u64inlinux/perf_event.h, but perf userspace uses int and unsigned int. Convert all references to u64 for consistency.
Ack on that. I suspect this is because >2G mmap()s are a tad silly, but yes its good to fix that.
tip-bot for David Ahern
merge bot[tip:perf/core] perf evlist: Fix type for references to data_head /tail
In reply to David Ahernperf evlist: Fix type for references to data_head/tail
Commit-ID: 7b8283b56d9fb36106ff1c459dfd399a20bd374d Gitweb: http://git.kernel.org/tip/7b8283b56d9fb36106ff1c459dfd399a20bd374d Author: David Ahern <[email protected]> AuthorDate: Tue, 7 Apr 2015 09:20:37 -0600 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 10 Apr 2015 11:29:20 -0300
perf evlist: Fix type for references to data_head/tail
The data_head and data_tail fields are defined as __u64 in linux/perf_event.h, but perf userspace uses int and unsigned int.
Convert all references to u64 for consistency.
--- tools/perf/builtin-record.c | 4 ++-- tools/perf/util/evlist.c | 6 +++--- tools/perf/util/evlist.h | 9 ++++----- 3 files changed, 9 insertions(+), 10 deletions(-)
tools/perf/builtin-record.c +2 -2
@@ -70,8 +70,8 @@ static int process_synthesized_event(struct perf_tool *tool,static int record__mmap_read (struct record *rec,int idx) {struct perf_mmap *md = &rec->evlist->mmap[idx]; -unsigned int head =perf_mmap__read_head (md); -unsigned int old = md->prev; +u64 head =perf_mmap__read_head (md); +u64 old = md->prev;unsigned char *data = md->base + page_size;unsigned long size;void *buf;
tools/perf/util/evlist.c +3 -3
@@ -634,8 +634,8 @@ static struct perf_evsel *perf_evlist__event2evsel(struct perf_evlist *evlist,union perf_event *perf_evlist__mmap_read (struct perf_evlist *evlist,int idx) {struct perf_mmap *md = &evlist->mmap[idx]; -unsigned int head =perf_mmap__read_head (md); -unsigned int old = md->prev; +u64 head =perf_mmap__read_head (md); +u64 old = md->prev;unsigned char *data = md->base + page_size;union perf_event *event =NULL ;
@@ -716,7 +716,7 @@ void perf_evlist__mmap_consume(struct perf_evlist *evlist, int idx)struct perf_mmap *md = &evlist->mmap[idx];if (!evlist->overwrite) { -unsigned int old = md->prev; +u64 old = md->prev;perf_mmap__write_tail (md, old); }
tools/perf/util/evlist.h +4 -5
@@ -27,7 +27,7 @@ struct perf_mmap {void *base;int mask;int refcnt; -unsigned int prev; +u64 prev; char event_copy[PERF_SAMPLE_MAX_SIZE] __attribute__((aligned(8))); };
@@ -189,16 +189,15 @@ size_t perf_evlist__fprintf(struct perf_evlist *evlist, FILE *fp);int perf_evlist__strerror_open (struct perf_evlist *evlist,int err,char *buf,size_t size);int perf_evlist__strerror_mmap (struct perf_evlist *evlist,int err,char *buf,size_t size); -static inline unsigned int perf_mmap__read_head (struct perf_mmap *mm) +static inline u64 perf_mmap__read_head (struct perf_mmap *mm) {struct perf_event_mmap_page *pc = mm->base; -int head =ACCESS_ONCE (pc->data_head); +u64 head =ACCESS_ONCE (pc->data_head);rmb ();return head; } -static inline void perf_mmap__write_tail (struct perf_mmap *md, -unsigned long tail) +static inline void perf_mmap__write_tail (struct perf_mmap *md,u64 tail) {struct perf_event_mmap_page *pc = md->base;