From: Reinette Chatre <reinette.chatre@intel.com>
To: Babu Moger <babu.moger@amd.com>, <corbet@lwn.net>,
<tony.luck@intel.com>, <james.morse@arm.com>,
<tglx@linutronix.de>, <mingo@redhat.com>, <bp@alien8.de>,
<dave.hansen@linux.intel.com>
Cc: <Dave.Martin@arm.com>, <x86@kernel.org>, <hpa@zytor.com>,
<akpm@linux-foundation.org>, <paulmck@kernel.org>,
<rostedt@goodmis.org>, <Neeraj.Upadhyay@amd.com>,
<david@redhat.com>, <arnd@arndb.de>, <fvdl@google.com>,
<seanjc@google.com>, <jpoimboe@kernel.org>,
<pawan.kumar.gupta@linux.intel.com>, <xin@zytor.com>,
<manali.shukla@amd.com>, <tao1.su@linux.intel.com>,
<sohil.mehta@intel.com>, <kai.huang@intel.com>,
<xiaoyao.li@intel.com>, <peterz@infradead.org>,
<xin3.li@intel.com>, <kan.liang@linux.intel.com>,
<mario.limonciello@amd.com>, <thomas.lendacky@amd.com>,
<perry.yuan@amd.com>, <gautham.shenoy@amd.com>,
<chang.seok.bae@intel.com>, <linux-doc@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <peternewman@google.com>,
<eranian@google.com>
Subject: Re: [PATCH v15 23/34] fs/resctrl: Support counter read/reset with mbm_event assignment mode
Date: Thu, 17 Jul 2025 20:53:15 -0700 [thread overview]
Message-ID: <9a4410c5-c72f-4a8b-ab64-9737e082c5b1@intel.com> (raw)
In-Reply-To: <df215f02db88cad714755cd5275f20cf0ee4ae26.1752013061.git.babu.moger@amd.com>
Hi Babu,
On 7/8/25 3:17 PM, Babu Moger wrote:
> When "mbm_event" counter assignment mode is enabled, the architecture
> requires a counter ID to read the event data.
>
> Introduce an is_cntr field in struct rmid_read to indicate whether counter
> assignment mode is in use.
>
> Update the logic to call resctrl_arch_cntr_read() and
> resctrl_arch_reset_cntr() when the assignment mode is active.
>
> Declare mbm_cntr_get() in fs/resctrl/internal.h to make it accessible to
> other functions within fs/resctrl.
>
> Suggested-by: Reinette Chatre <reinette.chatre@intel.com>
> Signed-off-by: Babu Moger <babu.moger@amd.com>
> ---
> v15: New patch to add is_cntr in rmid_read as discussed in
> https://lore.kernel.org/lkml/b4b14670-9cb0-4f65-abd5-39db996e8da9@intel.com/
> ---
> fs/resctrl/ctrlmondata.c | 8 ++++++++
> fs/resctrl/internal.h | 5 +++++
> fs/resctrl/monitor.c | 42 +++++++++++++++++++++++++++++++++-------
> 3 files changed, 48 insertions(+), 7 deletions(-)
>
> diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c
> index ad7ffc6acf13..ce766b2cdfc1 100644
> --- a/fs/resctrl/ctrlmondata.c
> +++ b/fs/resctrl/ctrlmondata.c
> @@ -569,6 +569,14 @@ void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
> return;
> }
>
> + if (resctrl_arch_mbm_cntr_assign_enabled(r) && resctrl_is_mbm_event(evtid)) {
> + if (mbm_cntr_get(r, d, rdtgrp, evtid) < 0) {
> + rr->err = -ENOENT;
This introduces the new -ENOENT error code but rdtgroup_mondata_show() is not enabled to
handle it. Looks like the next patch needs to be squashed into this one.
> + return;
Looking at this closer this does not seem the right place for this check. This is the
top level mon_event_read() when the user reads an event file. If this is an event
associated with a CTRL_MON group then resctrl should sum the data of the CTRL_MON group
and all of its MON groups.
It may be that the CTRL_MON group's event does not have a counter assigned, but one
or more of the MON groups do. In this case I do not think resctrl should fail reading
the CTRL_MON's event early as is done above but still provide the sum of the events that
can be counted in the MON groups that do have counters assigned. With that, only return
"Unassigned" if no counter is assigned in any CTRL_MON or MON group?
There also appears to be potential for a leak here with the early exit without calling
resctrl_arch_mon_ctx_free(). As mentioned earlier in series I do not think that
arch_mon_ctx is relevant to this counter assignment so I think mbm_update_one_event()
as well as mon_event_read() should make calling resctrl_arch_mon_ctx_alloc()
conditional on is_cntr/is_mbm_cntr.
> + }
> + rr->is_cntr = true;
> + }
> +
> cpu = cpumask_any_housekeeping(cpumask, RESCTRL_PICK_ANY_CPU);
>
> /*
> diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h
> index 647a0466ffa0..fb4fec4a4cdc 100644
> --- a/fs/resctrl/internal.h
> +++ b/fs/resctrl/internal.h
> @@ -110,6 +110,8 @@ struct mon_data {
> * domains in @r sharing L3 @ci.id
> * @evtid: Which monitor event to read.
> * @first: Initialize MBM counter when true.
> + * @is_cntr: Is the counter valid? true if "mbm_event" counter assignment mode is
> + * enabled and it is an MBM event.
> * @ci_id: Cacheinfo id for L3. Only set when @d is NULL. Used when summing domains.
> * @err: Error encountered when reading counter.
> * @val: Returned value of event counter. If @rgrp is a parent resource group,
> @@ -124,6 +126,7 @@ struct rmid_read {
> struct rdt_mon_domain *d;
> enum resctrl_event_id evtid;
> bool first;
> + bool is_cntr;
After seeing how this all comes together the "is_cntr" is very generic and not
matching the often used "mbm_cntr". What do you think of "is_mbm_cntr"?
> unsigned int ci_id;
> int err;
> u64 val;
> @@ -391,6 +394,8 @@ int rdtgroup_assign_cntr_event(struct rdt_mon_domain *d, struct rdtgroup *rdtgrp
> struct mon_evt *mevt);
> void rdtgroup_unassign_cntr_event(struct rdt_mon_domain *d, struct rdtgroup *rdtgrp,
> struct mon_evt *mevt);
> +int mbm_cntr_get(struct rdt_resource *r, struct rdt_mon_domain *d,
> + struct rdtgroup *rdtgrp, enum resctrl_event_id evtid);
>
> #ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK
> int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp);
> diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c
> index 73f507942b6d..35faca7ff3b1 100644
> --- a/fs/resctrl/monitor.c
> +++ b/fs/resctrl/monitor.c
> @@ -366,9 +366,21 @@ static int __mon_event_count(struct rdtgroup *rdtgrp, struct rmid_read *rr)
> struct mbm_state *m;
> int err, ret;
> u64 tval = 0;
> + int cntr_id;
I've tried a couple of checkers and not all can pick up that cntr_id is always
assigned when it is used below. While it is not necessary it will be helpful to
initialize cntr_id here (-ENOENT?) just to avoid needing to prove that hypothetical
reports from these checkers are false positives.
> +
> + if (rr->is_cntr) {
> + cntr_id = mbm_cntr_get(rr->r, rr->d, rdtgrp, rr->evtid);
> + if (cntr_id < 0) {
> + rr->err = -ENOENT;
> + return -EINVAL;
> + }
This looks to be the right place for the mbm_cntr_get() check. Just keeping this one
avoids the duplication while also makeing the code match existing user ABI.
What do you think?
> + }
>
> if (rr->first) {
> - resctrl_arch_reset_rmid(rr->r, rr->d, closid, rmid, rr->evtid);
> + if (rr->is_cntr)
> + resctrl_arch_reset_cntr(rr->r, rr->d, closid, rmid, cntr_id, rr->evtid);
> + else
> + resctrl_arch_reset_rmid(rr->r, rr->d, closid, rmid, rr->evtid);
> m = get_mbm_state(rr->d, closid, rmid, rr->evtid);
> if (m)
> memset(m, 0, sizeof(struct mbm_state));
> @@ -379,8 +391,12 @@ static int __mon_event_count(struct rdtgroup *rdtgrp, struct rmid_read *rr)
> /* Reading a single domain, must be on a CPU in that domain. */
> if (!cpumask_test_cpu(cpu, &rr->d->hdr.cpu_mask))
> return -EINVAL;
> - rr->err = resctrl_arch_rmid_read(rr->r, rr->d, closid, rmid,
> - rr->evtid, &tval, rr->arch_mon_ctx);
> + if (rr->is_cntr)
> + rr->err = resctrl_arch_cntr_read(rr->r, rr->d, closid, rmid, cntr_id,
> + rr->evtid, &tval, rr->arch_mon_ctx);
> + else
> + rr->err = resctrl_arch_rmid_read(rr->r, rr->d, closid, rmid,
> + rr->evtid, &tval, rr->arch_mon_ctx);
> if (rr->err)
> return rr->err;
>
> @@ -405,8 +421,12 @@ static int __mon_event_count(struct rdtgroup *rdtgrp, struct rmid_read *rr)
> list_for_each_entry(d, &rr->r->mon_domains, hdr.list) {
> if (d->ci_id != rr->ci_id)
> continue;
> - err = resctrl_arch_rmid_read(rr->r, d, closid, rmid,
> - rr->evtid, &tval, rr->arch_mon_ctx);
> + if (rr->is_cntr)
> + err = resctrl_arch_cntr_read(rr->r, d, closid, rmid, cntr_id,
> + rr->evtid, &tval, rr->arch_mon_ctx);
> + else
> + err = resctrl_arch_rmid_read(rr->r, d, closid, rmid,
> + rr->evtid, &tval, rr->arch_mon_ctx);
> if (!err) {
> rr->val += tval;
> ret = 0;
> @@ -620,6 +640,14 @@ static void mbm_update_one_event(struct rdt_resource *r, struct rdt_mon_domain *
> return;
> }
>
> + if (resctrl_arch_mbm_cntr_assign_enabled(r) && resctrl_is_mbm_event(evtid)) {
> + if (mbm_cntr_get(r, d, rdtgrp, evtid) < 0) {
> + rr.err = -ENOENT;
> + return;
> + }
This can be dropped also? Only is_cntr/is_mbm_cntr needs to be set here, __mon_event_count()
called below duplicates above snippet and will set rr->err
Same comment here about missing call to resctrl_arch_mon_ctx_free().
> + rr.is_cntr = true;
> + }
> +
> __mon_event_count(rdtgrp, &rr);
>
> /*
> @@ -982,8 +1010,8 @@ static void resctrl_config_cntr(struct rdt_resource *r, struct rdt_mon_domain *d
> * Return:
> * Valid counter ID on success, or -ENOENT on failure.
> */
> -static int mbm_cntr_get(struct rdt_resource *r, struct rdt_mon_domain *d,
> - struct rdtgroup *rdtgrp, enum resctrl_event_id evtid)
> +int mbm_cntr_get(struct rdt_resource *r, struct rdt_mon_domain *d,
> + struct rdtgroup *rdtgrp, enum resctrl_event_id evtid)
> {
> int cntr_id;
>
Reinette
next prev parent reply other threads:[~2025-07-18 3:53 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-08 22:17 [PATCH v15 00/34] fs,x86/resctrl: Support AMD Assignable Bandwidth Monitoring Counters (ABMC) Babu Moger
2025-07-08 22:17 ` [PATCH v15 01/34] x86,fs/resctrl: Consolidate monitor event descriptions Babu Moger
2025-07-17 18:43 ` Reinette Chatre
2025-07-18 14:19 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 02/34] x86,fs/resctrl: Replace architecture event enabled checks Babu Moger
2025-07-08 22:17 ` [PATCH v15 03/34] x86/resctrl: Remove 'rdt_mon_features' global variable Babu Moger
2025-07-08 22:17 ` [PATCH v15 04/34] x86,fs/resctrl: Prepare for more monitor events Babu Moger
2025-07-08 22:17 ` [PATCH v15 05/34] x86/cpufeatures: Add support for Assignable Bandwidth Monitoring Counters (ABMC) Babu Moger
2025-07-15 11:47 ` Peter Newman
2025-07-15 14:16 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 06/34] x86/resctrl: Add ABMC feature in the command line options Babu Moger
2025-07-17 18:44 ` Reinette Chatre
2025-07-08 22:17 ` [PATCH v15 07/34] x86,fs/resctrl: Consolidate monitoring related data from rdt_resource Babu Moger
2025-07-17 18:44 ` Reinette Chatre
2025-07-08 22:17 ` [PATCH v15 08/34] x86,fs/resctrl: Detect Assignable Bandwidth Monitoring feature details Babu Moger
2025-07-15 16:26 ` Reinette Chatre
2025-07-15 16:53 ` Moger, Babu
2025-07-17 18:45 ` Reinette Chatre
2025-07-21 15:20 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 09/34] x86/resctrl: Add support to enable/disable AMD ABMC feature Babu Moger
2025-07-17 18:46 ` Reinette Chatre
2025-07-08 22:17 ` [PATCH v15 10/34] fs/resctrl: Introduce the interface to display monitoring modes Babu Moger
2025-07-17 18:46 ` Reinette Chatre
2025-07-08 22:17 ` [PATCH v15 11/34] fs/resctrl: Add resctrl file to display number of assignable counters Babu Moger
2025-07-17 18:46 ` Reinette Chatre
2025-07-08 22:17 ` [PATCH v15 12/34] fs/resctrl: Introduce mbm_cntr_cfg to track assignable counters per domain Babu Moger
2025-07-17 18:46 ` Reinette Chatre
2025-07-08 22:17 ` [PATCH v15 13/34] fs/resctrl: Introduce interface to display number of free MBM counters Babu Moger
2025-07-17 18:47 ` Reinette Chatre
2025-07-08 22:17 ` [PATCH v15 14/34] x86/resctrl: Add data structures and definitions for ABMC assignment Babu Moger
2025-07-17 18:47 ` Reinette Chatre
2025-07-08 22:17 ` [PATCH v15 15/34] fs/resctrl: Introduce event configuration field in struct mon_evt Babu Moger
2025-07-17 18:47 ` Reinette Chatre
2025-07-08 22:17 ` [PATCH v15 16/34] x86,fs/resctrl: Implement resctrl_arch_config_cntr() to assign a counter with ABMC Babu Moger
2025-07-17 18:49 ` Reinette Chatre
2025-07-21 17:40 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 17/34] fs/resctrl: Add the functionality to assign MBM events Babu Moger
2025-07-18 3:47 ` Reinette Chatre
2025-07-21 19:54 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 18/34] fs/resctrl: Add the functionality to unassign " Babu Moger
2025-07-18 3:48 ` Reinette Chatre
2025-07-21 20:21 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 19/34] fs/resctrl: Pass struct rdtgroup instead of individual members Babu Moger
2025-07-18 3:54 ` Reinette Chatre
2025-07-21 20:59 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 20/34] fs/resctrl: Introduce counter read, reset calls in mbm_event mode Babu Moger
2025-07-18 3:50 ` Reinette Chatre
2025-07-21 23:39 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 21/34] x86/resctrl: Refactor resctrl_arch_rmid_read() Babu Moger
2025-07-18 3:51 ` Reinette Chatre
2025-07-22 14:23 ` Moger, Babu
2025-07-22 14:56 ` Reinette Chatre
2025-07-22 15:25 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 22/34] x86/resctrl: Implement resctrl_arch_reset_cntr() and resctrl_arch_cntr_read() Babu Moger
2025-07-18 3:51 ` Reinette Chatre
2025-07-22 15:51 ` Moger, Babu
2025-07-22 23:27 ` Reinette Chatre
2025-07-23 16:48 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 23/34] fs/resctrl: Support counter read/reset with mbm_event assignment mode Babu Moger
2025-07-18 3:53 ` Reinette Chatre [this message]
2025-07-22 17:53 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 24/34] fs/resctrl: Report 'Unassigned' for MBM events in mbm_event mode Babu Moger
2025-07-18 3:53 ` Reinette Chatre
2025-07-22 18:15 ` Moger, Babu
2025-07-22 23:28 ` Reinette Chatre
2025-07-23 0:26 ` Moger, Babu
2025-07-23 2:05 ` Reinette Chatre
2025-07-23 13:14 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 25/34] fs/resctrl: Add definitions for MBM event configuration Babu Moger
2025-07-18 3:55 ` Reinette Chatre
2025-07-22 19:34 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 26/34] fs/resctrl: Add event configuration directory under info/L3_MON/ Babu Moger
2025-07-18 3:54 ` Reinette Chatre
2025-07-18 22:20 ` Reinette Chatre
2025-07-22 20:22 ` Moger, Babu
2025-07-22 20:11 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 27/34] fs/resctrl: Provide interface to update the event configurations Babu Moger
2025-07-18 3:55 ` Reinette Chatre
2025-07-22 22:55 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 28/34] fs/resctrl: Introduce mbm_assign_on_mkdir to enable assignments on mkdir Babu Moger
2025-07-15 13:53 ` Peter Newman
2025-07-15 14:18 ` Moger, Babu
2025-07-15 14:27 ` Reinette Chatre
2025-07-15 15:28 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 29/34] x86,fs/resctrl: Auto assign counters on mkdir and clean up on group removal Babu Moger
2025-07-18 3:56 ` Reinette Chatre
2025-07-22 23:59 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 30/34] fs/resctrl: Introduce mbm_L3_assignments to list assignments in a group Babu Moger
2025-07-08 22:17 ` [PATCH v15 31/34] fs/resctrl: Introduce the interface to modify " Babu Moger
2025-07-18 4:01 ` Reinette Chatre
2025-07-23 16:19 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 32/34] fs/resctrl: Disable BMEC event configuration when mbm_event mode is enabled Babu Moger
2025-07-18 4:02 ` Reinette Chatre
2025-07-23 17:30 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 33/34] fs/resctrl: Introduce the interface to switch between monitor modes Babu Moger
2025-07-18 4:03 ` Reinette Chatre
2025-07-23 18:50 ` Moger, Babu
2025-07-08 22:17 ` [PATCH v15 34/34] x86/resctrl: Configure mbm_event mode if supported Babu Moger
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=9a4410c5-c72f-4a8b-ab64-9737e082c5b1@intel.com \
--to=reinette.chatre@intel.com \
--cc=Dave.Martin@arm.com \
--cc=Neeraj.Upadhyay@amd.com \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=babu.moger@amd.com \
--cc=bp@alien8.de \
--cc=chang.seok.bae@intel.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=david@redhat.com \
--cc=eranian@google.com \
--cc=fvdl@google.com \
--cc=gautham.shenoy@amd.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=jpoimboe@kernel.org \
--cc=kai.huang@intel.com \
--cc=kan.liang@linux.intel.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=manali.shukla@amd.com \
--cc=mario.limonciello@amd.com \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=pawan.kumar.gupta@linux.intel.com \
--cc=perry.yuan@amd.com \
--cc=peternewman@google.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=seanjc@google.com \
--cc=sohil.mehta@intel.com \
--cc=tao1.su@linux.intel.com \
--cc=tglx@linutronix.de \
--cc=thomas.lendacky@amd.com \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
--cc=xiaoyao.li@intel.com \
--cc=xin3.li@intel.com \
--cc=xin@zytor.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).