[PATCH v8 08/13] coresight: etm4x: fix inconsistencies with sysfs configuration

Suzuki K Poulose suzuki.poulose at arm.com
Thu Jul 16 05:41:19 PDT 2026


On 06/07/2026 18:39, Leo Yan wrote:
> On Mon, Jun 29, 2026 at 10:00:01AM +0100, Yeoreum Yun wrote:
> 
> [...]
> 
>> @@ -922,25 +950,7 @@ static int etm4_enable_sysfs(struct coresight_device *csdev, struct coresight_pa
>>   {
>>   	struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
>>   	struct etm4_enable_arg arg = { };
>> -	unsigned long cfg_hash;
>> -	int ret, preset;
>> -
>> -	/* enable any config activated by configfs */
>> -	cscfg_config_sysfs_get_active_cfg(&cfg_hash, &preset);
>> -	if (cfg_hash) {
>> -		ret = cscfg_csdev_enable_active_config(csdev, cfg_hash, preset);
>> -		if (ret) {
>> -			etm4_release_trace_id(drvdata);
>> -			return ret;
>> -		}
>> -	}
>> -
>> -	raw_spin_lock(&drvdata->spinlock);
>> -
>> -	drvdata->trcid = path->trace_id;
>> -
>> -	/* Tracer will never be paused in sysfs mode */
>> -	drvdata->paused = false;
>> +	int ret;
>>   
>>   	/*
>>   	 * Executing etm4_enable_hw on the cpu whose ETM is being enabled
>> @@ -948,20 +958,20 @@ static int etm4_enable_sysfs(struct coresight_device *csdev, struct coresight_pa
>>   	 */
>>   	arg.drvdata = drvdata;
>>   	arg.path = path;
>> +
>> +	raw_spin_lock(&drvdata->spinlock);
>> +	arg.config = drvdata->config;
>> +	raw_spin_unlock(&drvdata->spinlock);
>> +
>>   	ret = smp_call_function_single(drvdata->cpu,
>>   				       etm4_enable_sysfs_smp_call, &arg, 1);
>>   	if (!ret)
>>   		ret = arg.rc;
>>   	if (!ret)
>> -		drvdata->sticky_enable = true;
>> -
>> -	if (ret)
>> +		dev_dbg(&csdev->dev, "ETM tracing enabled\n");
>> +	else
>>   		etm4_release_trace_id(drvdata);
>>   
>> -	raw_spin_unlock(&drvdata->spinlock);
>> -
>> -	if (!ret)
>> -		dev_dbg(&csdev->dev, "ETM tracing enabled\n");
>>   	return ret;
>>   }
> 
> This is most valuable change for me, as now we will have much clear
> scope for what is protected ("drvdata->config").
> 
> However, a corner case was mentioned by Sashiko:
> 
>   | It appears etm4_enable_hw() modifies drvdata->ss_status while executing
>   | via IPI, but sshot_ctrl_store() can modify the same array concurrently

Could we stop modifying the drvdata->ss_status in enable_hw() ? We moved
it outside the config claiming that the status is not used(or useful). #
Then why not remove the updating from enable_hw()

Suzuki


>   | from process context since the lock is no longer held across the
>   | smp_call_function_single() call.
> 
> "drvdata->ss_status" is a race condition between SMP call and sysfs
> knobs. Should we change to spinlock_irqsave/irqrestore when access
> drvdata->ss_status?
> 
> Thanks,
> Leo




More information about the linux-arm-kernel mailing list