Message ID | 20241203114942.697188-1-yeoreum.yun@arm.com (mailing list archive) |
---|---|
Headers | show |
Series | coresight: change some driver' spinlock type to raw_spinlock_t | expand |
This change seems to omit devices: etm3x - which provides support for ETMv3 and PTM, both of which are valid trace sources in the cs_etm handling code. stm - can be integrated into the kernel STM via configfs providing a MIPI source for ftrace. Mike On Tue, 3 Dec 2024 at 11:49, 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> > > v1 to v2: > - seperate patchsets to change locktype and apply gurad API. > > Levi 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 | 21 +- > .../hwtracing/coresight/coresight-config.h | 2 +- > drivers/hwtracing/coresight/coresight-core.c | 2 +- > .../hwtracing/coresight/coresight-cti-core.c | 65 +- > .../hwtracing/coresight/coresight-cti-sysfs.c | 135 +++-- > drivers/hwtracing/coresight/coresight-cti.h | 2 +- > drivers/hwtracing/coresight/coresight-etb10.c | 62 +- > .../coresight/coresight-etm4x-core.c | 71 ++- > .../coresight/coresight-etm4x-sysfs.c | 566 +++++++++--------- > drivers/hwtracing/coresight/coresight-etm4x.h | 2 +- > .../hwtracing/coresight/coresight-funnel.c | 34 +- > .../coresight/coresight-replicator.c | 36 +- > .../hwtracing/coresight/coresight-syscfg.c | 75 ++- > .../hwtracing/coresight/coresight-tmc-core.c | 9 +- > .../hwtracing/coresight/coresight-tmc-etf.c | 195 +++--- > .../hwtracing/coresight/coresight-tmc-etr.c | 199 +++--- > drivers/hwtracing/coresight/coresight-tmc.h | 2 +- > .../hwtracing/coresight/coresight-trace-id.c | 93 ++- > drivers/hwtracing/coresight/ultrasoc-smb.c | 12 +- > drivers/hwtracing/coresight/ultrasoc-smb.h | 2 +- > include/linux/coresight.h | 4 +- > 21 files changed, 751 insertions(+), 838 deletions(-) > > -- > LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} >
On 18/12/2024 1:44 pm, Mike Leach wrote: > This change seems to omit devices: > > etm3x - which provides support for ETMv3 and PTM, both of which are > valid trace sources in the cs_etm handling code. > stm - can be integrated into the kernel STM via configfs providing a > MIPI source for ftrace. > > Mike > Isn't ETMv3 32 bit only? arm32 is still missing ARCH_SUPPORTS_RT so we could technically leave the spinlocks as is. It might be better to update them anyway though or add !PREEMPT_RT to CONFIG_CORESIGHT_SOURCE_ETM3X. > On Tue, 3 Dec 2024 at 11:49, 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> >> >> v1 to v2: >> - seperate patchsets to change locktype and apply gurad API. >> >> Levi 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 | 21 +- >> .../hwtracing/coresight/coresight-config.h | 2 +- >> drivers/hwtracing/coresight/coresight-core.c | 2 +- >> .../hwtracing/coresight/coresight-cti-core.c | 65 +- >> .../hwtracing/coresight/coresight-cti-sysfs.c | 135 +++-- >> drivers/hwtracing/coresight/coresight-cti.h | 2 +- >> drivers/hwtracing/coresight/coresight-etb10.c | 62 +- >> .../coresight/coresight-etm4x-core.c | 71 ++- >> .../coresight/coresight-etm4x-sysfs.c | 566 +++++++++--------- >> drivers/hwtracing/coresight/coresight-etm4x.h | 2 +- >> .../hwtracing/coresight/coresight-funnel.c | 34 +- >> .../coresight/coresight-replicator.c | 36 +- >> .../hwtracing/coresight/coresight-syscfg.c | 75 ++- >> .../hwtracing/coresight/coresight-tmc-core.c | 9 +- >> .../hwtracing/coresight/coresight-tmc-etf.c | 195 +++--- >> .../hwtracing/coresight/coresight-tmc-etr.c | 199 +++--- >> drivers/hwtracing/coresight/coresight-tmc.h | 2 +- >> .../hwtracing/coresight/coresight-trace-id.c | 93 ++- >> drivers/hwtracing/coresight/ultrasoc-smb.c | 12 +- >> drivers/hwtracing/coresight/ultrasoc-smb.h | 2 +- >> include/linux/coresight.h | 4 +- >> 21 files changed, 751 insertions(+), 838 deletions(-) >> >> -- >> LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} >> > >
Hi Mike. > etm3x - which provides support for ETMv3 and PTM, both of which are > valid trace sources in the cs_etm handling code. > stm - can be integrated into the kernel STM via configfs providing a > MIPI source for ftrace. about etm3x, I have a the same opinion with James. But, In case of STM, Is it enabled via perf interface? The cs devices which could be called in perf patch were changed but not for cs devices which never used via perf. Am I missing? Thanks.
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> v1 to v2: - seperate patchsets to change locktype and apply gurad API. Levi 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 | 21 +- .../hwtracing/coresight/coresight-config.h | 2 +- drivers/hwtracing/coresight/coresight-core.c | 2 +- .../hwtracing/coresight/coresight-cti-core.c | 65 +- .../hwtracing/coresight/coresight-cti-sysfs.c | 135 +++-- drivers/hwtracing/coresight/coresight-cti.h | 2 +- drivers/hwtracing/coresight/coresight-etb10.c | 62 +- .../coresight/coresight-etm4x-core.c | 71 ++- .../coresight/coresight-etm4x-sysfs.c | 566 +++++++++--------- drivers/hwtracing/coresight/coresight-etm4x.h | 2 +- .../hwtracing/coresight/coresight-funnel.c | 34 +- .../coresight/coresight-replicator.c | 36 +- .../hwtracing/coresight/coresight-syscfg.c | 75 ++- .../hwtracing/coresight/coresight-tmc-core.c | 9 +- .../hwtracing/coresight/coresight-tmc-etf.c | 195 +++--- .../hwtracing/coresight/coresight-tmc-etr.c | 199 +++--- drivers/hwtracing/coresight/coresight-tmc.h | 2 +- .../hwtracing/coresight/coresight-trace-id.c | 93 ++- drivers/hwtracing/coresight/ultrasoc-smb.c | 12 +- drivers/hwtracing/coresight/ultrasoc-smb.h | 2 +- include/linux/coresight.h | 4 +- 21 files changed, 751 insertions(+), 838 deletions(-) -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}