Message ID | 20240604143030.519906-3-james.clark@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | coresight: Use per-sink trace ID maps for Perf sessions | expand |
On 4/06/24 17:30, James Clark wrote: > Currently it's only possible to initialize with the default number of > queues and then use auxtrace_queues__add_event() to grow the array. But > that's problematic if you don't have a real event to pass into that > function yet. > > The queues hold a void *priv member to store custom state, and for > Coresight we want to create decoders upfront before receiving data, so > add a new function that allows pre-allocating queues. One reason to do > this is because we might need to store metadata (HW_ID events) that > effects other queues, but never actually receive auxtrace data on that > queue. > > Signed-off-by: James Clark <james.clark@arm.com> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Again ;-) > --- > tools/perf/util/auxtrace.c | 9 +++++++-- > tools/perf/util/auxtrace.h | 1 + > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c > index 3684e6009b63..563b6c4fca31 100644 > --- a/tools/perf/util/auxtrace.c > +++ b/tools/perf/util/auxtrace.c > @@ -218,15 +218,20 @@ static struct auxtrace_queue *auxtrace_alloc_queue_array(unsigned int nr_queues) > return queue_array; > } > > -int auxtrace_queues__init(struct auxtrace_queues *queues) > +int auxtrace_queues__init_nr(struct auxtrace_queues *queues, int nr_queues) > { > - queues->nr_queues = AUXTRACE_INIT_NR_QUEUES; > + queues->nr_queues = nr_queues; > queues->queue_array = auxtrace_alloc_queue_array(queues->nr_queues); > if (!queues->queue_array) > return -ENOMEM; > return 0; > } > > +int auxtrace_queues__init(struct auxtrace_queues *queues) > +{ > + return auxtrace_queues__init_nr(queues, AUXTRACE_INIT_NR_QUEUES); > +} > + > static int auxtrace_queues__grow(struct auxtrace_queues *queues, > unsigned int new_nr_queues) > { > diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h > index 55702215a82d..8a6ec9565835 100644 > --- a/tools/perf/util/auxtrace.h > +++ b/tools/perf/util/auxtrace.h > @@ -521,6 +521,7 @@ int auxtrace_mmap__read_snapshot(struct mmap *map, > struct perf_tool *tool, process_auxtrace_t fn, > size_t snapshot_size); > > +int auxtrace_queues__init_nr(struct auxtrace_queues *queues, int nr_queues); > int auxtrace_queues__init(struct auxtrace_queues *queues); > int auxtrace_queues__add_event(struct auxtrace_queues *queues, > struct perf_session *session,
On 05/06/2024 06:26, Adrian Hunter wrote: > On 4/06/24 17:30, James Clark wrote: >> Currently it's only possible to initialize with the default number of >> queues and then use auxtrace_queues__add_event() to grow the array. But >> that's problematic if you don't have a real event to pass into that >> function yet. >> >> The queues hold a void *priv member to store custom state, and for >> Coresight we want to create decoders upfront before receiving data, so >> add a new function that allows pre-allocating queues. One reason to do >> this is because we might need to store metadata (HW_ID events) that >> effects other queues, but never actually receive auxtrace data on that >> queue. >> >> Signed-off-by: James Clark <james.clark@arm.com> > > Acked-by: Adrian Hunter <adrian.hunter@intel.com> > > Again ;-) > Oops yeah I should have picked that up. This one was already applied to perf-tools-next as well. Thanks >> --- >> tools/perf/util/auxtrace.c | 9 +++++++-- >> tools/perf/util/auxtrace.h | 1 + >> 2 files changed, 8 insertions(+), 2 deletions(-) >> >> diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c >> index 3684e6009b63..563b6c4fca31 100644 >> --- a/tools/perf/util/auxtrace.c >> +++ b/tools/perf/util/auxtrace.c >> @@ -218,15 +218,20 @@ static struct auxtrace_queue *auxtrace_alloc_queue_array(unsigned int nr_queues) >> return queue_array; >> } >> >> -int auxtrace_queues__init(struct auxtrace_queues *queues) >> +int auxtrace_queues__init_nr(struct auxtrace_queues *queues, int nr_queues) >> { >> - queues->nr_queues = AUXTRACE_INIT_NR_QUEUES; >> + queues->nr_queues = nr_queues; >> queues->queue_array = auxtrace_alloc_queue_array(queues->nr_queues); >> if (!queues->queue_array) >> return -ENOMEM; >> return 0; >> } >> >> +int auxtrace_queues__init(struct auxtrace_queues *queues) >> +{ >> + return auxtrace_queues__init_nr(queues, AUXTRACE_INIT_NR_QUEUES); >> +} >> + >> static int auxtrace_queues__grow(struct auxtrace_queues *queues, >> unsigned int new_nr_queues) >> { >> diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h >> index 55702215a82d..8a6ec9565835 100644 >> --- a/tools/perf/util/auxtrace.h >> +++ b/tools/perf/util/auxtrace.h >> @@ -521,6 +521,7 @@ int auxtrace_mmap__read_snapshot(struct mmap *map, >> struct perf_tool *tool, process_auxtrace_t fn, >> size_t snapshot_size); >> >> +int auxtrace_queues__init_nr(struct auxtrace_queues *queues, int nr_queues); >> int auxtrace_queues__init(struct auxtrace_queues *queues); >> int auxtrace_queues__add_event(struct auxtrace_queues *queues, >> struct perf_session *session, >
diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c index 3684e6009b63..563b6c4fca31 100644 --- a/tools/perf/util/auxtrace.c +++ b/tools/perf/util/auxtrace.c @@ -218,15 +218,20 @@ static struct auxtrace_queue *auxtrace_alloc_queue_array(unsigned int nr_queues) return queue_array; } -int auxtrace_queues__init(struct auxtrace_queues *queues) +int auxtrace_queues__init_nr(struct auxtrace_queues *queues, int nr_queues) { - queues->nr_queues = AUXTRACE_INIT_NR_QUEUES; + queues->nr_queues = nr_queues; queues->queue_array = auxtrace_alloc_queue_array(queues->nr_queues); if (!queues->queue_array) return -ENOMEM; return 0; } +int auxtrace_queues__init(struct auxtrace_queues *queues) +{ + return auxtrace_queues__init_nr(queues, AUXTRACE_INIT_NR_QUEUES); +} + static int auxtrace_queues__grow(struct auxtrace_queues *queues, unsigned int new_nr_queues) { diff --git a/tools/perf/util/auxtrace.h b/tools/perf/util/auxtrace.h index 55702215a82d..8a6ec9565835 100644 --- a/tools/perf/util/auxtrace.h +++ b/tools/perf/util/auxtrace.h @@ -521,6 +521,7 @@ int auxtrace_mmap__read_snapshot(struct mmap *map, struct perf_tool *tool, process_auxtrace_t fn, size_t snapshot_size); +int auxtrace_queues__init_nr(struct auxtrace_queues *queues, int nr_queues); int auxtrace_queues__init(struct auxtrace_queues *queues); int auxtrace_queues__add_event(struct auxtrace_queues *queues, struct perf_session *session,
Currently it's only possible to initialize with the default number of queues and then use auxtrace_queues__add_event() to grow the array. But that's problematic if you don't have a real event to pass into that function yet. The queues hold a void *priv member to store custom state, and for Coresight we want to create decoders upfront before receiving data, so add a new function that allows pre-allocating queues. One reason to do this is because we might need to store metadata (HW_ID events) that effects other queues, but never actually receive auxtrace data on that queue. Signed-off-by: James Clark <james.clark@arm.com> --- tools/perf/util/auxtrace.c | 9 +++++++-- tools/perf/util/auxtrace.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-)