[PATCH v4 5/9] coresight: etm4x: remove redundant call etm4_enable_hw() with hotplug

From: Yeoreum Yun

Date: Mon Apr 13 2026 - 10:20:43 EST


The cpu_online_mask is set at the CPUHP_BRINGUP_CPU step.
In other words, if etm4_enable_sysfs() is called between
CPUHP_BRINGUP_CPU and CPUHP_AP_ARM_CORESIGHT_STARTING,
etm4_enable_hw() may be invoked in etm4_enable_sysfs_smp_call()
and then executed again in etm4_starting_cpu().

To remove this redundant call, take the hotplug lock before executing
etm4_enable_sysfs_smp_call().

Signed-off-by: Yeoreum Yun <yeoreum.yun@xxxxxxx>
---
drivers/hwtracing/coresight/coresight-etm4x-core.c | 12 ++++++++++++
1 file changed, 12 insertions(+)

diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
index 01099689525b..facd5a306228 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
@@ -959,8 +959,20 @@ static int etm4_enable_sysfs(struct coresight_device *csdev, struct coresight_pa
arg.config = drvdata->config;
raw_spin_unlock(&drvdata->spinlock);

+ /*
+ * Take the hotplug lock to prevent redundant calls to etm4_enable_hw().
+ *
+ * The cpu_online_mask is set at the CPUHP_BRINGUP_CPU step.
+ * In other words, if etm4_enable_sysfs() is called between
+ * CPUHP_BRINGUP_CPU and CPUHP_AP_ARM_CORESIGHT_STARTING,
+ * etm4_enable_hw() may be invoked in etm4_enable_sysfs_smp_call()
+ * and then executed again in etm4_starting_cpu().
+ */
+ cpus_read_lock();
ret = smp_call_function_single(drvdata->cpu,
etm4_enable_sysfs_smp_call, &arg, 1);
+ cpus_read_unlock();
+
if (!ret)
ret = arg.rc;
if (!ret)
--
LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}