On Tue, Oct 21, 2025 at 09:56:43AM +0800, Jie Gan wrote:
[...]
diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c index b07fcdb3fe1a..d0fac958c614 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c @@ -1241,6 +1241,8 @@ static struct etr_buf *tmc_etr_get_sysfs_buffer(struct coresight_device *csdev) struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); struct etr_buf *sysfs_buf = NULL, *new_buf = NULL, *free_buf = NULL;
- WARN_ON(coresight_get_mode(csdev) != CS_MODE_SYSFS);
I think we should check the WARN_ON result and exit if there is an error?
When run at here, it should be in Sysfs mode. Here the check is for debugging purpose in case any mismatch.
[...]
+static void tmc_release_mode(struct coresight_device *csdev, enum cs_mode mode) +{
- struct tmc_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
- scoped_guard(raw_spinlock_irqsave, &drvdata->spinlock);
- if (WARN_ON(coresight_get_mode(csdev) != mode))
return;the mode here could be set to any CS_MODE, so I think it's possible to encounter the secenario below:
coresight_get_mode(csdev) == CS_MODE_DISABLED, mode == CS_MODE_DISABLED,
With the condition, the csdev->refcnt will go to negative number?
The parameter "mode" might cause complexity, will drop it. The correctness will be ensured by the callers.
Thanks for review!
Leo