Message ID | 20210128170936.9222-7-mike.leach@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | CoreSight configuration management; ETM strobing | expand |
On Thu, Jan 28, 2021 at 05:09:32PM +0000, Mike Leach wrote: > Add calls to activate the selected configuration as perf starts > and stops the tracing session. > > Signed-off-by: Mike Leach <mike.leach@linaro.org> > --- > drivers/hwtracing/coresight/coresight-etm-perf.c | 14 +++++++++++++- > drivers/hwtracing/coresight/coresight-etm-perf.h | 2 ++ > 2 files changed, 15 insertions(+), 1 deletion(-) > > diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c > index e270bb1e0f7d..5c1aeddabc59 100644 > --- a/drivers/hwtracing/coresight/coresight-etm-perf.c > +++ b/drivers/hwtracing/coresight/coresight-etm-perf.c > @@ -178,6 +178,10 @@ static void free_event_data(struct work_struct *work) > /* Free the sink buffers, if there are any */ > free_sink_buffer(event_data); > > + /* clear any configuration we were using */ > + if (event_data->config_id_hash) > + cscfg_deactivate_config(event_data->config_id_hash); > + > for_each_cpu(cpu, mask) { > struct list_head **ppath; > > @@ -236,7 +240,7 @@ static void etm_free_aux(void *data) > static void *etm_setup_aux(struct perf_event *event, void **pages, > int nr_pages, bool overwrite) > { > - u32 id; > + u32 id, config_id; config_id, cfg_hash, id_hash... > int cpu = event->cpu; > cpumask_t *mask; > struct coresight_device *sink = NULL; > @@ -253,6 +257,14 @@ static void *etm_setup_aux(struct perf_event *event, void **pages, > sink = coresight_get_sink_by_id(id); > } > > + /* check if user wants a coresight configuration selected */ > + config_id = (u32)((event->attr.config2 & GENMASK_ULL(63, 32)) >> 32); > + if (config_id) { > + if (cscfg_activate_config(config_id)) > + goto err; > + event_data->config_id_hash = config_id; > + } > + > mask = &event_data->mask; > > /* > diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.h b/drivers/hwtracing/coresight/coresight-etm-perf.h > index 3646a3837a0b..751d768939d8 100644 > --- a/drivers/hwtracing/coresight/coresight-etm-perf.h > +++ b/drivers/hwtracing/coresight/coresight-etm-perf.h > @@ -49,12 +49,14 @@ struct etm_filters { > * @work: Handle to free allocated memory outside IRQ context. > * @mask: Hold the CPU(s) this event was set for. > * @snk_config: The sink configuration. > + * @config_id_hash: The id of any coresight config selected. > * @path: An array of path, each slot for one CPU. > */ > struct etm_event_data { > struct work_struct work; > cpumask_t mask; > void *snk_config; > + u32 config_id_hash; Please align this with the naming convention you will be using above and throughout. More comments tomorrow. Thanks, Mathieu > struct list_head * __percpu *path; > }; > > -- > 2.17.1 >
Hi Mathieu, On Thu, 25 Feb 2021 at 21:51, Mathieu Poirier <mathieu.poirier@linaro.org> wrote: > > On Thu, Jan 28, 2021 at 05:09:32PM +0000, Mike Leach wrote: > > Add calls to activate the selected configuration as perf starts > > and stops the tracing session. > > > > Signed-off-by: Mike Leach <mike.leach@linaro.org> > > --- > > drivers/hwtracing/coresight/coresight-etm-perf.c | 14 +++++++++++++- > > drivers/hwtracing/coresight/coresight-etm-perf.h | 2 ++ > > 2 files changed, 15 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c > > index e270bb1e0f7d..5c1aeddabc59 100644 > > --- a/drivers/hwtracing/coresight/coresight-etm-perf.c > > +++ b/drivers/hwtracing/coresight/coresight-etm-perf.c > > @@ -178,6 +178,10 @@ static void free_event_data(struct work_struct *work) > > /* Free the sink buffers, if there are any */ > > free_sink_buffer(event_data); > > > > + /* clear any configuration we were using */ > > + if (event_data->config_id_hash) > > + cscfg_deactivate_config(event_data->config_id_hash); > > + > > for_each_cpu(cpu, mask) { > > struct list_head **ppath; > > > > @@ -236,7 +240,7 @@ static void etm_free_aux(void *data) > > static void *etm_setup_aux(struct perf_event *event, void **pages, > > int nr_pages, bool overwrite) > > { > > - u32 id; > > + u32 id, config_id; > > config_id, cfg_hash, id_hash... > OK - I'll get the naming consistent. > > int cpu = event->cpu; > > cpumask_t *mask; > > struct coresight_device *sink = NULL; > > @@ -253,6 +257,14 @@ static void *etm_setup_aux(struct perf_event *event, void **pages, > > sink = coresight_get_sink_by_id(id); > > } > > > > + /* check if user wants a coresight configuration selected */ > > + config_id = (u32)((event->attr.config2 & GENMASK_ULL(63, 32)) >> 32); > > + if (config_id) { > > + if (cscfg_activate_config(config_id)) > > + goto err; > > + event_data->config_id_hash = config_id; > > + } > > + > > mask = &event_data->mask; > > > > /* > > diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.h b/drivers/hwtracing/coresight/coresight-etm-perf.h > > index 3646a3837a0b..751d768939d8 100644 > > --- a/drivers/hwtracing/coresight/coresight-etm-perf.h > > +++ b/drivers/hwtracing/coresight/coresight-etm-perf.h > > @@ -49,12 +49,14 @@ struct etm_filters { > > * @work: Handle to free allocated memory outside IRQ context. > > * @mask: Hold the CPU(s) this event was set for. > > * @snk_config: The sink configuration. > > + * @config_id_hash: The id of any coresight config selected. > > * @path: An array of path, each slot for one CPU. > > */ > > struct etm_event_data { > > struct work_struct work; > > cpumask_t mask; > > void *snk_config; > > + u32 config_id_hash; > > Please align this with the naming convention you will be using above and > throughout. > > More comments tomorrow. > > Thanks, > Mathieu > > > struct list_head * __percpu *path; > > }; > > > > -- > > 2.17.1 > > Thanks Mike
On 1/28/21 5:09 PM, Mike Leach wrote: > Add calls to activate the selected configuration as perf starts > and stops the tracing session. > > Signed-off-by: Mike Leach <mike.leach@linaro.org> Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.c b/drivers/hwtracing/coresight/coresight-etm-perf.c index e270bb1e0f7d..5c1aeddabc59 100644 --- a/drivers/hwtracing/coresight/coresight-etm-perf.c +++ b/drivers/hwtracing/coresight/coresight-etm-perf.c @@ -178,6 +178,10 @@ static void free_event_data(struct work_struct *work) /* Free the sink buffers, if there are any */ free_sink_buffer(event_data); + /* clear any configuration we were using */ + if (event_data->config_id_hash) + cscfg_deactivate_config(event_data->config_id_hash); + for_each_cpu(cpu, mask) { struct list_head **ppath; @@ -236,7 +240,7 @@ static void etm_free_aux(void *data) static void *etm_setup_aux(struct perf_event *event, void **pages, int nr_pages, bool overwrite) { - u32 id; + u32 id, config_id; int cpu = event->cpu; cpumask_t *mask; struct coresight_device *sink = NULL; @@ -253,6 +257,14 @@ static void *etm_setup_aux(struct perf_event *event, void **pages, sink = coresight_get_sink_by_id(id); } + /* check if user wants a coresight configuration selected */ + config_id = (u32)((event->attr.config2 & GENMASK_ULL(63, 32)) >> 32); + if (config_id) { + if (cscfg_activate_config(config_id)) + goto err; + event_data->config_id_hash = config_id; + } + mask = &event_data->mask; /* diff --git a/drivers/hwtracing/coresight/coresight-etm-perf.h b/drivers/hwtracing/coresight/coresight-etm-perf.h index 3646a3837a0b..751d768939d8 100644 --- a/drivers/hwtracing/coresight/coresight-etm-perf.h +++ b/drivers/hwtracing/coresight/coresight-etm-perf.h @@ -49,12 +49,14 @@ struct etm_filters { * @work: Handle to free allocated memory outside IRQ context. * @mask: Hold the CPU(s) this event was set for. * @snk_config: The sink configuration. + * @config_id_hash: The id of any coresight config selected. * @path: An array of path, each slot for one CPU. */ struct etm_event_data { struct work_struct work; cpumask_t mask; void *snk_config; + u32 config_id_hash; struct list_head * __percpu *path; };
Add calls to activate the selected configuration as perf starts and stops the tracing session. Signed-off-by: Mike Leach <mike.leach@linaro.org> --- drivers/hwtracing/coresight/coresight-etm-perf.c | 14 +++++++++++++- drivers/hwtracing/coresight/coresight-etm-perf.h | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-)