From: Yeoreum Yun <yeoreum.yun@arm.com>
To: Mike Leach <mike.leach@arm.com>
Cc: Yeoreum Yun <yeoreum.yun@arm.com>,
James Clark <james.clark@linaro.org>, Leo Yan <leo.yan@arm.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
coresight@lists.linaro.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-rt-devel@lists.linux.dev,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Clark Williams <clrkwllms@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>
Subject: Re: [PATCH v11 4/9] coresight: etm3x: fix inconsistencies with sysfs configuration
Date: Fri, 18 Sep 2026 18:09:15 +0100 [thread overview]
Message-ID: <aq1wOxx3ibRXq5z3@e129823.arm.com> (raw)
In-Reply-To: <9b7086de-df87-4d5c-8a7a-fc2f7c724c0b@arm.com>
> Hi,
>
> On 9/15/26 12:34, Yeoreum Yun wrote:
> > The current ETM3x 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.
> >
> > To resolve these issues, separate the configuration into:
> >
> > - active_config: the configuration applied to the current session
> > - config: the configuration set via sysfs
> >
>
> Same comment as for the etm4 config naming
Acked.
>
>
> > Additionally:
> >
> > - Since active_config and related fields are accessed only by the local CPU
> > in etm_enable/disable_sysfs_smp_call() (similar to perf enable/disable),
> > remove the lock/unlock from the sysfs enable/disable path and
> > starting/dying_cpu path except when to access config fields only.
> >
> > - Some of sysfs interface read etm register directly. To reduce lock
> > scope while the etm_enable_hw()/etm_disable_hw(), handle it via
> > IPI so that registers could be read from on proper CPU.
> >
> > Fixes: 1925a470ce69 ("coresight: etm3x: splitting struct etm_drvdata")
> > Signed-off-by: Yeoreum Yun <yeoreum.yun@arm.com>
> > ---
> > drivers/hwtracing/coresight/coresight-etm.h | 4 +-
> > drivers/hwtracing/coresight/coresight-etm3x-core.c | 68 ++++++++++--------
> > .../hwtracing/coresight/coresight-etm3x-sysfs.c | 80 +++++++++++++++-------
> > 3 files changed, 100 insertions(+), 52 deletions(-)
> >
> > diff --git a/drivers/hwtracing/coresight/coresight-etm.h b/drivers/hwtracing/coresight/coresight-etm.h
> > index 1d753cca29439..f3796162168d4 100644
> > --- a/drivers/hwtracing/coresight/coresight-etm.h
> > +++ b/drivers/hwtracing/coresight/coresight-etm.h
> > @@ -226,7 +226,8 @@ struct etm_config {
> > * @etmccr: value of register ETMCCR.
> > * @etmccer: value of register ETMCCER.
> > * @traceid: value of the current ID for this component.
> > - * @config: structure holding configuration parameters.
> > + * @active_config: structure holding current running configuration.
> > + * @config: structure holding sysfs mode configuration.
> > */
> > struct etm_drvdata {
> > struct csdev_access csa;
> > @@ -248,6 +249,7 @@ struct etm_drvdata {
> > u32 etmccr;
> > u32 etmccer;
> > u32 traceid;
> > + struct etm_config active_config;
> > struct etm_config config;
> > };
> > diff --git a/drivers/hwtracing/coresight/coresight-etm3x-core.c b/drivers/hwtracing/coresight/coresight-etm3x-core.c
> > index 862ad0786699c..fd76a57e5f861 100644
> > --- a/drivers/hwtracing/coresight/coresight-etm3x-core.c
> > +++ b/drivers/hwtracing/coresight/coresight-etm3x-core.c
> > @@ -308,7 +308,7 @@ void etm_config_trace_mode(struct etm_config *config)
> > static int etm_parse_event_config(struct etm_drvdata *drvdata,
> > struct perf_event *event)
> > {
> > - struct etm_config *config = &drvdata->config;
> > + struct etm_config *config = &drvdata->active_config;
> > struct perf_event_attr *attr = &event->attr;
> > u8 ts_level;
> > @@ -367,7 +367,7 @@ static int etm_enable_hw(struct etm_drvdata *drvdata)
> > {
> > int i, rc;
> > u32 etmcr;
> > - struct etm_config *config = &drvdata->config;
> > + struct etm_config *config = &drvdata->active_config;
> > struct coresight_device *csdev = drvdata->csdev;
> > CS_UNLOCK(drvdata->csa.base);
> > @@ -442,32 +442,30 @@ static int etm_enable_hw(struct etm_drvdata *drvdata)
> > struct etm_enable_arg {
> > struct etm_drvdata *drvdata;
> > struct coresight_path *path;
> > + struct etm_config config;
> > int rc;
> > };
> > static void etm_enable_sysfs_smp_call(void *info)
> > {
> > struct etm_enable_arg *arg = info;
> > + struct etm_drvdata *drvdata;
> > 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;
> > - }
> > + drvdata = arg->drvdata;
> > + csdev = drvdata->csdev;
> > - arg->rc = etm_enable_hw(arg->drvdata);
> > + drvdata->active_config = arg->config;
> > + drvdata->traceid = arg->path->trace_id;
> > - /* The tracer didn't start */
> > - if (arg->rc) {
> > - coresight_set_mode(csdev, CS_MODE_DISABLED);
> > + arg->rc = etm_enable_hw(arg->drvdata);
> > + if (arg->rc)
> > return;
> > - }
> > + drvdata->sticky_enable = true;
> > csdev->path = arg->path;
> > }
> > @@ -512,9 +510,10 @@ static int etm_enable_sysfs(struct coresight_device *csdev, struct coresight_pat
> > struct etm_enable_arg arg = { };
> > int ret;
> > - spin_lock(&drvdata->spinlock);
> > -
> > - drvdata->traceid = path->trace_id;
> > + if (!coresight_take_mode(csdev, CS_MODE_SYSFS)) {
> > + /* Someone is already using the tracer */
> > + return -EBUSY;
> > + }
> > /*
> > * Configure the ETM only if the CPU is online. If it isn't online
> > @@ -523,23 +522,27 @@ static int etm_enable_sysfs(struct coresight_device *csdev, struct coresight_pat
> > if (cpu_online(drvdata->cpu)) {
> > arg.drvdata = drvdata;
> > arg.path = path;
> > +
> > + scoped_guard(spinlock, &drvdata->spinlock) {
> > + arg.config = drvdata->config;
> > + }
> > +
>
> Again I think the arg.config is unnecessary
Agree. I'll change as etm4's comment!
Thanks!
[...]
--
Sincerely,
Yeoreum Yun
next prev parent reply other threads:[~2026-09-18 17:09 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-15 11:34 [PATCH v11 0/9] fix several inconsistencies with sysfs configuration in etmX Yeoreum Yun
2026-09-15 11:34 ` [PATCH v11 1/9] coresight: etm4x: prohibit modifying ss_status and cntr_val while session is enabled Yeoreum Yun
2026-09-15 11:51 ` sashiko-bot
2026-09-15 13:26 ` Yeoreum Yun
2026-09-18 11:14 ` Mike Leach
2026-09-18 17:08 ` Yeoreum Yun
2026-09-15 11:34 ` [PATCH v11 2/9] coresight: etm3x: prohibit modifying cntr_val and reset " Yeoreum Yun
2026-09-15 11:48 ` sashiko-bot
2026-09-15 13:30 ` Yeoreum Yun
2026-09-15 13:55 ` Yeoreum Yun
2026-09-18 11:15 ` Mike Leach
2026-09-15 11:34 ` [PATCH v11 3/9] coresight: etm4x: fix inconsistencies with sysfs configuration Yeoreum Yun
2026-09-15 11:53 ` sashiko-bot
2026-09-15 12:36 ` Yeoreum Yun
2026-09-18 13:49 ` Mike Leach
2026-09-18 17:00 ` Yeoreum Yun
2026-09-15 11:34 ` [PATCH v11 4/9] coresight: etm3x: " Yeoreum Yun
2026-09-15 11:47 ` sashiko-bot
2026-09-15 13:42 ` Yeoreum Yun
2026-09-18 13:57 ` Mike Leach
2026-09-18 17:09 ` Yeoreum Yun [this message]
2026-09-15 11:34 ` [PATCH v11 5/9] coresight: etm3x: remove redundant cpu online check on etm_enable_sysfs() Yeoreum Yun
2026-09-18 13:58 ` Mike Leach
2026-09-15 11:34 ` [PATCH v11 6/9] coresight: etm4x: introduce struct etm4_caps Yeoreum Yun
2026-09-18 14:01 ` Mike Leach
2026-09-15 11:34 ` [PATCH v11 7/9] coresight: etm4x: exclude ss_status from drvdata->config Yeoreum Yun
2026-09-15 11:49 ` sashiko-bot
2026-09-15 13:35 ` Yeoreum Yun
2026-09-18 14:04 ` Mike Leach
2026-09-18 17:13 ` Yeoreum Yun
2026-09-15 11:34 ` [PATCH v11 8/9] coresight: etm4x: remove s_ex_level from config Yeoreum Yun
2026-09-18 14:05 ` Mike Leach
2026-09-15 11:34 ` [PATCH v11 9/9] coresight: etm3x: introduce struct etm_caps Yeoreum Yun
2026-09-18 14:57 ` Mike Leach
2026-09-24 15:25 ` [PATCH v11 0/9] fix several inconsistencies with sysfs configuration in etmX Leo Yan
2026-09-24 17:28 ` Yeoreum Yun
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aq1wOxx3ibRXq5z3@e129823.arm.com \
--to=yeoreum.yun@arm.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=bigeasy@linutronix.de \
--cc=clrkwllms@kernel.org \
--cc=coresight@lists.linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=james.clark@linaro.org \
--cc=leo.yan@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=mathieu.poirier@linaro.org \
--cc=mike.leach@arm.com \
--cc=rostedt@goodmis.org \
--cc=suzuki.poulose@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.