On Tue, 11 Mar 2025 at 17:05, Leo Yan <leo.yan@xxxxxxx> wrote: > > Introduce APIs for pausing and resuming trace source and export as GPL > symbols. > > Signed-off-by: Leo Yan <leo.yan@xxxxxxx> > --- > drivers/hwtracing/coresight/coresight-core.c | 22 ++++++++++++++++++++ > drivers/hwtracing/coresight/coresight-priv.h | 2 ++ > include/linux/coresight.h | 4 ++++ > 3 files changed, 28 insertions(+) > > diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c > index fb43ef6a3b1f..d4c3000608f2 100644 > --- a/drivers/hwtracing/coresight/coresight-core.c > +++ b/drivers/hwtracing/coresight/coresight-core.c > @@ -367,6 +367,28 @@ void coresight_disable_source(struct coresight_device *csdev, void *data) > } > EXPORT_SYMBOL_GPL(coresight_disable_source); > > +void coresight_pause_source(struct coresight_device *csdev) > +{ > + if (!coresight_is_percpu_source(csdev)) > + return; > + > + if (source_ops(csdev)->pause_perf) > + source_ops(csdev)->pause_perf(csdev); > +} > +EXPORT_SYMBOL_GPL(coresight_pause_source); > + > +int coresight_resume_source(struct coresight_device *csdev) > +{ > + if (!coresight_is_percpu_source(csdev)) > + return -EOPNOTSUPP; > + > + if (!source_ops(csdev)->resume_perf) > + return -EOPNOTSUPP; > + > + return source_ops(csdev)->resume_perf(csdev); > +} > +EXPORT_SYMBOL_GPL(coresight_resume_source); > + > /* > * coresight_disable_path_from : Disable components in the given path beyond > * @nd in the list. If @nd is NULL, all the components, except the SOURCE are > diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtracing/coresight/coresight-priv.h > index 82644aff8d2b..2d9baa9d8228 100644 > --- a/drivers/hwtracing/coresight/coresight-priv.h > +++ b/drivers/hwtracing/coresight/coresight-priv.h > @@ -249,5 +249,7 @@ void coresight_add_helper(struct coresight_device *csdev, > void coresight_set_percpu_sink(int cpu, struct coresight_device *csdev); > struct coresight_device *coresight_get_percpu_sink(int cpu); > void coresight_disable_source(struct coresight_device *csdev, void *data); > +void coresight_pause_source(struct coresight_device *csdev); > +int coresight_resume_source(struct coresight_device *csdev); > > #endif > diff --git a/include/linux/coresight.h b/include/linux/coresight.h > index d79a242b271d..c95c72e07e02 100644 > --- a/include/linux/coresight.h > +++ b/include/linux/coresight.h > @@ -398,6 +398,8 @@ struct coresight_ops_link { > * is associated to. > * @enable: enables tracing for a source. > * @disable: disables tracing for a source. > + * @resume_perf: resumes tracing for a source in perf session. > + * @pause_perf: pauses tracing for a source in perf session. > */ > struct coresight_ops_source { > int (*cpu_id)(struct coresight_device *csdev); > @@ -405,6 +407,8 @@ struct coresight_ops_source { > enum cs_mode mode, struct coresight_path *path); > void (*disable)(struct coresight_device *csdev, > struct perf_event *event); > + int (*resume_perf)(struct coresight_device *csdev); > + void (*pause_perf)(struct coresight_device *csdev); > }; > > /** > -- > 2.34.1 > Reviewed-by: Mike Leach <mike.leach@xxxxxxxxxx> -- Mike Leach Principal Engineer, ARM Ltd. Manchester Design Centre. UK