perf tools: Prepare for AUX area sampling support
Adrian Hunter
reviewercover perf tools: Prepare for AUX area sampling support
Hi
Here are a few patches to help clear the way for adding AUX area sampling support. There is one minor fix "Prevent decoding when --no-itrace" but otherwise there are no functional changes.
Adrian Hunter (7):
perf record: Combine some auxtrace initialization into a single function perf auxtrace: Prevent decoding when --no-itrace
perf auxtrace: Add missing parameters from kernel-doc comments perf auxtrace: Rename some buffer-queuing functions
perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
tools/perf/builtin-record.c | 36 +++++++++----- tools/perf/util/auxtrace.c | 114 +++++++++++++++++++++++--------------------- tools/perf/util/auxtrace.h | 2 + 3 files changed, 85 insertions(+), 67 deletions(-)
Regards
Adrian
Adrian Hunter
reviewerPATCH 1/7 perf record: Combine some auxtrace initialization into a single function
In preparation for adding AUX area sampling support, combine some auxtrace initialization into a single function.
--- tools/perf/builtin-record.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-)
tools/perf/builtin-record.c +24 -12
@@ -273,6 +273,24 @@ static void record__read_auxtrace_snapshot(struct record *rec) } } +static int record__auxtrace_init (struct record *rec) +{ +int err; + +if (!rec->itr) { + rec->itr =auxtrace_record__init (rec->evlist, &err); +if (err) +return err; + } + + err =auxtrace_parse_snapshot_options (rec->itr, &rec->opts, + rec->opts.auxtrace_snapshot_opts); +if (err) +return err; + +return auxtrace_parse_filters (rec->evlist); +} +#else static inline
@@ -293,6 +311,11 @@ int auxtrace_record__snapshot_start(struct auxtrace_record *itr __maybe_unused)return 0 ; } +static int record__auxtrace_init (struct record *rec__maybe_unused ) +{ +return 0 ; +} +#endif static int record__mmap_evlist(struct record *rec,
@@ -1711,17 +1734,6 @@ int cmd_record(int argc, const char **argv)alarm (rec->switch_output.time); } -if (!rec->itr) { - rec->itr =auxtrace_record__init (rec->evlist, &err); -if (err) - goto out; - } - - err =auxtrace_parse_snapshot_options (rec->itr, &rec->opts, - rec->opts.auxtrace_snapshot_opts); -if (err) - goto out; -/* * Allow aliases to facilitate the lookup of symbols for address * filters. Refer to auxtrace_parse_filters().
@@ -1730,7 +1742,7 @@ int cmd_record(int argc, const char **argv)symbol__init (NULL ); - err =auxtrace_parse_filters (rec->evlist); + err =record__auxtrace_init (rec);if (err) goto out;
Signature · 1 line
1.9.1
tip-bot for Adrian Hunter
merge bot[tip:perf/core] perf record: Combine some auxtrace initialization into a single function
perf record: Combine some auxtrace initialization into a single function
Commit-ID: 4b5ea3bd674f707180b0e8c4f514d30e49f293b3 Gitweb: https://git.kernel.org/tip/4b5ea3bd674f707180b0e8c4f514d30e49f293b3 Author: Adrian Hunter <[email protected]> AuthorDate: Tue, 6 Mar 2018 11:13:12 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 7 Mar 2018 10:22:26 -0300
perf record: Combine some auxtrace initialization into a single function
In preparation for adding AUX area sampling support, combine some auxtrace initialization into a single function.
--- tools/perf/builtin-record.c | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-)
tools/perf/builtin-record.c +24 -12
@@ -274,6 +274,24 @@ static void record__read_auxtrace_snapshot(struct record *rec) } } +static int record__auxtrace_init (struct record *rec) +{ +int err; + +if (!rec->itr) { + rec->itr =auxtrace_record__init (rec->evlist, &err); +if (err) +return err; + } + + err =auxtrace_parse_snapshot_options (rec->itr, &rec->opts, + rec->opts.auxtrace_snapshot_opts); +if (err) +return err; + +return auxtrace_parse_filters (rec->evlist); +} +#else static inline
@@ -294,6 +312,11 @@ int auxtrace_record__snapshot_start(struct auxtrace_record *itr __maybe_unused)return 0 ; } +static int record__auxtrace_init (struct record *rec__maybe_unused ) +{ +return 0 ; +} +#endif static int record__mmap_evlist(struct record *rec,
@@ -1727,17 +1750,6 @@ int cmd_record(int argc, const char **argv)alarm (rec->switch_output.time); } -if (!rec->itr) { - rec->itr =auxtrace_record__init (rec->evlist, &err); -if (err) - goto out; - } - - err =auxtrace_parse_snapshot_options (rec->itr, &rec->opts, - rec->opts.auxtrace_snapshot_opts); -if (err) - goto out; -/* * Allow aliases to facilitate the lookup of symbols for address * filters. Refer to auxtrace_parse_filters().
@@ -1746,7 +1758,7 @@ int cmd_record(int argc, const char **argv)symbol__init (NULL ); - err =auxtrace_parse_filters (rec->evlist); + err =record__auxtrace_init (rec);if (err) goto out;
Adrian Hunter
reviewerPATCH 2/7 perf auxtrace: Prevent decoding when --no-itrace
In reply to Adrian HunterPrevent auxtrace_queues__process_index() from queuing AUX area data for decoding when the --no-itrace option has been used.
--- tools/perf/util/auxtrace.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
tools/perf/util/auxtrace.c +9 -6
@@ -60,6 +60,12 @@#include "sane_ctype.h" #include "symbol/kallsyms.h" +static bool auxtrace__dont_decode (struct perf_session *session) +{ +return !session->itrace_synth_opts || + session->itrace_synth_opts->dont_decode; +} +int auxtrace_mmap__mmap (struct auxtrace_mmap *mm,struct auxtrace_mmap_params *mp,void *userpg,int fd)
@@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,size_t i;int err; +if (auxtrace__dont_decode (session)) +return 0 ; +list_for_each_entry (auxtrace_index, &session->auxtrace_index, list) {for (i =0 ; i < auxtrace_index->nr; i++) { ent = &auxtrace_index->entries[i];
@@ -892,12 +901,6 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,return err; } -static bool auxtrace__dont_decode (struct perf_session *session) -{ -return !session->itrace_synth_opts || - session->itrace_synth_opts->dont_decode; -} -int perf_event__process_auxtrace_info (struct perf_tool *tool__maybe_unused ,union perf_event *event,struct perf_session *session)
Signature · 1 line
1.9.1
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace
Em Tue, Mar 06, 2018 at 11:13:13AM +0200, Adrian Hunter escreveu:
Quoted 2 lines
Prevent
auxtrace_queues__process_index()from queuing AUX area data for decoding when the --no-itrace option has been used.
So I'm putting this one both on perf/urgent and on perf/core, the rest just on perf/core, ok?
- Arnaldo
Quoted 47 lines
Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/auxtrace.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)tools/perf/util/auxtrace.c +9
-6@@ -60,6 +60,12 @@#include "sane_ctype.h" #include "symbol/kallsyms.h" +static bool auxtrace__dont_decode (struct perf_session *session) +{ +return !session->itrace_synth_opts || + session->itrace_synth_opts->dont_decode; +} +int auxtrace_mmap__mmap (struct auxtrace_mmap *mm,struct auxtrace_mmap_params *mp,void *userpg,int fd)@@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,size_t i;int err; +if (auxtrace__dont_decode (session)) +return 0 ; +list_for_each_entry (auxtrace_index, &session->auxtrace_index, list) {for (i =0 ; i < auxtrace_index->nr; i++) { ent = &auxtrace_index->entries[i];@@ -892,12 +901,6 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,return err; } -static bool auxtrace__dont_decode (struct perf_session *session) -{ -return !session->itrace_synth_opts || - session->itrace_synth_opts->dont_decode; -} -int perf_event__process_auxtrace_info (struct perf_tool *tool__maybe_unused ,union perf_event *event,struct perf_session *session)Signature · 1 line
1.9.1
Adrian Hunter
reviewerRe: [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace
Quoted 6 lines · Arnaldo Carvalho de Melo
Em Tue, Mar 06, 2018 at 11:13:13AM +0200, Adrian Hunter escreveu:
Quoted 2 lines
Prevent
auxtrace_queues__process_index()from queuing AUX area data for decoding when the --no-itrace option has been used.So I'm putting this one both on perf/urgent and on perf/core, the rest just on perf/core, ok?
Yes, thank you!
Have you got this one also:
https://marc.info/?l=linux-kernel&m=151980982703990
Quoted 51 lines
- Arnaldo
Quoted 47 lines
Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/auxtrace.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)tools/perf/util/auxtrace.c +9
-6@@ -60,6 +60,12 @@#include "sane_ctype.h" #include "symbol/kallsyms.h" +static bool auxtrace__dont_decode (struct perf_session *session) +{ +return !session->itrace_synth_opts || + session->itrace_synth_opts->dont_decode; +} +int auxtrace_mmap__mmap (struct auxtrace_mmap *mm,struct auxtrace_mmap_params *mp,void *userpg,int fd)@@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,size_t i;int err; +if (auxtrace__dont_decode (session)) +return 0 ; +list_for_each_entry (auxtrace_index, &session->auxtrace_index, list) {for (i =0 ; i < auxtrace_index->nr; i++) { ent = &auxtrace_index->entries[i];@@ -892,12 +901,6 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,return err; } -static bool auxtrace__dont_decode (struct perf_session *session) -{ -return !session->itrace_synth_opts || - session->itrace_synth_opts->dont_decode; -} -int perf_event__process_auxtrace_info (struct perf_tool *tool__maybe_unused ,union perf_event *event,struct perf_session *session)Signature · 1 line
1.9.1
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 2/7] perf auxtrace: Prevent decoding when --no-itrace
Em Tue, Mar 06, 2018 at 04:21:32PM +0200, Adrian Hunter escreveu:
Quoted 5 lines · Arnaldo Carvalho de Melo
Quoted 4 lines
Em Tue, Mar 06, 2018 at 11:13:13AM +0200, Adrian Hunter escreveu:
Quoted 2 lines
Prevent
auxtrace_queues__process_index()from queuing AUX area data for decoding when the --no-itrace option has been used.
Quoted 8 lines
Quoted 2 lines
So I'm putting this one both on perf/urgent and on perf/core, the rest just on perf/core, ok?
Yes, thank you!
Have you got this one also:
https://marc.info/?l=linux-kernel&m=151980982703990
Hadn't, got it now, please next time put the subject line here, sometimes I am offline and could then process the patches I have in my local inbox, etc.
Thanks,
- Arnaldo
Quoted 51 lines
Quoted 51 lines
- Arnaldo
Quoted 47 lines
Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/auxtrace.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)tools/perf/util/auxtrace.c +9
-6@@ -60,6 +60,12 @@#include "sane_ctype.h" #include "symbol/kallsyms.h" +static bool auxtrace__dont_decode (struct perf_session *session) +{ +return !session->itrace_synth_opts || + session->itrace_synth_opts->dont_decode; +} +int auxtrace_mmap__mmap (struct auxtrace_mmap *mm,struct auxtrace_mmap_params *mp,void *userpg,int fd)@@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,size_t i;int err; +if (auxtrace__dont_decode (session)) +return 0 ; +list_for_each_entry (auxtrace_index, &session->auxtrace_index, list) {for (i =0 ; i < auxtrace_index->nr; i++) { ent = &auxtrace_index->entries[i];@@ -892,12 +901,6 @@ int perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr,return err; } -static bool auxtrace__dont_decode (struct perf_session *session) -{ -return !session->itrace_synth_opts || - session->itrace_synth_opts->dont_decode; -} -int perf_event__process_auxtrace_info (struct perf_tool *tool__maybe_unused ,union perf_event *event,struct perf_session *session)Signature · 1 line
1.9.1
tip-bot for Adrian Hunter
merge bot[tip:perf/urgent] perf auxtrace: Prevent decoding when --no-itrace
In reply to Adrian Hunterperf auxtrace: Prevent decoding when --no-itrace
Commit-ID: 2e2967f4c398e0f984a6c04daa3a79512e2bb74e Gitweb: https://git.kernel.org/tip/2e2967f4c398e0f984a6c04daa3a79512e2bb74e Author: Adrian Hunter <[email protected]> AuthorDate: Tue, 6 Mar 2018 11:13:13 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 6 Mar 2018 11:05:47 -0300
perf auxtrace: Prevent decoding when --no-itrace
Prevent auxtrace_queues__process_index() from queuing AUX area data for decoding when the --no-itrace option has been used.
--- tools/perf/util/auxtrace.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
tools/perf/util/auxtrace.c +9 -6
@@ -60,6 +60,12 @@#include "sane_ctype.h" #include "symbol/kallsyms.h" +static bool auxtrace__dont_decode (struct perf_session *session) +{ +return !session->itrace_synth_opts || + session->itrace_synth_opts->dont_decode; +} +int auxtrace_mmap__mmap (struct auxtrace_mmap *mm,struct auxtrace_mmap_params *mp,void *userpg,int fd)
@@ -762,6 +768,9 @@ int auxtrace_queues__process_index(struct auxtrace_queues *queues,size_t i;int err; +if (auxtrace__dont_decode (session)) +return 0 ; +list_for_each_entry (auxtrace_index, &session->auxtrace_index, list) {for (i =0 ; i < auxtrace_index->nr; i++) { ent = &auxtrace_index->entries[i];
@@ -892,12 +901,6 @@ out_free:return err; } -static bool auxtrace__dont_decode (struct perf_session *session) -{ -return !session->itrace_synth_opts || - session->itrace_synth_opts->dont_decode; -} -int perf_event__process_auxtrace_info (struct perf_tool *tool__maybe_unused ,union perf_event *event,struct perf_session *session)
Adrian Hunter
reviewerPATCH 3/7 perf auxtrace: Add missing parameters from kernel-doc comments
In reply to Adrian HunterAdd missing parameters from kernel-doc comments.
--- tools/perf/util/auxtrace.h | 2 ++ 1 file changed, 2 insertions(+)
tools/perf/util/auxtrace.h +2 -0
@@ -130,6 +130,7 @@ struct auxtrace_index {/** * struct auxtrace - session callbacks to allow AUX area data decoding. * @process_event: lets the decoder see all session events +* @process_auxtrace_event: process a PERF_RECORD_AUXTRACE event * @flush_events: process any remaining data * @free_events: free resources associated with event processing * @free: free resources associated with the session
@@ -301,6 +302,7 @@ struct auxtrace_mmap_params {* @parse_snapshot_options: parse snapshot options * @reference: provide a 64-bit reference number for auxtrace_event * @read_finish: called after reading from an auxtrace mmap +* @alignment: alignment (if any) for AUX area data */ struct auxtrace_record { int (*recording_options)(struct auxtrace_record *itr,
Signature · 1 line
1.9.1
tip-bot for Adrian Hunter
merge bot[tip:perf/core] perf auxtrace: Add missing parameters from kernel-doc comments
perf auxtrace: Add missing parameters from kernel-doc comments
Commit-ID: b818ec613b42d679604215c188a12cf43164cab0 Gitweb: https://git.kernel.org/tip/b818ec613b42d679604215c188a12cf43164cab0 Author: Adrian Hunter <[email protected]> AuthorDate: Tue, 6 Mar 2018 11:13:14 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 7 Mar 2018 10:22:26 -0300
perf auxtrace: Add missing parameters from kernel-doc comments
Add missing parameters from kernel-doc comments.
--- tools/perf/util/auxtrace.h | 2 ++ 1 file changed, 2 insertions(+)
tools/perf/util/auxtrace.h +2 -0
@@ -130,6 +130,7 @@ struct auxtrace_index {/** * struct auxtrace - session callbacks to allow AUX area data decoding. * @process_event: lets the decoder see all session events +* @process_auxtrace_event: process a PERF_RECORD_AUXTRACE event * @flush_events: process any remaining data * @free_events: free resources associated with event processing * @free: free resources associated with the session
@@ -301,6 +302,7 @@ struct auxtrace_mmap_params {* @parse_snapshot_options: parse snapshot options * @reference: provide a 64-bit reference number for auxtrace_event * @read_finish: called after reading from an auxtrace mmap +* @alignment: alignment (if any) for AUX area data */ struct auxtrace_record { int (*recording_options)(struct auxtrace_record *itr,
Adrian Hunter
reviewerPATCH 4/7 perf auxtrace: Rename some buffer-queuing functions
In reply to Adrian HunterRename some buffer-queuing functions in preparation for supporting AUX area sampling buffers.
--- tools/perf/util/auxtrace.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
tools/perf/util/auxtrace.c +10 -10
@@ -233,9 +233,9 @@ static void *auxtrace_copy_data(u64 size, struct perf_session *session)return p; } -static int auxtrace_queues__add_buffer (struct auxtrace_queues *queues, -unsigned int idx, -struct auxtrace_buffer *buffer) +static int auxtrace_queues__queue_buffer (struct auxtrace_queues *queues, +unsigned int idx, +struct auxtrace_buffer *buffer) {struct auxtrace_queue *queue;int err;
@@ -286,7 +286,7 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,return -ENOMEM ; b->size =BUFFER_LIMIT_FOR_32_BIT ; b->consecutive = consecutive; - err =auxtrace_queues__add_buffer (queues, idx, b); + err =auxtrace_queues__queue_buffer (queues, idx, b);if (err) {auxtrace_buffer__free (b);return err;
@@ -302,10 +302,10 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,return 0 ; } -static int auxtrace_queues__add_event_buffer (struct auxtrace_queues *queues, -struct perf_session *session, -unsigned int idx, -struct auxtrace_buffer *buffer) +static int auxtrace_queues__add_buffer (struct auxtrace_queues *queues, +struct perf_session *session, +unsigned int idx, +struct auxtrace_buffer *buffer) {if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset +
@@ -324,7 +324,7 @@ static int auxtrace_queues__add_event_buffer(struct auxtrace_queues *queues,return err; } -return auxtrace_queues__add_buffer (queues, idx, buffer); +return auxtrace_queues__queue_buffer (queues, idx, buffer); }static bool filter_cpu (struct perf_session *session,int cpu)
@@ -359,7 +359,7 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, buffer->size = event->auxtrace.size; idx = event->auxtrace.idx; - err =auxtrace_queues__add_event_buffer (queues, session, idx, buffer); + err =auxtrace_queues__add_buffer (queues, session, idx, buffer);if (err) goto out_err;
Signature · 1 line
1.9.1
tip-bot for Adrian Hunter
merge bot[tip:perf/core] perf auxtrace: Rename some buffer-queuing functions
perf auxtrace: Rename some buffer-queuing functions
Commit-ID: a356a59799d376dd8e4839f29d32f4c6a5582e6d Gitweb: https://git.kernel.org/tip/a356a59799d376dd8e4839f29d32f4c6a5582e6d Author: Adrian Hunter <[email protected]> AuthorDate: Tue, 6 Mar 2018 11:13:15 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 7 Mar 2018 10:22:27 -0300
perf auxtrace: Rename some buffer-queuing functions
Rename some buffer-queuing functions in preparation for supporting AUX area sampling buffers.
--- tools/perf/util/auxtrace.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
tools/perf/util/auxtrace.c +10 -10
@@ -233,9 +233,9 @@ static void *auxtrace_copy_data(u64 size, struct perf_session *session)return p; } -static int auxtrace_queues__add_buffer (struct auxtrace_queues *queues, -unsigned int idx, -struct auxtrace_buffer *buffer) +static int auxtrace_queues__queue_buffer (struct auxtrace_queues *queues, +unsigned int idx, +struct auxtrace_buffer *buffer) {struct auxtrace_queue *queue;int err;
@@ -286,7 +286,7 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,return -ENOMEM ; b->size =BUFFER_LIMIT_FOR_32_BIT ; b->consecutive = consecutive; - err =auxtrace_queues__add_buffer (queues, idx, b); + err =auxtrace_queues__queue_buffer (queues, idx, b);if (err) {auxtrace_buffer__free (b);return err;
@@ -302,10 +302,10 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,return 0 ; } -static int auxtrace_queues__add_event_buffer (struct auxtrace_queues *queues, -struct perf_session *session, -unsigned int idx, -struct auxtrace_buffer *buffer) +static int auxtrace_queues__add_buffer (struct auxtrace_queues *queues, +struct perf_session *session, +unsigned int idx, +struct auxtrace_buffer *buffer) {if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset +
@@ -324,7 +324,7 @@ static int auxtrace_queues__add_event_buffer(struct auxtrace_queues *queues,return err; } -return auxtrace_queues__add_buffer (queues, idx, buffer); +return auxtrace_queues__queue_buffer (queues, idx, buffer); }static bool filter_cpu (struct perf_session *session,int cpu)
@@ -359,7 +359,7 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, buffer->size = event->auxtrace.size; idx = event->auxtrace.idx; - err =auxtrace_queues__add_event_buffer (queues, session, idx, buffer); + err =auxtrace_queues__add_buffer (queues, session, idx, buffer);if (err) goto out_err;
Adrian Hunter
reviewerPATCH 5/7 perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr
In reply to Adrian HunterIn preparation for supporting AUX area sampling buffers, auxtrace_queues__add_buffer() needs to be more generic. To that end, make it return buffer_ptr instead of the caller.
--- tools/perf/util/auxtrace.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-)
tools/perf/util/auxtrace.c +15 -8
@@ -305,8 +305,11 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,static int auxtrace_queues__add_buffer (struct auxtrace_queues *queues,struct perf_session *session,unsigned int idx, -struct auxtrace_buffer *buffer) +struct auxtrace_buffer *buffer, +struct auxtrace_buffer **buffer_ptr) { +int err; +if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset + session->one_mmap_addr;
@@ -317,14 +320,20 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, buffer->data_needs_freeing = true; }else if (BITS_PER_LONG ==32 && buffer->size >BUFFER_LIMIT_FOR_32_BIT ) { -int err; - err =auxtrace_queues__split_buffer (queues, idx, buffer);if (err)return err; } -return auxtrace_queues__queue_buffer (queues, idx, buffer); + err =auxtrace_queues__queue_buffer (queues, idx, buffer); +if (err) +return err; + +/* FIXME: Doesn't work for split buffer */ +if (buffer_ptr) + *buffer_ptr = buffer; + +return 0 ; }static bool filter_cpu (struct perf_session *session,int cpu)
@@ -359,13 +368,11 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, buffer->size = event->auxtrace.size; idx = event->auxtrace.idx; - err =auxtrace_queues__add_buffer (queues, session, idx, buffer); + err =auxtrace_queues__add_buffer (queues, session, idx, buffer, + buffer_ptr);if (err) goto out_err; -if (buffer_ptr) - *buffer_ptr = buffer; -return 0 ; out_err:
Signature · 1 line
1.9.1
tip-bot for Adrian Hunter
merge bot[tip:perf/core] perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr
perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr
Commit-ID: 4c4548437c5722effcaf5b2dea85abd321935627 Gitweb: https://git.kernel.org/tip/4c4548437c5722effcaf5b2dea85abd321935627 Author: Adrian Hunter <[email protected]> AuthorDate: Tue, 6 Mar 2018 11:13:16 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 7 Mar 2018 10:22:27 -0300
perf auxtrace: Make auxtrace_queues__add_buffer() return buffer_ptr
In preparation for supporting AUX area sampling buffers, auxtrace_queues__add_buffer() needs to be more generic. To that end, make it return buffer_ptr instead of the caller.
--- tools/perf/util/auxtrace.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-)
tools/perf/util/auxtrace.c +15 -8
@@ -305,8 +305,11 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,static int auxtrace_queues__add_buffer (struct auxtrace_queues *queues,struct perf_session *session,unsigned int idx, -struct auxtrace_buffer *buffer) +struct auxtrace_buffer *buffer, +struct auxtrace_buffer **buffer_ptr) { +int err; +if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset + session->one_mmap_addr;
@@ -317,14 +320,20 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, buffer->data_needs_freeing = true; }else if (BITS_PER_LONG ==32 && buffer->size >BUFFER_LIMIT_FOR_32_BIT ) { -int err; - err =auxtrace_queues__split_buffer (queues, idx, buffer);if (err)return err; } -return auxtrace_queues__queue_buffer (queues, idx, buffer); + err =auxtrace_queues__queue_buffer (queues, idx, buffer); +if (err) +return err; + +/* FIXME: Doesn't work for split buffer */ +if (buffer_ptr) + *buffer_ptr = buffer; + +return 0 ; }static bool filter_cpu (struct perf_session *session,int cpu)
@@ -359,13 +368,11 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, buffer->size = event->auxtrace.size; idx = event->auxtrace.idx; - err =auxtrace_queues__add_buffer (queues, session, idx, buffer); + err =auxtrace_queues__add_buffer (queues, session, idx, buffer, + buffer_ptr);if (err) goto out_err; -if (buffer_ptr) - *buffer_ptr = buffer; -return 0 ; out_err:
Adrian Hunter
reviewerPATCH 6/7 perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
In reply to Adrian HunterIn preparation for supporting AUX area sampling buffers, auxtrace_queues__add_buffer() needs to be more generic. To that end, move memory allocation for struct buffer into it.
--- tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 30 deletions(-)
tools/perf/util/auxtrace.c +24 -30
@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,struct auxtrace_buffer *buffer, struct auxtrace_buffer **buffer_ptr) { - int err; + int err = -ENOMEM; + + buffer =memdup (buffer,sizeof (*buffer)); +if (!buffer) +return -ENOMEM ;if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset +
@@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, }else if (perf_data__is_pipe (session->data)) { buffer->data =auxtrace_copy_data (buffer->size, session);if (!buffer->data) -return -ENOMEM ; + goto out_free; buffer->data_needs_freeing = true; }else if (BITS_PER_LONG ==32 && buffer->size >BUFFER_LIMIT_FOR_32_BIT ) { err =auxtrace_queues__split_buffer (queues, idx, buffer);if (err) -return err; + goto out_free; } err =auxtrace_queues__queue_buffer (queues, idx, buffer);if (err) -return err; + goto out_free;/* FIXME: Doesn't work for split buffer */ if (buffer_ptr) *buffer_ptr = buffer;return 0 ; + +out_free: +auxtrace_buffer__free (buffer); +return err; }static bool filter_cpu (struct perf_session *session,int cpu)
@@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, union perf_event *event, off_t data_offset, struct auxtrace_buffer **buffer_ptr) { - struct auxtrace_buffer *buffer; -unsigned int idx; -int err; + struct auxtrace_buffer buffer = { + .pid =-1 , + .tid = event->auxtrace.tid, + .cpu = event->auxtrace.cpu, + .data_offset = data_offset, + .offset = event->auxtrace.offset, + .reference = event->auxtrace.reference, + .size = event->auxtrace.size, + }; +unsigned int idx = event->auxtrace.idx;if (filter_cpu (session, event->auxtrace.cpu))return 0 ; - buffer =zalloc (sizeof (struct auxtrace_buffer )); -if (!buffer) -return -ENOMEM ; - - buffer->pid =-1 ; - buffer->tid = event->auxtrace.tid; - buffer->cpu = event->auxtrace.cpu; - buffer->data_offset = data_offset; - buffer->offset = event->auxtrace.offset; - buffer->reference = event->auxtrace.reference; - buffer->size = event->auxtrace.size; - idx = event->auxtrace.idx; - - err =auxtrace_queues__add_buffer (queues, session, idx, buffer, - buffer_ptr); -if (err) - goto out_err; - -return 0 ; - -out_err: -auxtrace_buffer__free (buffer); -return err; +return auxtrace_queues__add_buffer (queues, session, idx, &buffer, + buffer_ptr); } static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,
Signature · 1 line
1.9.1
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
Quoted 14 lines
In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer()needs to be more generic. To that end, move memory allocation for struct buffer into it.Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 30 deletions(-)tools/perf/util/auxtrace.c +0
-0
tools/perf/util/auxtrace.c static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, · line 313
Quoted 7 lines
tools/perf/util/auxtrace.c +3
-1@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,struct auxtrace_buffer *buffer, struct auxtrace_buffer **buffer_ptr) { - int err; + int err = -ENOMEM; + + buffer =memdup (buffer,sizeof (*buffer));
this is a bit strange, why not make buffer a local variable in this function then?
Quoted 88 lines
tools/perf/util/auxtrace.c +21
-29+if (!buffer) +return -ENOMEM ;if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset +@@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, }else if (perf_data__is_pipe (session->data)) { buffer->data =auxtrace_copy_data (buffer->size, session);if (!buffer->data) -return -ENOMEM ; + goto out_free; buffer->data_needs_freeing = true; }else if (BITS_PER_LONG ==32 && buffer->size >BUFFER_LIMIT_FOR_32_BIT ) { err =auxtrace_queues__split_buffer (queues, idx, buffer);if (err) -return err; + goto out_free; } err =auxtrace_queues__queue_buffer (queues, idx, buffer);if (err) -return err; + goto out_free;/* FIXME: Doesn't work for split buffer */ if (buffer_ptr) *buffer_ptr = buffer;return 0 ; + +out_free: +auxtrace_buffer__free (buffer); +return err; }static bool filter_cpu (struct perf_session *session,int cpu)@@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, union perf_event *event, off_t data_offset, struct auxtrace_buffer **buffer_ptr) { - struct auxtrace_buffer *buffer; -unsigned int idx; -int err; + struct auxtrace_buffer buffer = { + .pid =-1 , + .tid = event->auxtrace.tid, + .cpu = event->auxtrace.cpu, + .data_offset = data_offset, + .offset = event->auxtrace.offset, + .reference = event->auxtrace.reference, + .size = event->auxtrace.size, + }; +unsigned int idx = event->auxtrace.idx;if (filter_cpu (session, event->auxtrace.cpu))return 0 ; - buffer =zalloc (sizeof (struct auxtrace_buffer )); -if (!buffer) -return -ENOMEM ; - - buffer->pid =-1 ; - buffer->tid = event->auxtrace.tid; - buffer->cpu = event->auxtrace.cpu; - buffer->data_offset = data_offset; - buffer->offset = event->auxtrace.offset; - buffer->reference = event->auxtrace.reference; - buffer->size = event->auxtrace.size; - idx = event->auxtrace.idx; - - err =auxtrace_queues__add_buffer (queues, session, idx, buffer, - buffer_ptr); -if (err) - goto out_err; - -return 0 ; - -out_err: -auxtrace_buffer__free (buffer); -return err; +return auxtrace_queues__add_buffer (queues, session, idx, &buffer, + buffer_ptr); } static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,Signature · 1 line
1.9.1
Adrian Hunter
reviewerRe: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
Quoted 10 lines · Arnaldo Carvalho de Melo
Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
Quoted 9 lines
In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer()needs to be more generic. To that end, move memory allocation for struct buffer into it.Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 30 deletions(-)
Quoted 15 lines
tools/perf/util/auxtrace.c static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, · line 313
Quoted 12 lines
tools/perf/util/auxtrace.c +3
-1@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,struct auxtrace_buffer *buffer, struct auxtrace_buffer **buffer_ptr) { - int err; + int err = -ENOMEM; + + buffer =memdup (buffer,sizeof (*buffer));this is a bit strange, why not make buffer a local variable in this function then?
Do you mean the following?
struct auxtrace_buffer *new_buf; new_buf = memdup(buffer, sizeof(*buffer));
Quoted 90 lines
Quoted 89 lines
tools/perf/util/auxtrace.c +21
-29+if (!buffer) +return -ENOMEM ;if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset +@@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, }else if (perf_data__is_pipe (session->data)) { buffer->data =auxtrace_copy_data (buffer->size, session);if (!buffer->data) -return -ENOMEM ; + goto out_free; buffer->data_needs_freeing = true; }else if (BITS_PER_LONG ==32 && buffer->size >BUFFER_LIMIT_FOR_32_BIT ) { err =auxtrace_queues__split_buffer (queues, idx, buffer);if (err) -return err; + goto out_free; } err =auxtrace_queues__queue_buffer (queues, idx, buffer);if (err) -return err; + goto out_free;/* FIXME: Doesn't work for split buffer */ if (buffer_ptr) *buffer_ptr = buffer;return 0 ; + +out_free: +auxtrace_buffer__free (buffer); +return err; }static bool filter_cpu (struct perf_session *session,int cpu)@@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, union perf_event *event, off_t data_offset, struct auxtrace_buffer **buffer_ptr) { - struct auxtrace_buffer *buffer; -unsigned int idx; -int err; + struct auxtrace_buffer buffer = { + .pid =-1 , + .tid = event->auxtrace.tid, + .cpu = event->auxtrace.cpu, + .data_offset = data_offset, + .offset = event->auxtrace.offset, + .reference = event->auxtrace.reference, + .size = event->auxtrace.size, + }; +unsigned int idx = event->auxtrace.idx;if (filter_cpu (session, event->auxtrace.cpu))return 0 ; - buffer =zalloc (sizeof (struct auxtrace_buffer )); -if (!buffer) -return -ENOMEM ; - - buffer->pid =-1 ; - buffer->tid = event->auxtrace.tid; - buffer->cpu = event->auxtrace.cpu; - buffer->data_offset = data_offset; - buffer->offset = event->auxtrace.offset; - buffer->reference = event->auxtrace.reference; - buffer->size = event->auxtrace.size; - idx = event->auxtrace.idx; - - err =auxtrace_queues__add_buffer (queues, session, idx, buffer, - buffer_ptr); -if (err) - goto out_err; - -return 0 ; - -out_err: -auxtrace_buffer__free (buffer); -return err; +return auxtrace_queues__add_buffer (queues, session, idx, &buffer, + buffer_ptr); } static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,Signature · 1 line
1.9.1
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
Em Wed, Mar 07, 2018 at 10:06:50AM +0200, Adrian Hunter escreveu:
Quoted 27 lines · Arnaldo Carvalho de Melo
Quoted 10 lines
Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
Quoted 9 lines
In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer()needs to be more generic. To that end, move memory allocation for struct buffer into it.Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 30 deletions(-)Quoted 15 lines
tools/perf/util/auxtrace.c static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, · line 313
Quoted 12 lines
tools/perf/util/auxtrace.c +3
-1@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,struct auxtrace_buffer *buffer, struct auxtrace_buffer **buffer_ptr) { - int err; + int err = -ENOMEM; + + buffer =memdup (buffer,sizeof (*buffer));this is a bit strange, why not make buffer a local variable in this function then?
Quoted 5 lines
Do you mean the following?
struct auxtrace_buffer *new_buf; new_buf = memdup(buffer, sizeof(*buffer));
I hadn't noticed that you were using buffer as both r and l value :-\
If all you want is to receive that buffer, duplicate it and then use just the duplicate, not needing any reference to the original buffer, then your code is correct, it just looked strange from a quick look, so nevermind, I'll continue processing this one and the others.
Thanks,
- Arnaldo
Quoted 90 lines
Quoted 90 lines
Quoted 89 lines
tools/perf/util/auxtrace.c +21
-29+if (!buffer) +return -ENOMEM ;if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset +@@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, }else if (perf_data__is_pipe (session->data)) { buffer->data =auxtrace_copy_data (buffer->size, session);if (!buffer->data) -return -ENOMEM ; + goto out_free; buffer->data_needs_freeing = true; }else if (BITS_PER_LONG ==32 && buffer->size >BUFFER_LIMIT_FOR_32_BIT ) { err =auxtrace_queues__split_buffer (queues, idx, buffer);if (err) -return err; + goto out_free; } err =auxtrace_queues__queue_buffer (queues, idx, buffer);if (err) -return err; + goto out_free;/* FIXME: Doesn't work for split buffer */ if (buffer_ptr) *buffer_ptr = buffer;return 0 ; + +out_free: +auxtrace_buffer__free (buffer); +return err; }static bool filter_cpu (struct perf_session *session,int cpu)@@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, union perf_event *event, off_t data_offset, struct auxtrace_buffer **buffer_ptr) { - struct auxtrace_buffer *buffer; -unsigned int idx; -int err; + struct auxtrace_buffer buffer = { + .pid =-1 , + .tid = event->auxtrace.tid, + .cpu = event->auxtrace.cpu, + .data_offset = data_offset, + .offset = event->auxtrace.offset, + .reference = event->auxtrace.reference, + .size = event->auxtrace.size, + }; +unsigned int idx = event->auxtrace.idx;if (filter_cpu (session, event->auxtrace.cpu))return 0 ; - buffer =zalloc (sizeof (struct auxtrace_buffer )); -if (!buffer) -return -ENOMEM ; - - buffer->pid =-1 ; - buffer->tid = event->auxtrace.tid; - buffer->cpu = event->auxtrace.cpu; - buffer->data_offset = data_offset; - buffer->offset = event->auxtrace.offset; - buffer->reference = event->auxtrace.reference; - buffer->size = event->auxtrace.size; - idx = event->auxtrace.idx; - - err =auxtrace_queues__add_buffer (queues, session, idx, buffer, - buffer_ptr); -if (err) - goto out_err; - -return 0 ; - -out_err: -auxtrace_buffer__free (buffer); -return err; +return auxtrace_queues__add_buffer (queues, session, idx, &buffer, + buffer_ptr); } static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,Signature · 1 line
1.9.1
Adrian Hunter
reviewerRe: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
Quoted 32 lines · Arnaldo Carvalho de Melo
Em Wed, Mar 07, 2018 at 10:06:50AM +0200, Adrian Hunter escreveu:
Quoted 31 lines · Arnaldo Carvalho de Melo
Quoted 10 lines
Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
Quoted 9 lines
In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer()needs to be more generic. To that end, move memory allocation for struct buffer into it.Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 30 deletions(-)Quoted 15 lines
tools/perf/util/auxtrace.c static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, · line 313
Quoted 12 lines
tools/perf/util/auxtrace.c +3
-1@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,struct auxtrace_buffer *buffer, struct auxtrace_buffer **buffer_ptr) { - int err; + int err = -ENOMEM; + + buffer =memdup (buffer,sizeof (*buffer));this is a bit strange, why not make buffer a local variable in this function then?
Do you mean the following?
struct auxtrace_buffer *new_buf;
Quoted 8 lines
Quoted 1 line
new_buf = memdup(buffer, sizeof(*buffer));I hadn't noticed that you were using buffer as both r and l value :-\
If all you want is to receive that buffer, duplicate it and then use just the duplicate, not needing any reference to the original buffer, then your code is correct, it just looked strange from a quick look, so nevermind, I'll continue processing this one and the others.
Looks like this patch and patch 7 "perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering" got left behind. They still apply cleanly.
Arnaldo Carvalho de Melo
maintainerRe: [PATCH 6/7] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
Em Thu, Apr 05, 2018 at 09:17:01AM +0300, Adrian Hunter escreveu:
Quoted 37 lines · Arnaldo Carvalho de Melo
Quoted 36 lines
Em Wed, Mar 07, 2018 at 10:06:50AM +0200, Adrian Hunter escreveu:
Quoted 27 lines · Arnaldo Carvalho de Melo
Quoted 10 lines
Em Tue, Mar 06, 2018 at 11:13:17AM +0200, Adrian Hunter escreveu:
Quoted 9 lines
In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer()needs to be more generic. To that end, move memory allocation for struct buffer into it.Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 30 deletions(-)Quoted 15 lines
tools/perf/util/auxtrace.c static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, · line 313
Quoted 12 lines
tools/perf/util/auxtrace.c +3
-1@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,struct auxtrace_buffer *buffer, struct auxtrace_buffer **buffer_ptr) { - int err; + int err = -ENOMEM; + + buffer =memdup (buffer,sizeof (*buffer));this is a bit strange, why not make buffer a local variable in this function then?
Quoted 5 lines
Do you mean the following?
struct auxtrace_buffer *new_buf; new_buf = memdup(buffer, sizeof(*buffer));I hadn't noticed that you were using buffer as both r and l value :-\
Quoted 8 lines
Quoted 4 lines
If all you want is to receive that buffer, duplicate it and then use just the duplicate, not needing any reference to the original buffer, then your code is correct, it just looked strange from a quick look, so nevermind, I'll continue processing this one and the others.
Looks like this patch and patch 7 "perf auxtrace: Make
auxtrace_queues__add_buffer()do CPU filtering" got left behind. They still apply cleanly.
Thanks for the reminder, I'll process it.
- Arnaldo
tip-bot for Adrian Hunter
merge bot[tip:perf/urgent] perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
In reply to Adrian Hunterperf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
Commit-ID: 0d75f123a6dcdacb3550b0c3c44a283f7259289e Gitweb: https://git.kernel.org/tip/0d75f123a6dcdacb3550b0c3c44a283f7259289e Author: Adrian Hunter <[email protected]> AuthorDate: Tue, 6 Mar 2018 11:13:17 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 5 Apr 2018 11:03:33 -0300
perf auxtrace: Make auxtrace_queues__add_buffer() allocate struct buffer
In preparation for supporting AUX area sampling buffers, auxtrace_queues__add_buffer() needs to be more generic. To that end, move memory allocation for struct buffer into it.
--- tools/perf/util/auxtrace.c | 54 +++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 30 deletions(-)
tools/perf/util/auxtrace.c +24 -30
@@ -308,7 +308,11 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,struct auxtrace_buffer *buffer, struct auxtrace_buffer **buffer_ptr) { - int err; + int err = -ENOMEM; + + buffer =memdup (buffer,sizeof (*buffer)); +if (!buffer) +return -ENOMEM ;if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset +
@@ -316,24 +320,28 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, }else if (perf_data__is_pipe (session->data)) { buffer->data =auxtrace_copy_data (buffer->size, session);if (!buffer->data) -return -ENOMEM ; + goto out_free; buffer->data_needs_freeing = true; }else if (BITS_PER_LONG ==32 && buffer->size >BUFFER_LIMIT_FOR_32_BIT ) { err =auxtrace_queues__split_buffer (queues, idx, buffer);if (err) -return err; + goto out_free; } err =auxtrace_queues__queue_buffer (queues, idx, buffer);if (err) -return err; + goto out_free;/* FIXME: Doesn't work for split buffer */ if (buffer_ptr) *buffer_ptr = buffer;return 0 ; + +out_free: +auxtrace_buffer__free (buffer); +return err; }static bool filter_cpu (struct perf_session *session,int cpu)
@@ -348,36 +356,22 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, union perf_event *event, off_t data_offset, struct auxtrace_buffer **buffer_ptr) { - struct auxtrace_buffer *buffer; -unsigned int idx; -int err; + struct auxtrace_buffer buffer = { + .pid =-1 , + .tid = event->auxtrace.tid, + .cpu = event->auxtrace.cpu, + .data_offset = data_offset, + .offset = event->auxtrace.offset, + .reference = event->auxtrace.reference, + .size = event->auxtrace.size, + }; +unsigned int idx = event->auxtrace.idx;if (filter_cpu (session, event->auxtrace.cpu))return 0 ; - buffer =zalloc (sizeof (struct auxtrace_buffer )); -if (!buffer) -return -ENOMEM ; - - buffer->pid =-1 ; - buffer->tid = event->auxtrace.tid; - buffer->cpu = event->auxtrace.cpu; - buffer->data_offset = data_offset; - buffer->offset = event->auxtrace.offset; - buffer->reference = event->auxtrace.reference; - buffer->size = event->auxtrace.size; - idx = event->auxtrace.idx; - - err =auxtrace_queues__add_buffer (queues, session, idx, buffer, - buffer_ptr); -if (err) - goto out_err; - -return 0 ; - -out_err: -auxtrace_buffer__free (buffer); -return err; +return auxtrace_queues__add_buffer (queues, session, idx, &buffer, + buffer_ptr); } static int auxtrace_queues__add_indexed_event(struct auxtrace_queues *queues,
Adrian Hunter
reviewerPATCH 7/7 perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
In reply to Adrian HunterIn preparation for supporting AUX area sampling buffers, auxtrace_queues__add_buffer() needs to be more generic. To that end, move CPU filtering into it.
--- tools/perf/util/auxtrace.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
tools/perf/util/auxtrace.c +10 -10
@@ -302,6 +302,13 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,return 0 ; } +static bool filter_cpu (struct perf_session *session,int cpu) +{ +unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap; + +return cpu_bitmap && cpu !=-1 && !test_bit (cpu, cpu_bitmap); +} + static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, struct perf_session *session, unsigned int idx,
@@ -310,6 +317,9 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, {int err = -ENOMEM ; +if (filter_cpu (session, buffer->cpu)) +return 0 ; + buffer =memdup (buffer,sizeof (*buffer));if (!buffer)return -ENOMEM ;
@@ -344,13 +354,6 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,return err; } -static bool filter_cpu (struct perf_session *session,int cpu) -{ -unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap; - -return cpu_bitmap && cpu !=-1 && !test_bit (cpu, cpu_bitmap); -} - int auxtrace_queues__add_event(struct auxtrace_queues *queues, struct perf_session *session, union perf_event *event, off_t data_offset,
@@ -367,9 +370,6 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, };unsigned int idx = event->auxtrace.idx; -if (filter_cpu (session, event->auxtrace.cpu)) -return 0 ; -return auxtrace_queues__add_buffer (queues, session, idx, &buffer, buffer_ptr); }
Signature · 1 line
1.9.1
Adrian Hunter
reviewerRe: [PATCH 7/7] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
Hi Arnaldo
I just saw you have patch 6 but still not this one.
Regards
Adrian
Quoted 62 lines · Adrian Hunter
In preparation for supporting AUX area sampling buffers,
auxtrace_queues__add_buffer()needs to be more generic. To that end, move CPU filtering into it.Signed-off-by Adrian Hunter <[email protected]>--- tools/perf/util/auxtrace.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)tools/perf/util/auxtrace.c +10
-10@@ -302,6 +302,13 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,return 0 ; } +static bool filter_cpu (struct perf_session *session,int cpu) +{ +unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap; + +return cpu_bitmap && cpu !=-1 && !test_bit (cpu, cpu_bitmap); +} + static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, struct perf_session *session, unsigned int idx,@@ -310,6 +317,9 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, {int err = -ENOMEM ; +if (filter_cpu (session, buffer->cpu)) +return 0 ; + buffer =memdup (buffer,sizeof (*buffer));if (!buffer)return -ENOMEM ;@@ -344,13 +354,6 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues,return err; } -static bool filter_cpu (struct perf_session *session,int cpu) -{ -unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap; - -return cpu_bitmap && cpu !=-1 && !test_bit (cpu, cpu_bitmap); -} - int auxtrace_queues__add_event(struct auxtrace_queues *queues, struct perf_session *session, union perf_event *event, off_t data_offset,@@ -367,9 +370,6 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, };unsigned int idx = event->auxtrace.idx; -if (filter_cpu (session, event->auxtrace.cpu)) -return 0 ; -return auxtrace_queues__add_buffer (queues, session, idx, &buffer, buffer_ptr); }
tip-bot for Adrian Hunter
merge bot[tip:perf/urgent] perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
In reply to Adrian Hunterperf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
Commit-ID: b238db655796e74b59d9ece58b645ad0b494d615 Gitweb: https://git.kernel.org/tip/b238db655796e74b59d9ece58b645ad0b494d615 Author: Adrian Hunter <[email protected]> AuthorDate: Tue, 6 Mar 2018 11:13:18 +0200 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Fri, 6 Apr 2018 09:40:41 -0300
perf auxtrace: Make auxtrace_queues__add_buffer() do CPU filtering
In preparation for supporting AUX area sampling buffers, auxtrace_queues__add_buffer() needs to be more generic. To that end, move CPU filtering into it.
--- tools/perf/util/auxtrace.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
tools/perf/util/auxtrace.c +10 -10
@@ -302,6 +302,13 @@ static int auxtrace_queues__split_buffer(struct auxtrace_queues *queues,return 0 ; } +static bool filter_cpu (struct perf_session *session,int cpu) +{ +unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap; + +return cpu_bitmap && cpu !=-1 && !test_bit (cpu, cpu_bitmap); +} + static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, struct perf_session *session, unsigned int idx,
@@ -310,6 +317,9 @@ static int auxtrace_queues__add_buffer(struct auxtrace_queues *queues, {int err = -ENOMEM ; +if (filter_cpu (session, buffer->cpu)) +return 0 ; + buffer =memdup (buffer,sizeof (*buffer));if (!buffer)return -ENOMEM ;
@@ -344,13 +354,6 @@ out_free:return err; } -static bool filter_cpu (struct perf_session *session,int cpu) -{ -unsigned long *cpu_bitmap = session->itrace_synth_opts->cpu_bitmap; - -return cpu_bitmap && cpu !=-1 && !test_bit (cpu, cpu_bitmap); -} - int auxtrace_queues__add_event(struct auxtrace_queues *queues, struct perf_session *session, union perf_event *event, off_t data_offset,
@@ -367,9 +370,6 @@ int auxtrace_queues__add_event(struct auxtrace_queues *queues, };unsigned int idx = event->auxtrace.idx; -if (filter_cpu (session, event->auxtrace.cpu)) -return 0 ; -return auxtrace_queues__add_buffer (queues, session, idx, &buffer, buffer_ptr); }