The ETMv3 driver shares the same issue as ETMv4 regarding race
conditions when accessing the device mode.
This commit applies the same fix: ensuring that the device mode is
modified only by the target CPU to eliminate race conditions across
CPUs.
Fixes: 22fd532eaa0c ("coresight: etm3x: adding operation mode for etm_enable()")
Signed-off-by: Leo Yan <leo.yan@arm.com>
---
drivers/hwtracing/coresight/coresight-etm3x-core.c | 60 +++++++++++++++-------
1 file changed, 42 insertions(+), 18 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-etm3x-core.c b/drivers/hwtracing/coresight/coresight-etm3x-core.c
index 1c6204e1442211be6f3d7ca34bd2251ba796601b..0f160f2f97344e6a96343cd8658f4f19806193e0 100644
--- a/drivers/hwtracing/coresight/coresight-etm3x-core.c
+++ b/drivers/hwtracing/coresight/coresight-etm3x-core.c
@@ -442,10 +442,23 @@ struct etm_enable_arg {
static void etm_enable_hw_smp_call(void *info)
{
struct etm_enable_arg *arg = info;
+ struct coresight_device *csdev;
if (WARN_ON(!arg))
return;
+
+ csdev = arg->drvdata->csdev;
+ if (!coresight_take_mode(csdev, CS_MODE_SYSFS)) {
+ /* Someone is already using the tracer */
+ arg->rc = -EBUSY;
+ return;
+ }
+
arg->rc = etm_enable_hw(arg->drvdata);
+
+ /* The tracer didn't start */
+ if (arg->rc)
+ coresight_set_mode(csdev, CS_MODE_DISABLED);
}
static int etm_cpu_id(struct coresight_device *csdev)
@@ -464,17 +477,29 @@ static int etm_enable_perf(struct coresight_device *csdev,
struct perf_event *event,
struct coresight_path *path)
{
+ int ret = 0;
struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
- if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id()))
- return -EINVAL;
+ if (!coresight_take_mode(csdev, CS_MODE_PERF))
+ return -EBUSY;
+
+ if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id())) {
+ ret = -EINVAL;
+ goto out;
+ }
/* Configure the tracer based on the session's specifics */
etm_parse_event_config(drvdata, event);
drvdata->traceid = path->trace_id;
/* And enable it */
- return etm_enable_hw(drvdata);
+ ret = etm_enable_hw(drvdata);
+
+out:
+ /* The tracer didn't start */
+ if (ret)
+ coresight_set_mode(csdev, CS_MODE_DISABLED);
+ return ret;
}
static int etm_enable_sysfs(struct coresight_device *csdev, struct coresight_path *path)
@@ -519,11 +544,6 @@ static int etm_enable(struct coresight_device *csdev, struct perf_event *event,
int ret;
struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
- if (!coresight_take_mode(csdev, mode)) {
- /* Someone is already using the tracer */
- return -EBUSY;
- }
-
switch (mode) {
case CS_MODE_SYSFS:
ret = etm_enable_sysfs(csdev, path);
@@ -535,17 +555,12 @@ static int etm_enable(struct coresight_device *csdev, struct perf_event *event,
ret = -EINVAL;
}
- /* The tracer didn't start */
- if (ret)
- coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
-
return ret;
}
-static void etm_disable_hw(void *info)
+static void etm_disable_hw(struct etmv4_drvdata *drvdata)
{
int i;
- struct etm_drvdata *drvdata = info;
struct etm_config *config = &drvdata->config;
struct coresight_device *csdev = drvdata->csdev;
@@ -567,6 +582,15 @@ static void etm_disable_hw(void *info)
"cpu: %d disable smp call done\n", drvdata->cpu);
}
+static void etm_disable_hw_smp_call(void *info)
+{
+ struct etmv_drvdata *drvdata = info;
+
+ etm_disable_hw(drvdata);
+
+ coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
+}
+
static void etm_disable_perf(struct coresight_device *csdev)
{
struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
@@ -588,6 +612,8 @@ static void etm_disable_perf(struct coresight_device *csdev)
CS_LOCK(drvdata->csa.base);
+ coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
+
/*
* perf will release trace ids when _free_aux()
* is called at the end of the session
@@ -612,7 +638,8 @@ static void etm_disable_sysfs(struct coresight_device *csdev)
* Executing etm_disable_hw on the cpu whose ETM is being disabled
* ensures that register writes occur when cpu is powered.
*/
- smp_call_function_single(drvdata->cpu, etm_disable_hw, drvdata, 1);
+ smp_call_function_single(drvdata->cpu, etm_disable_hw_smp_call,
+ drvdata, 1);
spin_unlock(&drvdata->spinlock);
cpus_read_unlock();
@@ -652,9 +679,6 @@ static void etm_disable(struct coresight_device *csdev,
WARN_ON_ONCE(mode);
return;
}
-
- if (mode)
- coresight_set_mode(csdev, CS_MODE_DISABLED);
}
static const struct coresight_ops_source etm_source_ops = {
--
2.34.1
Hi Leo,
[...]
> @@ -464,17 +477,29 @@ static int etm_enable_perf(struct coresight_device *csdev,
> struct perf_event *event,
> struct coresight_path *path)
> {
> + int ret = 0;
> struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
>
> - if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id()))
> - return -EINVAL;
> + if (!coresight_take_mode(csdev, CS_MODE_PERF))
> + return -EBUSY;
> +
> + if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id())) {
> + ret = -EINVAL;
> + goto out;
> + }
Small question: why drvdata->cpu != smp_processor_id() check after
changing mode? Would it better to check before change of it?
>
> /* Configure the tracer based on the session's specifics */
> etm_parse_event_config(drvdata, event);
> drvdata->traceid = path->trace_id;
>
> /* And enable it */
> - return etm_enable_hw(drvdata);
> + ret = etm_enable_hw(drvdata);
> +
> +out:
> + /* The tracer didn't start */
> + if (ret)
> + coresight_set_mode(csdev, CS_MODE_DISABLED);
> + return ret;
> }
>
> static int etm_enable_sysfs(struct coresight_device *csdev, struct coresight_path *path)
> @@ -519,11 +544,6 @@ static int etm_enable(struct coresight_device *csdev, struct perf_event *event,
> int ret;
> struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
>
> - if (!coresight_take_mode(csdev, mode)) {
> - /* Someone is already using the tracer */
> - return -EBUSY;
> - }
> -
> switch (mode) {
> case CS_MODE_SYSFS:
> ret = etm_enable_sysfs(csdev, path);
> @@ -535,17 +555,12 @@ static int etm_enable(struct coresight_device *csdev, struct perf_event *event,
> ret = -EINVAL;
> }
>
> - /* The tracer didn't start */
> - if (ret)
> - coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
> -
> return ret;
> }
>
> -static void etm_disable_hw(void *info)
> +static void etm_disable_hw(struct etmv4_drvdata *drvdata)
> {
> int i;
> - struct etm_drvdata *drvdata = info;
> struct etm_config *config = &drvdata->config;
> struct coresight_device *csdev = drvdata->csdev;
>
> @@ -567,6 +582,15 @@ static void etm_disable_hw(void *info)
> "cpu: %d disable smp call done\n", drvdata->cpu);
> }
>
> +static void etm_disable_hw_smp_call(void *info)
> +{
> + struct etmv_drvdata *drvdata = info;
> +
> + etm_disable_hw(drvdata);
> +
> + coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
> +}
> +
> static void etm_disable_perf(struct coresight_device *csdev)
> {
> struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
> @@ -588,6 +612,8 @@ static void etm_disable_perf(struct coresight_device *csdev)
>
> CS_LOCK(drvdata->csa.base);
>
> + coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
> +
> /*
> * perf will release trace ids when _free_aux()
> * is called at the end of the session
> @@ -612,7 +638,8 @@ static void etm_disable_sysfs(struct coresight_device *csdev)
> * Executing etm_disable_hw on the cpu whose ETM is being disabled
> * ensures that register writes occur when cpu is powered.
> */
> - smp_call_function_single(drvdata->cpu, etm_disable_hw, drvdata, 1);
> + smp_call_function_single(drvdata->cpu, etm_disable_hw_smp_call,
> + drvdata, 1);
>
> spin_unlock(&drvdata->spinlock);
> cpus_read_unlock();
> @@ -652,9 +679,6 @@ static void etm_disable(struct coresight_device *csdev,
> WARN_ON_ONCE(mode);
> return;
> }
> -
> - if (mode)
> - coresight_set_mode(csdev, CS_MODE_DISABLED);
> }
>
> static const struct coresight_ops_source etm_source_ops = {
>
> --
> 2.34.1
>
--
Sincerely,
Yeoreum Yun
On Wed, Jul 02, 2025 at 11:18:21AM +0100, Yeoreum Yun wrote:
> Hi Leo,
>
> [...]
> > @@ -464,17 +477,29 @@ static int etm_enable_perf(struct coresight_device *csdev,
> > struct perf_event *event,
> > struct coresight_path *path)
> > {
> > + int ret = 0;
> > struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
> >
> > - if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id()))
> > - return -EINVAL;
> > + if (!coresight_take_mode(csdev, CS_MODE_PERF))
> > + return -EBUSY;
> > +
> > + if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id())) {
> > + ret = -EINVAL;
> > + goto out;
> > + }
>
> Small question: why drvdata->cpu != smp_processor_id() check after
> changing mode? Would it better to check before change of it?
You are right. I will update in next version.
Thanks for pointing out this!
Leo
Hi Leo,
kernel test robot noticed the following build errors:
[auto build test ERROR on 66701750d5565c574af42bef0b789ce0203e3071]
url: https://github.com/intel-lab-lkp/linux/commits/Leo-Yan/coresight-Change-device-mode-to-atomic-type/20250701-230354
base: 66701750d5565c574af42bef0b789ce0203e3071
patch link: https://lore.kernel.org/r/20250701-arm_cs_pm_fix_v3-v2-3-23ebb864fcc1%40arm.com
patch subject: [PATCH v2 03/28] coresight: etm3x: Always set tracer's device mode on target CPU
config: arm-randconfig-004-20250702 (https://download.01.org/0day-ci/archive/20250702/202507021124.opIH3gFn-lkp@intel.com/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250702/202507021124.opIH3gFn-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507021124.opIH3gFn-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
drivers/hwtracing/coresight/coresight-etm3x-core.c:545:22: warning: unused variable 'drvdata' [-Wunused-variable]
545 | struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
| ^~~~~~~
>> drivers/hwtracing/coresight/coresight-etm3x-core.c:561:35: warning: declaration of 'struct etmv4_drvdata' will not be visible outside of this function [-Wvisibility]
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
>> drivers/hwtracing/coresight/coresight-etm3x-core.c:564:38: error: incomplete definition of type 'struct etmv4_drvdata'
564 | struct etm_config *config = &drvdata->config;
| ~~~~~~~^
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:35: note: forward declaration of 'struct etmv4_drvdata'
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
drivers/hwtracing/coresight/coresight-etm3x-core.c:565:42: error: incomplete definition of type 'struct etmv4_drvdata'
565 | struct coresight_device *csdev = drvdata->csdev;
| ~~~~~~~^
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:35: note: forward declaration of 'struct etmv4_drvdata'
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
drivers/hwtracing/coresight/coresight-etm3x-core.c:567:19: error: incomplete definition of type 'struct etmv4_drvdata'
567 | CS_UNLOCK(drvdata->csa.base);
| ~~~~~~~^
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:35: note: forward declaration of 'struct etmv4_drvdata'
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
>> drivers/hwtracing/coresight/coresight-etm3x-core.c:568:15: error: incompatible pointer types passing 'struct etmv4_drvdata *' to parameter of type 'struct etm_drvdata *' [-Werror,-Wincompatible-pointer-types]
568 | etm_set_prog(drvdata);
| ^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:154:46: note: passing argument to parameter 'drvdata' here
154 | static void etm_set_prog(struct etm_drvdata *drvdata)
| ^
drivers/hwtracing/coresight/coresight-etm3x-core.c:571:38: error: incompatible pointer types passing 'struct etmv4_drvdata *' to parameter of type 'struct etm_drvdata *' [-Werror,-Wincompatible-pointer-types]
571 | config->seq_curr_state = (etm_readl(drvdata, ETMSQR) & ETM_SQR_MASK);
| ^~~~~~~
drivers/hwtracing/coresight/coresight-etm.h:267:58: note: passing argument to parameter 'drvdata' here
267 | static inline unsigned int etm_readl(struct etm_drvdata *drvdata, u32 off)
| ^
drivers/hwtracing/coresight/coresight-etm3x-core.c:573:25: error: incomplete definition of type 'struct etmv4_drvdata'
573 | for (i = 0; i < drvdata->nr_cntr; i++)
| ~~~~~~~^
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:35: note: forward declaration of 'struct etmv4_drvdata'
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
drivers/hwtracing/coresight/coresight-etm3x-core.c:574:35: error: incompatible pointer types passing 'struct etmv4_drvdata *' to parameter of type 'struct etm_drvdata *' [-Werror,-Wincompatible-pointer-types]
574 | config->cntr_val[i] = etm_readl(drvdata, ETMCNTVRn(i));
| ^~~~~~~
drivers/hwtracing/coresight/coresight-etm.h:267:58: note: passing argument to parameter 'drvdata' here
267 | static inline unsigned int etm_readl(struct etm_drvdata *drvdata, u32 off)
| ^
drivers/hwtracing/coresight/coresight-etm3x-core.c:576:17: error: incompatible pointer types passing 'struct etmv4_drvdata *' to parameter of type 'struct etm_drvdata *' [-Werror,-Wincompatible-pointer-types]
576 | etm_set_pwrdwn(drvdata);
| ^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:61:48: note: passing argument to parameter 'drvdata' here
61 | static void etm_set_pwrdwn(struct etm_drvdata *drvdata)
| ^
drivers/hwtracing/coresight/coresight-etm3x-core.c:579:17: error: incomplete definition of type 'struct etmv4_drvdata'
579 | CS_LOCK(drvdata->csa.base);
| ~~~~~~~^
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:35: note: forward declaration of 'struct etmv4_drvdata'
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
drivers/hwtracing/coresight/coresight-etm3x-core.c:581:18: error: incomplete definition of type 'struct etmv4_drvdata'
581 | dev_dbg(&drvdata->csdev->dev,
| ~~~~~~~^
include/linux/dev_printk.h:171:28: note: expanded from macro 'dev_dbg'
171 | dev_no_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~
include/linux/dev_printk.h:139:23: note: expanded from macro 'dev_no_printk'
139 | _dev_printk(level, dev, fmt, ##__VA_ARGS__); \
| ^~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:35: note: forward declaration of 'struct etmv4_drvdata'
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
drivers/hwtracing/coresight/coresight-etm3x-core.c:582:45: error: incomplete definition of type 'struct etmv4_drvdata'
582 | "cpu: %d disable smp call done\n", drvdata->cpu);
| ~~~~~~~^
include/linux/dev_printk.h:171:49: note: expanded from macro 'dev_dbg'
171 | dev_no_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~~~~~
include/linux/dev_printk.h:139:35: note: expanded from macro 'dev_no_printk'
139 | _dev_printk(level, dev, fmt, ##__VA_ARGS__); \
| ^~~~~~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:35: note: forward declaration of 'struct etmv4_drvdata'
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
>> drivers/hwtracing/coresight/coresight-etm3x-core.c:589:17: error: incompatible pointer types passing 'struct etmv_drvdata *' to parameter of type 'struct etmv4_drvdata *' [-Werror,-Wincompatible-pointer-types]
589 | etm_disable_hw(drvdata);
| ^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:50: note: passing argument to parameter 'drvdata' here
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
>> drivers/hwtracing/coresight/coresight-etm3x-core.c:591:28: error: incomplete definition of type 'struct etmv_drvdata'
591 | coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
| ~~~~~~~^
drivers/hwtracing/coresight/coresight-etm3x-core.c:587:9: note: forward declaration of 'struct etmv_drvdata'
587 | struct etmv_drvdata *drvdata = info;
| ^
>> drivers/hwtracing/coresight/coresight-etm3x-core.c:729:18: error: incompatible pointer types passing 'struct etm_drvdata *' to parameter of type 'struct etmv4_drvdata *' [-Werror,-Wincompatible-pointer-types]
729 | etm_disable_hw(etmdrvdata[cpu]);
| ^~~~~~~~~~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:50: note: passing argument to parameter 'drvdata' here
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^
2 warnings and 14 errors generated.
vim +564 drivers/hwtracing/coresight/coresight-etm3x-core.c
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 560
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 @561 static void etm_disable_hw(struct etmv4_drvdata *drvdata)
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 562 {
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 563 int i;
1925a470ce69cdf drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 @564 struct etm_config *config = &drvdata->config;
8ce0029658ba16c drivers/hwtracing/coresight/coresight-etm3x-core.c Suzuki K Poulose 2021-02-01 565 struct coresight_device *csdev = drvdata->csdev;
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 566
a1b0e77ce517ec0 drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2025-03-25 567 CS_UNLOCK(drvdata->csa.base);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 @568 etm_set_prog(drvdata);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 569
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 570 /* Read back sequencer and counters for post trace analysis */
1925a470ce69cdf drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 571 config->seq_curr_state = (etm_readl(drvdata, ETMSQR) & ETM_SQR_MASK);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 572
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 573 for (i = 0; i < drvdata->nr_cntr; i++)
1925a470ce69cdf drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 574 config->cntr_val[i] = etm_readl(drvdata, ETMCNTVRn(i));
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 575
6dd4402f24a39a9 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2018-11-30 576 etm_set_pwrdwn(drvdata);
8ce0029658ba16c drivers/hwtracing/coresight/coresight-etm3x-core.c Suzuki K Poulose 2021-02-01 577 coresight_disclaim_device_unlocked(csdev);
68a147752d04da7 drivers/hwtracing/coresight/coresight-etm3x.c Suzuki K Poulose 2018-09-20 578
a1b0e77ce517ec0 drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2025-03-25 579 CS_LOCK(drvdata->csa.base);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 580
aaff7623284159a drivers/hwtracing/coresight/coresight-etm3x.c Suzuki K Poulose 2019-06-19 581 dev_dbg(&drvdata->csdev->dev,
aaff7623284159a drivers/hwtracing/coresight/coresight-etm3x.c Suzuki K Poulose 2019-06-19 582 "cpu: %d disable smp call done\n", drvdata->cpu);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 583 }
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 584
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 585 static void etm_disable_hw_smp_call(void *info)
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 586 {
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 587 struct etmv_drvdata *drvdata = info;
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 588
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 @589 etm_disable_hw(drvdata);
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 590
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 @591 coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 592 }
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 593
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 594 static void etm_disable_perf(struct coresight_device *csdev)
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 595 {
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 596 struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 597
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 598 if (WARN_ON_ONCE(drvdata->cpu != smp_processor_id()))
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 599 return;
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 600
a1b0e77ce517ec0 drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2025-03-25 601 CS_UNLOCK(drvdata->csa.base);
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 602
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 603 /* Setting the prog bit disables tracing immediately */
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 604 etm_set_prog(drvdata);
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 605
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 606 /*
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 607 * There is no way to know when the tracer will be used again so
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 608 * power down the tracer.
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 609 */
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 610 etm_set_pwrdwn(drvdata);
8ce0029658ba16c drivers/hwtracing/coresight/coresight-etm3x-core.c Suzuki K Poulose 2021-02-01 611 coresight_disclaim_device_unlocked(csdev);
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 612
a1b0e77ce517ec0 drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2025-03-25 613 CS_LOCK(drvdata->csa.base);
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 614
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 615 coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 616
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 617 /*
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 618 * perf will release trace ids when _free_aux()
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 619 * is called at the end of the session
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 620 */
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 621
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 622 }
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 623
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 624 static void etm_disable_sysfs(struct coresight_device *csdev)
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 625 {
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 626 struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 627
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 628 /*
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 629 * Taking hotplug lock here protects from clocks getting disabled
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 630 * with tracing being left on (crash scenario) if user disable occurs
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 631 * after cpu online mask indicates the cpu is offline but before the
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 632 * DYING hotplug callback is serviced by the ETM driver.
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 633 */
e560c89c8ac0baa drivers/hwtracing/coresight/coresight-etm3x.c Sebastian Andrzej Siewior 2017-05-24 634 cpus_read_lock();
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 635 spin_lock(&drvdata->spinlock);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 636
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 637 /*
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 638 * Executing etm_disable_hw on the cpu whose ETM is being disabled
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 639 * ensures that register writes occur when cpu is powered.
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 640 */
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 641 smp_call_function_single(drvdata->cpu, etm_disable_hw_smp_call,
a136c0aff8e1120 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 642 drvdata, 1);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 643
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 644 spin_unlock(&drvdata->spinlock);
e560c89c8ac0baa drivers/hwtracing/coresight/coresight-etm3x.c Sebastian Andrzej Siewior 2017-05-24 645 cpus_read_unlock();
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 646
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 647 /*
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 648 * we only release trace IDs when resetting sysfs.
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 649 * This permits sysfs users to read the trace ID after the trace
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 650 * session has completed. This maintains operational behaviour with
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 651 * prior trace id allocation method
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 652 */
9edf291091f68f4 drivers/hwtracing/coresight/coresight-etm3x-core.c Mike Leach 2023-01-16 653
aaff7623284159a drivers/hwtracing/coresight/coresight-etm3x.c Suzuki K Poulose 2019-06-19 654 dev_dbg(&csdev->dev, "ETM tracing disabled\n");
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 655 }
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 656
68905d73df5d51b drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-08-25 657 static void etm_disable(struct coresight_device *csdev,
68905d73df5d51b drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-08-25 658 struct perf_event *event)
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 659 {
9fa3682869d4e16 drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2023-04-25 660 enum cs_mode mode;
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 661
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 662 /*
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 663 * For as long as the tracer isn't disabled another entity can't
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 664 * change its status. As such we can read the status here without
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 665 * fearing it will change under us.
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 666 */
c95c2733e5feb1f drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2024-01-29 667 mode = coresight_get_mode(csdev);
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 668
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 669 switch (mode) {
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 670 case CS_MODE_DISABLED:
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 671 break;
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 672 case CS_MODE_SYSFS:
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 673 etm_disable_sysfs(csdev);
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 674 break;
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 675 case CS_MODE_PERF:
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 676 etm_disable_perf(csdev);
882d5e112491c87 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 677 break;
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 678 default:
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 679 WARN_ON_ONCE(mode);
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 680 return;
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 681 }
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 682 }
22fd532eaa0c24d drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 683
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 684 static const struct coresight_ops_source etm_source_ops = {
52210c8745e418f drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-02 685 .cpu_id = etm_cpu_id,
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 686 .enable = etm_enable,
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 687 .disable = etm_disable,
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 688 };
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 689
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 690 static const struct coresight_ops etm_cs_ops = {
c367a89dec267c6 drivers/hwtracing/coresight/coresight-etm3x-core.c Jie Gan 2025-03-03 691 .trace_id = coresight_etm_get_trace_id,
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 692 .source_ops = &etm_source_ops,
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 693 };
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 694
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 695 static int etm_online_cpu(unsigned int cpu)
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 696 {
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 697 if (!etmdrvdata[cpu])
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 698 return 0;
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 699
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 700 if (etmdrvdata[cpu]->boot_enable && !etmdrvdata[cpu]->sticky_enable)
1f5149c7751c50a drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2024-01-29 701 coresight_enable_sysfs(etmdrvdata[cpu]->csdev);
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 702 return 0;
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 703 }
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 704
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 705 static int etm_starting_cpu(unsigned int cpu)
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 706 {
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 707 if (!etmdrvdata[cpu])
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 708 return 0;
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 709
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 710 spin_lock(&etmdrvdata[cpu]->spinlock);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 711 if (!etmdrvdata[cpu]->os_unlock) {
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 712 etm_os_unlock(etmdrvdata[cpu]);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 713 etmdrvdata[cpu]->os_unlock = true;
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 714 }
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 715
c95c2733e5feb1f drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2024-01-29 716 if (coresight_get_mode(etmdrvdata[cpu]->csdev))
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 717 etm_enable_hw(etmdrvdata[cpu]);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 718 spin_unlock(&etmdrvdata[cpu]->spinlock);
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 719 return 0;
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 720 }
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 721
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 722 static int etm_dying_cpu(unsigned int cpu)
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 723 {
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 724 if (!etmdrvdata[cpu])
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 725 return 0;
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 726
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 727 spin_lock(&etmdrvdata[cpu]->spinlock);
c95c2733e5feb1f drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2024-01-29 728 if (coresight_get_mode(etmdrvdata[cpu]->csdev))
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 @729 etm_disable_hw(etmdrvdata[cpu]);
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 730 spin_unlock(&etmdrvdata[cpu]->spinlock);
2b5283d12f67839 drivers/hwtracing/coresight/coresight-etm3x.c Richard Cochran 2016-07-13 731 return 0;
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 732 }
a939fc5a71ad531 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 733
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
Hi Leo,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 66701750d5565c574af42bef0b789ce0203e3071]
url: https://github.com/intel-lab-lkp/linux/commits/Leo-Yan/coresight-Change-device-mode-to-atomic-type/20250701-230354
base: 66701750d5565c574af42bef0b789ce0203e3071
patch link: https://lore.kernel.org/r/20250701-arm_cs_pm_fix_v3-v2-3-23ebb864fcc1%40arm.com
patch subject: [PATCH v2 03/28] coresight: etm3x: Always set tracer's device mode on target CPU
config: arm-u8500_defconfig (https://download.01.org/0day-ci/archive/20250702/202507021259.wYmjhqn4-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 15.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250702/202507021259.wYmjhqn4-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202507021259.wYmjhqn4-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/hwtracing/coresight/coresight-etm3x-core.c: In function 'etm_enable':
>> drivers/hwtracing/coresight/coresight-etm3x-core.c:545:29: warning: unused variable 'drvdata' [-Wunused-variable]
545 | struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
| ^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c: At top level:
>> drivers/hwtracing/coresight/coresight-etm3x-core.c:561:35: warning: 'struct etmv4_drvdata' declared inside parameter list will not be visible outside of this definition or declaration
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ^~~~~~~~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c: In function 'etm_disable_hw':
drivers/hwtracing/coresight/coresight-etm3x-core.c:564:45: error: invalid use of undefined type 'struct etmv4_drvdata'
564 | struct etm_config *config = &drvdata->config;
| ^~
drivers/hwtracing/coresight/coresight-etm3x-core.c:565:49: error: invalid use of undefined type 'struct etmv4_drvdata'
565 | struct coresight_device *csdev = drvdata->csdev;
| ^~
drivers/hwtracing/coresight/coresight-etm3x-core.c:567:26: error: invalid use of undefined type 'struct etmv4_drvdata'
567 | CS_UNLOCK(drvdata->csa.base);
| ^~
drivers/hwtracing/coresight/coresight-etm3x-core.c:568:22: error: passing argument 1 of 'etm_set_prog' from incompatible pointer type [-Wincompatible-pointer-types]
568 | etm_set_prog(drvdata);
| ^~~~~~~
| |
| struct etmv4_drvdata *
drivers/hwtracing/coresight/coresight-etm3x-core.c:154:46: note: expected 'struct etm_drvdata *' but argument is of type 'struct etmv4_drvdata *'
154 | static void etm_set_prog(struct etm_drvdata *drvdata)
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:571:45: error: passing argument 1 of 'etm_readl' from incompatible pointer type [-Wincompatible-pointer-types]
571 | config->seq_curr_state = (etm_readl(drvdata, ETMSQR) & ETM_SQR_MASK);
| ^~~~~~~
| |
| struct etmv4_drvdata *
In file included from drivers/hwtracing/coresight/coresight-etm3x-core.c:33:
drivers/hwtracing/coresight/coresight-etm.h:267:58: note: expected 'struct etm_drvdata *' but argument is of type 'struct etmv4_drvdata *'
267 | static inline unsigned int etm_readl(struct etm_drvdata *drvdata, u32 off)
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:573:32: error: invalid use of undefined type 'struct etmv4_drvdata'
573 | for (i = 0; i < drvdata->nr_cntr; i++)
| ^~
drivers/hwtracing/coresight/coresight-etm3x-core.c:574:49: error: passing argument 1 of 'etm_readl' from incompatible pointer type [-Wincompatible-pointer-types]
574 | config->cntr_val[i] = etm_readl(drvdata, ETMCNTVRn(i));
| ^~~~~~~
| |
| struct etmv4_drvdata *
drivers/hwtracing/coresight/coresight-etm.h:267:58: note: expected 'struct etm_drvdata *' but argument is of type 'struct etmv4_drvdata *'
267 | static inline unsigned int etm_readl(struct etm_drvdata *drvdata, u32 off)
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:576:24: error: passing argument 1 of 'etm_set_pwrdwn' from incompatible pointer type [-Wincompatible-pointer-types]
576 | etm_set_pwrdwn(drvdata);
| ^~~~~~~
| |
| struct etmv4_drvdata *
drivers/hwtracing/coresight/coresight-etm3x-core.c:61:48: note: expected 'struct etm_drvdata *' but argument is of type 'struct etmv4_drvdata *'
61 | static void etm_set_pwrdwn(struct etm_drvdata *drvdata)
| ~~~~~~~~~~~~~~~~~~~~^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:579:24: error: invalid use of undefined type 'struct etmv4_drvdata'
579 | CS_LOCK(drvdata->csa.base);
| ^~
In file included from include/linux/device.h:15,
from drivers/hwtracing/coresight/coresight-etm3x-core.c:12:
drivers/hwtracing/coresight/coresight-etm3x-core.c:581:25: error: invalid use of undefined type 'struct etmv4_drvdata'
581 | dev_dbg(&drvdata->csdev->dev,
| ^~
include/linux/dev_printk.h:139:44: note: in definition of macro 'dev_no_printk'
139 | _dev_printk(level, dev, fmt, ##__VA_ARGS__); \
| ^~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:581:9: note: in expansion of macro 'dev_dbg'
581 | dev_dbg(&drvdata->csdev->dev,
| ^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:582:59: error: invalid use of undefined type 'struct etmv4_drvdata'
582 | "cpu: %d disable smp call done\n", drvdata->cpu);
| ^~
include/linux/dev_printk.h:139:56: note: in definition of macro 'dev_no_printk'
139 | _dev_printk(level, dev, fmt, ##__VA_ARGS__); \
| ^~~~~~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:581:9: note: in expansion of macro 'dev_dbg'
581 | dev_dbg(&drvdata->csdev->dev,
| ^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c: In function 'etm_disable_hw_smp_call':
drivers/hwtracing/coresight/coresight-etm3x-core.c:589:24: error: passing argument 1 of 'etm_disable_hw' from incompatible pointer type [-Wincompatible-pointer-types]
589 | etm_disable_hw(drvdata);
| ^~~~~~~
| |
| struct etmv_drvdata *
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:50: note: expected 'struct etmv4_drvdata *' but argument is of type 'struct etmv_drvdata *'
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
drivers/hwtracing/coresight/coresight-etm3x-core.c:591:35: error: invalid use of undefined type 'struct etmv_drvdata'
591 | coresight_set_mode(drvdata->csdev, CS_MODE_DISABLED);
| ^~
drivers/hwtracing/coresight/coresight-etm3x-core.c: In function 'etm_dying_cpu':
drivers/hwtracing/coresight/coresight-etm3x-core.c:729:42: error: passing argument 1 of 'etm_disable_hw' from incompatible pointer type [-Wincompatible-pointer-types]
729 | etm_disable_hw(etmdrvdata[cpu]);
| ~~~~~~~~~~^~~~~
| |
| struct etm_drvdata *
drivers/hwtracing/coresight/coresight-etm3x-core.c:561:50: note: expected 'struct etmv4_drvdata *' but argument is of type 'struct etm_drvdata *'
561 | static void etm_disable_hw(struct etmv4_drvdata *drvdata)
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
vim +/drvdata +545 drivers/hwtracing/coresight/coresight-etm3x-core.c
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 540
9fa3682869d4e1 drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2023-04-25 541 static int etm_enable(struct coresight_device *csdev, struct perf_event *event,
7b365f056d8e02 drivers/hwtracing/coresight/coresight-etm3x-core.c Jie Gan 2025-03-03 542 enum cs_mode mode, struct coresight_path *path)
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 543 {
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 544 int ret;
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 @545 struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 546
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 547 switch (mode) {
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 548 case CS_MODE_SYSFS:
7b365f056d8e02 drivers/hwtracing/coresight/coresight-etm3x-core.c Jie Gan 2025-03-03 549 ret = etm_enable_sysfs(csdev, path);
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 550 break;
882d5e112491c8 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 551 case CS_MODE_PERF:
7b365f056d8e02 drivers/hwtracing/coresight/coresight-etm3x-core.c Jie Gan 2025-03-03 552 ret = etm_enable_perf(csdev, event, path);
882d5e112491c8 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 553 break;
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 554 default:
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 555 ret = -EINVAL;
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 556 }
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 557
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 558 return ret;
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 559 }
22fd532eaa0c24 drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 560
a136c0aff8e112 drivers/hwtracing/coresight/coresight-etm3x-core.c Leo Yan 2025-07-01 @561 static void etm_disable_hw(struct etmv4_drvdata *drvdata)
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 562 {
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 563 int i;
1925a470ce69cd drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 564 struct etm_config *config = &drvdata->config;
8ce0029658ba16 drivers/hwtracing/coresight/coresight-etm3x-core.c Suzuki K Poulose 2021-02-01 565 struct coresight_device *csdev = drvdata->csdev;
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 566
a1b0e77ce517ec drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2025-03-25 567 CS_UNLOCK(drvdata->csa.base);
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 568 etm_set_prog(drvdata);
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 569
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 570 /* Read back sequencer and counters for post trace analysis */
1925a470ce69cd drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 571 config->seq_curr_state = (etm_readl(drvdata, ETMSQR) & ETM_SQR_MASK);
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 572
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 573 for (i = 0; i < drvdata->nr_cntr; i++)
1925a470ce69cd drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2016-02-17 574 config->cntr_val[i] = etm_readl(drvdata, ETMCNTVRn(i));
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 575
6dd4402f24a39a drivers/hwtracing/coresight/coresight-etm3x.c Mathieu Poirier 2018-11-30 576 etm_set_pwrdwn(drvdata);
8ce0029658ba16 drivers/hwtracing/coresight/coresight-etm3x-core.c Suzuki K Poulose 2021-02-01 577 coresight_disclaim_device_unlocked(csdev);
68a147752d04da drivers/hwtracing/coresight/coresight-etm3x.c Suzuki K Poulose 2018-09-20 578
a1b0e77ce517ec drivers/hwtracing/coresight/coresight-etm3x-core.c James Clark 2025-03-25 579 CS_LOCK(drvdata->csa.base);
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 580
aaff7623284159 drivers/hwtracing/coresight/coresight-etm3x.c Suzuki K Poulose 2019-06-19 581 dev_dbg(&drvdata->csdev->dev,
aaff7623284159 drivers/hwtracing/coresight/coresight-etm3x.c Suzuki K Poulose 2019-06-19 582 "cpu: %d disable smp call done\n", drvdata->cpu);
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 583 }
a939fc5a71ad53 drivers/coresight/coresight-etm3x.c Pratik Patel 2014-11-03 584
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
© 2016 - 2026 Red Hat, Inc.