[PATCH] coresight: cti: Check if the CPU activated for the CPU CTI

Tao Zhang posted 1 patch 2 years, 10 months ago
drivers/hwtracing/coresight/coresight-cti-core.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
[PATCH] coresight: cti: Check if the CPU activated for the CPU CTI
Posted by Tao Zhang 2 years, 10 months ago
Check whether the CPU corresponding to the CPU CTI is activated.
If it is not activated, the CPU CTI node should not exist, and
an error will be returned in the initialization function.

Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
---
 drivers/hwtracing/coresight/coresight-cti-core.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/hwtracing/coresight/coresight-cti-core.c b/drivers/hwtracing/coresight/coresight-cti-core.c
index 277c890..aaa83ae 100644
--- a/drivers/hwtracing/coresight/coresight-cti-core.c
+++ b/drivers/hwtracing/coresight/coresight-cti-core.c
@@ -899,10 +899,12 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
 	drvdata->config.hw_powered = true;
 
 	/* set up device name - will depend if cpu bound or otherwise */
-	if (drvdata->ctidev.cpu >= 0)
+	if (drvdata->ctidev.cpu >= 0) {
+		if (!cpu_active(drvdata->ctidev.cpu))
+			return -ENXIO;
 		cti_desc.name = devm_kasprintf(dev, GFP_KERNEL, "cti_cpu%d",
 					       drvdata->ctidev.cpu);
-	else
+	} else
 		cti_desc.name = coresight_alloc_device_name(&cti_sys_devs, dev);
 	if (!cti_desc.name)
 		return -ENOMEM;
-- 
2.7.4
Re: [PATCH] coresight: cti: Check if the CPU activated for the CPU CTI
Posted by Suzuki K Poulose 2 years, 10 months ago
On 27/03/2023 10:49, Tao Zhang wrote:
> Check whether the CPU corresponding to the CPU CTI is activated.
> If it is not activated, the CPU CTI node should not exist, and
> an error will be returned in the initialization function.
> 
> Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
> ---
>   drivers/hwtracing/coresight/coresight-cti-core.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/hwtracing/coresight/coresight-cti-core.c b/drivers/hwtracing/coresight/coresight-cti-core.c
> index 277c890..aaa83ae 100644
> --- a/drivers/hwtracing/coresight/coresight-cti-core.c
> +++ b/drivers/hwtracing/coresight/coresight-cti-core.c
> @@ -899,10 +899,12 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
>   	drvdata->config.hw_powered = true;
>   
>   	/* set up device name - will depend if cpu bound or otherwise */
> -	if (drvdata->ctidev.cpu >= 0)
> +	if (drvdata->ctidev.cpu >= 0) {
> +		if (!cpu_active(drvdata->ctidev.cpu))
> +			return -ENXIO;
>   		cti_desc.name = devm_kasprintf(dev, GFP_KERNEL, "cti_cpu%d",
>   					       drvdata->ctidev.cpu);

But why ? As long as we do not enable or touch any CPU specific bits in 
the probe, why do we need to fail this ? What are you trying to fix ?

Please could you share the log if you are hitting something ? This looks
like masking a problem.

Suzuki


> -	else
> +	} else
>   		cti_desc.name = coresight_alloc_device_name(&cti_sys_devs, dev);
>   	if (!cti_desc.name)
>   		return -ENOMEM;