[PATCH v6 13/19] coresight: Add 'in_idle' argument to path

Suzuki K Poulose suzuki.poulose at arm.com
Fri Mar 13 07:37:49 PDT 2026


On 05/03/2026 10:17, Leo Yan wrote:
> Introduce an 'in_idle' argument to the path.  When set to true for idle
> flow, it skips to touch the sink device to avoid long latency caused by
> the sink operations.
> 
> This is a preparation for managing the path during CPU idle.
> 
> Tested-by: James Clark <james.clark at linaro.org>
> Signed-off-by: Leo Yan <leo.yan at arm.com>

Does this need to be saved in the path ?  Could we solve this by doing 
something like :

coresight_disable_path_till(coresight_path, list_head* end)

Disable path till "end" node.

coresight_disable_path(path)
{
   coresight_disable_path_till(path, coresight_get_sink(path);
}

Suzuki

> ---
>   drivers/hwtracing/coresight/coresight-core.c | 17 +++++++++++++----
>   include/linux/coresight.h                    |  2 ++
>   2 files changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c
> index 80489d38f690e0139c8712161c663ee63a8a7fb3..420e5a9cf38e64f133aa6780987d2d7c2804feb4 100644
> --- a/drivers/hwtracing/coresight/coresight-core.c
> +++ b/drivers/hwtracing/coresight/coresight-core.c
> @@ -531,6 +531,10 @@ static void coresight_disable_path_from(struct coresight_path *path,
>   						CORESIGHT_DEV_TYPE_SINK :
>   						CORESIGHT_DEV_TYPE_LINK;
>   
> +		/* To reduce latency, CPU idle does not touch the sink */
> +		if (path->in_idle && type == CORESIGHT_DEV_TYPE_SINK)
> +			continue;
> +
>   		switch (type) {
>   		case CORESIGHT_DEV_TYPE_SINK:
>   			coresight_disable_sink(csdev);
> @@ -597,10 +601,6 @@ int coresight_enable_path(struct coresight_path *path, enum cs_mode mode)
>   		csdev = nd->csdev;
>   		type = csdev->type;
>   
> -		/* Enable all helpers adjacent to the path first */
> -		ret = coresight_enable_helpers(csdev, mode, path);
> -		if (ret)
> -			goto err_disable_path;
>   		/*
>   		 * ETF devices are tricky... They can be a link or a sink,
>   		 * depending on how they are configured.  If an ETF has been
> @@ -612,6 +612,15 @@ int coresight_enable_path(struct coresight_path *path, enum cs_mode mode)
>   						CORESIGHT_DEV_TYPE_SINK :
>   						CORESIGHT_DEV_TYPE_LINK;
>   
> +		/* To reduce latency, CPU idle does not touch the sink */
> +		if (path->in_idle && type == CORESIGHT_DEV_TYPE_SINK)
> +			continue;
> +
> +		/* Enable all helpers adjacent to the path first */
> +		ret = coresight_enable_helpers(csdev, mode, path);
> +		if (ret)
> +			goto err_disable_path;
> +
>   		switch (type) {
>   		case CORESIGHT_DEV_TYPE_SINK:
>   			ret = coresight_enable_sink(csdev, mode, path);
> diff --git a/include/linux/coresight.h b/include/linux/coresight.h
> index 96a1af3425a5d588fccb185a428cef5c88febdbd..5f778cd41e6bbb58393278f72feeaedabb0094d2 100644
> --- a/include/linux/coresight.h
> +++ b/include/linux/coresight.h
> @@ -332,11 +332,13 @@ struct coresight_dev_list {
>    * @path_list:		path from source to sink.
>    * @trace_id:		trace_id of the whole path.
>    * @handle:		handle of the aux_event.
> + * @in_idle:		A flag to indicate if it is in CPU idle.
>    */
>   struct coresight_path {
>   	struct list_head		path_list;
>   	u8				trace_id;
>   	struct perf_output_handle	*handle;
> +	bool				in_idle;
>   };
>   
>   enum cs_mode {
> 




More information about the linux-arm-kernel mailing list