[PATCH v11 0/9] fix several inconsistencies with sysfs configuration in etmX

Yeoreum Yun posted 9 patches 1 week, 2 days ago
There is a newer version of this series
drivers/hwtracing/coresight/coresight-config.c     |  18 +-
drivers/hwtracing/coresight/coresight-config.h     |  22 ++
drivers/hwtracing/coresight/coresight-etm.h        |  46 ++-
drivers/hwtracing/coresight/coresight-etm3x-core.c | 126 +++---
.../hwtracing/coresight/coresight-etm3x-sysfs.c    | 104 +++--
drivers/hwtracing/coresight/coresight-etm4x-cfg.c  |  14 +-
drivers/hwtracing/coresight/coresight-etm4x-core.c | 426 +++++++++++----------
.../hwtracing/coresight/coresight-etm4x-sysfs.c    | 210 ++++++----
drivers/hwtracing/coresight/coresight-etm4x.h      | 196 +++++-----
9 files changed, 676 insertions(+), 486 deletions(-)
[PATCH v11 0/9] fix several inconsistencies with sysfs configuration in etmX
Posted by Yeoreum Yun 1 week, 2 days ago
The current ETMx configuration via sysfs can lead to the following
inconsistencies:

  - If a configuration is modified via sysfs while a perf session is
    active, the running configuration may differ between before
    a sched-out and after a subsequent sched-in.

  - If a perf session and sysfs session tries to enable concurrently,
    configuration from configfs could be corrupted (etm4).

  - There is chance to corrupt drvdata->config if perf session tries
    to enabled among handling cscfg_csdev_disable_active_config()
    in etm4_disable_sysfs() (etm4).

To resolve these inconsistencies, the configuration should be separated into:

  - active_config, which is applied configuration for the current session
  - config, which stores the settings configured via sysfs.

and apply configuration from configfs after taking a mode.

Patch History
=============
from v10 to 11:
  - replace direct register read from etm3 sysfs with IPI.
  - fix issue cntr_val and others field which required to be shown after
    sysfs session disable.
  - prohibit the write for some etm3 sysfs while sysfs session is
    enabled.
  - drop locktype change in etm3
  - Link to v10: https://lore.kernel.org/r/20260911-separate_etm_cfg_v2-v10-0-1b715d95927a@arm.com

from v9 to v10:
  - rebase to coresight/next
  - https://lore.kernel.org/all/20260725113645.57519-1-yeoreum.yun@arm.com/

from v8 to v9:
  - add feat_csdev_lock guard interface.
  - set feat_csdev->drv_spinlock as NULL for etmv4_drvdata.
  - https://lore.kernel.org/all/20260629090007.1718746-1-yeoreum.yun@arm.com/

from v7 to v8:
  - accept @Leo Yan' suggestion to handle error.
  - small minor fixes following @Suzuki' suggestion.
  - https://lore.kernel.org/all/20260519154812.254884-1-yeoreum.yun@arm.com/

from v6 to v7:
  - rebase on coresight/next
  - add ETM_MAX_SEQ_TRANSITIONS define
  - remove redundant patch relavent cpu-hotplug as coresight-pm patch
    merged.
  - https://lore.kernel.org/all/20260422132203.977549-1-yeoreum.yun@arm.com/

from v5 to v6:
  - fix missing of calling cscfg_csdev_disable_active_config()
  - add rb & fixes tags.
  - add ss_status field in etm4x_drvdata to expose STATUS and PENDING bits.
  - https://lore.kernel.org/all/20260415165528.3369607-1-yeoreum.yun@arm.com/

from v4 to v5:
  - add rb-tag.
  - fix underflow issue for nrseqstate.
  - fix wrong check in etm4_sspcicrn_present().
  - remove redundant fields on etmv4_save_state.
  - rename caps->ss_status to ss_cmp.
  - fix wrong location of etm4_release_trace_id.
  - https://lore.kernel.org/all/20260413142003.3549310-1-yeoreum.yun@arm.com/

from v3 to v4:
  - change etm_drvdata->spinlock type to raw_spin_lock_t
  - remove redundant call etmX_enable_hw() with starting_cpu() callsback.
  - fix missing trace id release.
  - add missing docs.
  - https://lore.kernel.org/all/20260412175506.412301-1-yeoreum.yun@arm.com/

from v2 to v3:
  - fix build error for etm3x.
  - fix checkpatch warning.
  - https://lore.kernel.org/all/20260410074310.2693385-1-yeoreum.yun@arm.com/

from v1 to v2
  - rebased to v7.0-rc7.
  - introduce etmX_caps structure to save etmX's capabilities.
  - remove ss_status from etmv4_config.
  - modify active_config after taking a mode (perf/sysfs).
  - https://lore.kernel.org/all/20260317181705.2456271-1-yeoreum.yun@arm.com/

---
Yeoreum Yun (9):
      coresight: etm4x: prohibit modifying ss_status and cntr_val while session is enabled
      coresight: etm3x: prohibit modifying cntr_val and reset while session is enabled
      coresight: etm4x: fix inconsistencies with sysfs configuration
      coresight: etm3x: fix inconsistencies with sysfs configuration
      coresight: etm3x: remove redundant cpu online check on etm_enable_sysfs()
      coresight: etm4x: introduce struct etm4_caps
      coresight: etm4x: exclude ss_status from drvdata->config
      coresight: etm4x: remove s_ex_level from config
      coresight: etm3x: introduce struct etm_caps

 drivers/hwtracing/coresight/coresight-config.c     |  18 +-
 drivers/hwtracing/coresight/coresight-config.h     |  22 ++
 drivers/hwtracing/coresight/coresight-etm.h        |  46 ++-
 drivers/hwtracing/coresight/coresight-etm3x-core.c | 126 +++---
 .../hwtracing/coresight/coresight-etm3x-sysfs.c    | 104 +++--
 drivers/hwtracing/coresight/coresight-etm4x-cfg.c  |  14 +-
 drivers/hwtracing/coresight/coresight-etm4x-core.c | 426 +++++++++++----------
 .../hwtracing/coresight/coresight-etm4x-sysfs.c    | 210 ++++++----
 drivers/hwtracing/coresight/coresight-etm4x.h      | 196 +++++-----
 9 files changed, 676 insertions(+), 486 deletions(-)
---
base-commit: 9e3604d7369cfc0110100eb1a0acab1865ee2d18
change-id: 20260911-separate_etm_cfg_v2-3518a168cbff

Best regards,
-- 
Sincerely,
Yeoreum Yun
Re: [PATCH v11 0/9] fix several inconsistencies with sysfs configuration in etmX
Posted by Leo Yan 15 hours ago
On Tue, Sep 15, 2026 at 12:34:35PM +0100, Yeoreum Yun wrote:

> To resolve these inconsistencies, the configuration should be separated into:
> 
>   - active_config, which is applied configuration for the current session
>   - config, which stores the settings configured via sysfs.
> 
> and apply configuration from configfs after taking a mode.

I did the following tests on this series:

 1) Perf test on Orion6 board:

  # ./perf test coresight
  142: CoreSight synthesized callchain                                                                           : Ok
  143: CoreSight concurrent threads                                                                              : Ok
  144: CoreSight context switch thread attribution                                                               : Ok
  145: CoreSight deterministic workload decode                                                                   : Ok
  146: CoreSight raw dump stress                                                                                 : Ok
  147: Check Arm CoreSight trace data recording and synthesized samples                                          : FAILED!
  148: Check Arm CoreSight disassembly script completes without errors                                           : Ok

Test 147 has a known issue with per-thread mode. The failure was already
observed before this series.

 2) Strobe mode test:

  # echo 5000 > /sys/kernel/config/cs-syscfg/features/strobing/params/window/value

  # echo 0 > /sys/kernel/config/cs-syscfg/features/strobing/params/period/value
  # perf record -e cs_etm/autofdo,timestamp=0/u -m,128M  -- perf test -w brstack 3000000
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 36.301 MB perf.data ]

  # echo 1 > /sys/kernel/config/cs-syscfg/features/strobing/params/period/value
  # perf record -e cs_etm/autofdo,timestamp=0/u -m,128M  -- perf test -w brstack 3000000
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 18.361 MB perf.data ]

  # echo 2 > /sys/kernel/config/cs-syscfg/features/strobing/params/period/value
  # perf record -e cs_etm/autofdo,timestamp=0/u -m,128M  -- perf test -w brstack 3000000
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 12.246 MB perf.data ]

  # echo 3 > /sys/kernel/config/cs-syscfg/features/strobing/params/period/value
  # perf record -e cs_etm/autofdo,timestamp=0/u -m,128M  -- perf test -w brstack 3000000
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 9.197 MB perf.data ]

The captured trace sizes maintain the expected proportional relationship
with the period values.

 3) I verified the series on Juno-r2 baord with insmod and rmmod, and
    CPU PM, and did not see any regression.

Maybe it'd be good to send a new version addressing Mike's comments.
Based on the test results, you can add my test tags:

Tested-by: Leo Yan <leo.yan@arm.com>
Re: [PATCH v11 0/9] fix several inconsistencies with sysfs configuration in etmX
Posted by Yeoreum Yun 13 hours ago
On Thu, Sep 24, 2026 at 04:25:43PM +0100, Leo Yan wrote:
> On Tue, Sep 15, 2026 at 12:34:35PM +0100, Yeoreum Yun wrote:
> 
> > To resolve these inconsistencies, the configuration should be separated into:
> > 
> >   - active_config, which is applied configuration for the current session
> >   - config, which stores the settings configured via sysfs.
> > 
> > and apply configuration from configfs after taking a mode.
> 
> I did the following tests on this series:
> 
>  1) Perf test on Orion6 board:
> 
>   # ./perf test coresight
>   142: CoreSight synthesized callchain                                                                           : Ok
>   143: CoreSight concurrent threads                                                                              : Ok
>   144: CoreSight context switch thread attribution                                                               : Ok
>   145: CoreSight deterministic workload decode                                                                   : Ok
>   146: CoreSight raw dump stress                                                                                 : Ok
>   147: Check Arm CoreSight trace data recording and synthesized samples                                          : FAILED!
>   148: Check Arm CoreSight disassembly script completes without errors                                           : Ok
> 
> Test 147 has a known issue with per-thread mode. The failure was already
> observed before this series.
> 
>  2) Strobe mode test:
> 
>   # echo 5000 > /sys/kernel/config/cs-syscfg/features/strobing/params/window/value
> 
>   # echo 0 > /sys/kernel/config/cs-syscfg/features/strobing/params/period/value
>   # perf record -e cs_etm/autofdo,timestamp=0/u -m,128M  -- perf test -w brstack 3000000
>   [ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 36.301 MB perf.data ]
> 
>   # echo 1 > /sys/kernel/config/cs-syscfg/features/strobing/params/period/value
>   # perf record -e cs_etm/autofdo,timestamp=0/u -m,128M  -- perf test -w brstack 3000000
>   [ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 18.361 MB perf.data ]
> 
>   # echo 2 > /sys/kernel/config/cs-syscfg/features/strobing/params/period/value
>   # perf record -e cs_etm/autofdo,timestamp=0/u -m,128M  -- perf test -w brstack 3000000
>   [ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 12.246 MB perf.data ]
> 
>   # echo 3 > /sys/kernel/config/cs-syscfg/features/strobing/params/period/value
>   # perf record -e cs_etm/autofdo,timestamp=0/u -m,128M  -- perf test -w brstack 3000000
>   [ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 9.197 MB perf.data ]
> 
> The captured trace sizes maintain the expected proportional relationship
> with the period values.
> 
>  3) I verified the series on Juno-r2 baord with insmod and rmmod, and
>     CPU PM, and did not see any regression.
> 
> Maybe it'd be good to send a new version addressing Mike's comments.
> Based on the test results, you can add my test tags:
> 
> Tested-by: Leo Yan <leo.yan@arm.com>

Thanks! ;)

-- 
Sincerely,
Yeoreum Yun