mbox series

[v2,0/9] coresight: change some driver' spinlock type to raw_spinlock_t

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

Message

Yeoreum Yun Dec. 3, 2024, 11:49 a.m. UTC
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}

Comments

Mike Leach Dec. 18, 2024, 1:44 p.m. UTC | #1
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}
>
James Clark Dec. 18, 2024, 2:38 p.m. UTC | #2
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}
>>
> 
>
Yeoreum Yun Dec. 18, 2024, 3:22 p.m. UTC | #3
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.