From: Jonathan Cameron <jonathan.cameron@oss.qualcomm.com>
To: Cristian Marussi <cristian.marussi@arm.com>
Cc: linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, arm-scmi@vger.kernel.org,
linux-doc@vger.kernel.org, sudeep.holla@kernel.org,
james.quinlan@broadcom.com, f.fainelli@gmail.com,
vincent.guittot@linaro.org, etienne.carriere@st.com,
peng.fan@oss.nxp.com, michal.simek@amd.com, d-gole@ti.com,
elif.topuz@arm.com, lukasz.luba@arm.com, philip.radford@arm.com,
david@kernel.org, souvik.chakravarty@arm.com, leitao@kernel.org,
kas@kernel.org, puranjay@kernel.org, usama.arif@linux.dev,
kernel-team@meta.com
Subject: Re: [PATCH v15 16/35] firmware: arm_scmi: Add Telemetry TDCF parsing for UUID lines
Date: Tue, 10 Nov 2026 10:49:25 -0800 [thread overview]
Message-ID: <20261110104925.00001db6@oss.qualcomm.com> (raw)
In-Reply-To: <20261109091221.2532706-17-cristian.marussi@arm.com>
On Mon, 9 Nov 2026 09:12:02 +0000
Cristian Marussi <cristian.marussi@arm.com> wrote:
> Add support to parse, track and link TDCF UUID lines to the related
> discovered DataEvents.
>
> Maintain also a central list of discovered UUID lines.
>
> Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
Trivial stuff + a follow on about how you are handling the
devm_ cleanup for the de and it making your code more complex
than it needs to be. I think a simple helper will get
you to a better state (and my preferred approach of fine grained
management is probably overkill!)
Jonathan
> ---
> v14 --> v15
> - use proper casting in tlm_collect
> - use snapshots to collect UUIDs during full scans
> - stop tracking UUIDs lines singularly..it's useless
> - use UUIDs line hashing for lookup
> - clarified UUID/DE binding are permanent
> - fixed WARN_ON invocation on missing active_uuid
> v13 --> v14
> - split out of previous single patch implementing parse SHMTI routines
> ---
> drivers/firmware/arm_scmi/telemetry.c | 277 +++++++++++++++++++++++++-
> include/linux/scmi_protocol.h | 2 +
> 2 files changed, 277 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/firmware/arm_scmi/telemetry.c b/drivers/firmware/arm_scmi/telemetry.c
> index e3fbcb1e6ea7..38a94d66116f 100644
> --- a/drivers/firmware/arm_scmi/telemetry.c
> +++ b/drivers/firmware/arm_scmi/telemetry.c
>
> +static int scmi_telemetry_uuids_update(struct telemetry_info *ti,
> + struct telemetry_uuid *uuid)
> +{
> + uuid_t **cur_uuids;
> +
> + /* Resize array if needed ... */
> + if (ti->info.num_uuids + SCMI_UUID_DB_THRESH >= ti->uuids_len) {
> + uuid_t **new_uuids, **old_uuids;
> + unsigned int new_len = ti->uuids_len * 2;
> +
> + new_uuids = kzalloc_objs(*new_uuids, new_len);
> + if (!new_uuids)
> + return -ENOMEM;
> +
> + old_uuids = rcu_dereference_protected(ti->info.uuids,
> + lockdep_is_held(&ti->uuids_mtx));
> + /* Copy/move old allocated UUIDs */
> + for (int i = 0; i < ti->info.num_uuids; i++)
> + new_uuids[i] = old_uuids[i];
memcpy?
> +
> + /* Expose new UUID pointer */
> + rcu_assign_pointer(ti->info.uuids, new_uuids);
> + ti->uuids_len = new_len;
> +
> + kfree_rcu_mightsleep(old_uuids);
> + }
> +
> + /* Store new UUID reference into the globally accessible UUIDS */
> + cur_uuids = rcu_dereference_protected(ti->info.uuids,
> + lockdep_is_held(&ti->uuids_mtx));
> + cur_uuids[ti->info.num_uuids] = &uuid->uuid;
> + rcu_assign_pointer(ti->info.uuids, cur_uuids);
> + /* Update UUIDs count */
> + smp_store_release(&ti->info.num_uuids, ti->info.num_uuids + 1);
> +
> + return 0;
> +}
> @@ -2362,6 +2554,7 @@ static int scmi_telemetry_resources_alloc(struct telemetry_info *ti)
> }
>
> INIT_LIST_HEAD(&ti->fcs_des);
> + hash_init(ti->uuids_ht);
Why init the hash here but the mutex at the caller? I guess
maybe you wanted it to be obvious the mutex was valid, but to me
just doing mutex_init up here is easier.
>
> ti->shmti = no_free_ptr(shmtis);
> ti->info.shmtis = no_free_ptr(shmtis_info);
> @@ -2427,6 +2620,37 @@ static void scmi_telemetry_lines_cleanup(struct telemetry_info *ti)
> }
> }
> static void scmi_telemetry_tdes_cleanup(struct telemetry_info *ti)
> {
> struct scmi_telemetry_de *de;
> @@ -2471,6 +2695,7 @@ static void scmi_telemetry_instance_cleanup(void *arg)
>
> scmi_telemetry_groups_free(ti->rinfo);
> scmi_telemetry_tdes_cleanup(ti);
> + scmi_telemetry_uuids_cleanup(ti);
See below. The monolithic approach to devm cleanup is making
your setup code harder to read. Suggestions down there on how
to avoid that.
> scmi_telemetry_lines_cleanup(ti);
> scmi_telemetry_resources_free(ti);
> }
> /**
> * scmi_telemetry_instance_init - Instance initializer
> * @ti: A reference to the telemetry info descriptor for this instance
> @@ -2563,6 +2805,8 @@ scmi_telemetry_resources_enumerate(struct telemetry_info *ti)
> */
> static int scmi_telemetry_instance_init(struct telemetry_info *ti)
> {
> + unsigned int uuids_len;
> + uuid_t **cur_uuids;
> int ret;
>
> ret = scmi_telemetry_resources_alloc(ti);
> @@ -2571,6 +2815,35 @@ static int scmi_telemetry_instance_init(struct telemetry_info *ti)
>
> xa_init(&ti->xa_des);
>
> + /*
> + * Always allocate at least one slot for the primary and anyway at
> + * least enough to avoid immediate resizing, assuring uuids_len
> + * always greater or equal to one.
> + */
> + uuids_len = max(ti->num_shmti * 2, SCMI_UUID_DB_THRESH + 1);
> + cur_uuids = kzalloc_objs(*cur_uuids, uuids_len);
> + if (!cur_uuids) {
> + xa_destroy(&ti->xa_des);
> + scmi_telemetry_resources_free(ti);
This sort of dance of not using a goto block because we
have unified cleanup at the end always suggests to me one of two things.
Finer grained devm_ callbacks, or a helper that can have a clean return
to this outer function with no side effects, those having all been
cleaned up via goto based unified error handling in the helper.
I personally prefer fine grained devm with each element clearly
being paired with the undo, but the helper is perhaps easier to
introduce here.
> + return -ENOMEM;
> + }
> +
> + mutex_init(&ti->uuids_mtx);
> + /* Expose new UUID pointer */
> + scoped_guard(mutex, &ti->uuids_mtx) {
> + rcu_assign_pointer(ti->info.uuids, cur_uuids);
> + ti->uuids_len = uuids_len;
> + }
> +
> + /* Initialize the first UUIDs in the global list with the primary */
> + ret = scmi_telemetry_primary_uuid_init(ti);
> + if (ret) {
> + scmi_telemetry_uuids_cleanup(ti);
> + xa_destroy(&ti->xa_des);
> + scmi_telemetry_resources_free(ti);
> + return ret;
> + }
> +
> atomic_set(&ti->des_enabled[ENA_STATE], 0);
> atomic_set(&ti->des_enabled[ENA_TSTAMP], 0);
> mutex_init(&ti->des_enabled_mtx);
> diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h
> index b7b8bd77b37d..3973779c0aba 100644
> --- a/include/linux/scmi_protocol.h
> +++ b/include/linux/scmi_protocol.h
> @@ -981,6 +981,8 @@ struct scmi_telemetry_info {
> unsigned int active_update_interval;
> struct scmi_telemetry_intervals *intervals;
> struct scmi_telemetry_shmti_info **shmtis;
> + unsigned int num_uuids;
> + uuid_t * __rcu *uuids __counted_by_ptr(num_uuids);
> };
>
> /**
next prev parent reply other threads:[~2026-11-10 18:50 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-09 9:11 [PATCH v15 00/35] Introduce SCMI Telemetry support Cristian Marussi
2026-11-09 9:11 ` [PATCH v15 01/35] firmware: arm_scmi: Harden iterators state parsing Cristian Marussi
2026-11-09 21:57 ` Jonathan Cameron
2026-11-10 8:19 ` Cristian Marussi
2026-11-09 9:11 ` [PATCH v15 02/35] firmware: arm_scmi: Add new SCMIv4.0 error codes definitions Cristian Marussi
2026-11-09 9:11 ` [PATCH v15 03/35] firmware: arm_scmi: Introduce a dedicated SCMI Errors header Cristian Marussi
2026-11-09 22:01 ` Jonathan Cameron
2026-11-10 8:23 ` Cristian Marussi
2026-11-09 9:11 ` [PATCH v15 04/35] firmware: arm_scmi: Allow registration of unknown-size events/reports Cristian Marussi
2026-11-09 22:07 ` Jonathan Cameron
2026-11-10 8:27 ` Cristian Marussi
2026-11-09 9:11 ` [PATCH v15 05/35] firmware: arm_scmi: Refactor __scmi_event_handler_get_ops helper Cristian Marussi
2026-11-09 9:11 ` [PATCH v15 06/35] firmware: arm_scmi: Introduce protocol instance notifiers Cristian Marussi
2026-11-09 23:32 ` Jonathan Cameron
2026-11-09 9:11 ` [PATCH v15 07/35] dt-bindings: firmware: arm,scmi: Add support for telemetry protocol Cristian Marussi
2026-11-09 9:11 ` [PATCH v15 08/35] include: trace: Add Telemetry trace events Cristian Marussi
2026-11-09 9:11 ` [PATCH v15 09/35] firmware: arm_scmi: Add Telemetry basic attributes enumeration Cristian Marussi
2026-11-09 23:57 ` Jonathan Cameron
2026-11-09 9:11 ` [PATCH v15 10/35] firmware: arm_scmi: Add Telemetry resources enumeration Cristian Marussi
2026-11-10 1:36 ` Jonathan Cameron
2026-11-10 15:33 ` Cristian Marussi
2026-11-12 18:01 ` Jonathan Cameron
2026-11-12 19:56 ` Cristian Marussi
2026-11-09 9:11 ` [PATCH v15 11/35] firmware: arm_scmi: Add Telemetry groups initialization Cristian Marussi
2026-11-10 1:53 ` Jonathan Cameron
2026-11-09 9:11 ` [PATCH v15 12/35] firmware: arm_scmi: Add Telemetry update intervals enumeration Cristian Marussi
2026-11-10 2:07 ` Jonathan Cameron
2026-11-09 9:11 ` [PATCH v15 13/35] firmware: arm_scmi: Add Telemetry SHMTI areas enumeration Cristian Marussi
2026-11-10 2:26 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 14/35] firmware: arm_scmi: Add Telemetry TDCF areas parsing support Cristian Marussi
2026-11-10 18:15 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 15/35] firmware: arm_scmi: Add Telemetry TDCF parsing for BLK_TS lines Cristian Marussi
2026-11-10 18:33 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 16/35] firmware: arm_scmi: Add Telemetry TDCF parsing for UUID lines Cristian Marussi
2026-11-10 18:49 ` Jonathan Cameron [this message]
2026-11-09 9:12 ` [PATCH v15 17/35] firmware: arm_scmi: Add Telemetry configuration operations Cristian Marussi
2026-11-10 20:07 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 18/35] firmware: arm_scmi: Add Telemetry DataEvent read capabilities Cristian Marussi
2026-11-10 21:59 ` Jonathan Cameron
2026-11-12 4:30 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 19/35] firmware: arm_scmi: Add Telemetry reset logic Cristian Marussi
2026-11-10 22:07 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 20/35] firmware: arm_scmi: Add Telemetry notification support Cristian Marussi
2026-11-10 22:16 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 21/35] firmware: arm_scmi: Add Telemetry boot-on support Cristian Marussi
2026-11-10 22:25 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 22/35] firmware: arm-scmi: Add Telemetry generic event support Cristian Marussi
2026-11-10 22:33 ` Jonathan Cameron
2026-11-12 19:58 ` Cristian Marussi
2026-11-09 9:12 ` [PATCH v15 23/35] firmware: arm_scmi: Add Telemetry generation counter event Cristian Marussi
2026-11-10 22:46 ` Jonathan Cameron
2026-11-12 20:17 ` Cristian Marussi
2026-11-12 21:44 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 24/35] firmware: arm_scmi: Add common per-protocol debugfs support Cristian Marussi
2026-11-10 22:50 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 25/35] firmware: arm_scmi: Add Telemetry debugfs SHMTI dump support Cristian Marussi
2026-11-10 22:54 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 26/35] firmware: arm_scmi: Add Telemetry debugfs ABI documentation Cristian Marussi
2026-11-10 22:55 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 27/35] firmware: arm_scmi: Expose per-instance identifier Cristian Marussi
2026-11-10 22:57 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 28/35] firmware: arm_scmi: Add un-managed methods to get/put protocols operations Cristian Marussi
2026-11-10 23:01 ` Jonathan Cameron
2026-11-10 23:18 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 29/35] uapi: Add ARM SCMI Telemetry definitions Cristian Marussi
2026-11-10 23:13 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 30/35] firmware: arm_scmi: Add System Telemetry driver Cristian Marussi
2026-11-10 23:46 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 31/35] firmware: arm_scmi: Enable autoloading for " Cristian Marussi
2026-11-09 9:12 ` [PATCH v15 32/35] docs: ioctl-number: Add SCMI Ioctls Cristian Marussi
2026-11-09 9:12 ` [PATCH v15 33/35] Documentation: Add SCMI System Telemetry documentation Cristian Marussi
2026-11-10 23:54 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 34/35] [RFC] kselftest/arm64: Add SCMI Telemetry UAPI compliance testcases Cristian Marussi
2026-11-11 0:13 ` Jonathan Cameron
2026-11-09 9:12 ` [PATCH v15 35/35] [RFC] tools/testing/scmi: Add SCMI Telemetry testing tool Cristian Marussi
2026-11-11 0:16 ` Jonathan Cameron
2026-11-11 0:38 ` [PATCH v15 00/35] Introduce SCMI Telemetry support Jonathan Cameron
2026-11-11 9:51 ` Sudeep Holla
2026-11-11 10:15 ` Cristian Marussi
2026-11-11 18:39 ` Jonathan Cameron
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=20261110104925.00001db6@oss.qualcomm.com \
--to=jonathan.cameron@oss.qualcomm.com \
--cc=arm-scmi@vger.kernel.org \
--cc=cristian.marussi@arm.com \
--cc=d-gole@ti.com \
--cc=david@kernel.org \
--cc=elif.topuz@arm.com \
--cc=etienne.carriere@st.com \
--cc=f.fainelli@gmail.com \
--cc=james.quinlan@broadcom.com \
--cc=kas@kernel.org \
--cc=kernel-team@meta.com \
--cc=leitao@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lukasz.luba@arm.com \
--cc=michal.simek@amd.com \
--cc=peng.fan@oss.nxp.com \
--cc=philip.radford@arm.com \
--cc=puranjay@kernel.org \
--cc=souvik.chakravarty@arm.com \
--cc=sudeep.holla@kernel.org \
--cc=usama.arif@linux.dev \
--cc=vincent.guittot@linaro.org \
/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.