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 - 2025 Red Hat, Inc.