Hi,
On Mon, 16 Dec 2024 at 11:50, Yeoreum Yun yeoreum.yun@arm.com wrote:
In some coresight drivers, drvdata->spinlock can be held during __schedule() by perf_event_task_sched_out()/in().
Since drvdata->spinlock type is spinlock_t and perf_event_task_sched_out()/in() is called after acquiring rq_lock, which is raw_spinlock_t (an unsleepable lock), this poses an issue in PREEMPT_RT kernel where spinlock_t is sleepable.
To address this,change type drvdata->spinlock in some coresight drivers, which can be called by perf_event_task_sched_out()/in(), from spinlock_t to raw_spinlock_t.
Reviewed-by: James Clark james.clark@linaro.org
v2 to v3: - Fix build error
v1 to v2: - seperate patchsets to change locktype and apply gurad API.
Yeoreum Yun (9): coresight: change coresight_device lock type to raw_spinlock_t coresight-etm4x: change etmv4_drvdata spinlock type to raw_spinlock_t coresight: change coresight_trace_id_map's lock type to raw_spinlock_t coresight-cti: change cti_drvdata spinlock's type to raw_spinlock_t coresight-etb10: change etb_drvdata spinlock's type to raw_spinlock_t coresight-funnel: change funnel_drvdata spinlock's type to raw_spinlock_t coresight-replicator: change replicator_drvdata spinlock's type to raw_spinlock_t coresight-tmc: change tmc_drvdata spinlock's type to raw_spinlock_t coresight/ultrasoc: change cti_drvdata spinlock's type to raw_spinlock_t
.../hwtracing/coresight/coresight-config.c | 8 +- .../hwtracing/coresight/coresight-config.h | 2 +- drivers/hwtracing/coresight/coresight-core.c | 2 +- .../hwtracing/coresight/coresight-cti-core.c | 44 +-- .../hwtracing/coresight/coresight-cti-sysfs.c | 76 +++--- drivers/hwtracing/coresight/coresight-cti.h | 2 +- drivers/hwtracing/coresight/coresight-etb10.c | 26 +- .../coresight/coresight-etm4x-core.c | 18 +- .../coresight/coresight-etm4x-sysfs.c | 250 +++++++++--------- drivers/hwtracing/coresight/coresight-etm4x.h | 2 +- .../hwtracing/coresight/coresight-funnel.c | 12 +- .../coresight/coresight-replicator.c | 12 +- .../hwtracing/coresight/coresight-syscfg.c | 26 +- .../hwtracing/coresight/coresight-tmc-core.c | 6 +- .../hwtracing/coresight/coresight-tmc-etf.c | 48 ++-- .../hwtracing/coresight/coresight-tmc-etr.c | 40 +-- drivers/hwtracing/coresight/coresight-tmc.h | 2 +- .../hwtracing/coresight/coresight-trace-id.c | 22 +- drivers/hwtracing/coresight/ultrasoc-smb.c | 12 +- drivers/hwtracing/coresight/ultrasoc-smb.h | 2 +- include/linux/coresight.h | 4 +- 21 files changed, 308 insertions(+), 308 deletions(-)
-- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}
Notably missing is the same changes for the etm3x driver. The ETMv3.x and PTM1.x are supported by this driver, and these trace source variants are also supported in perf in the cs_etm.c code.
STM is also missing, though this is not directly enabled via perf - but could perhaps run concurrently as it can be a target output for ftrace.
Regards
Mike