From: Tony Luck <tony.luck@intel.com>
To: Fenghua Yu <fenghuay@nvidia.com>,
Reinette Chatre <reinette.chatre@intel.com>,
Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>,
Peter Newman <peternewman@google.com>,
James Morse <james.morse@arm.com>,
Babu Moger <babu.moger@amd.com>,
Drew Fustini <dfustini@baylibre.com>,
Dave Martin <Dave.Martin@arm.com>, Chen Yu <yu.c.chen@intel.com>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
patches@lists.linux.dev, Tony Luck <tony.luck@intel.com>
Subject: [PATCH v9 12/31] fs/resctrl: Make event details accessible to functions when reading events
Date: Fri, 29 Aug 2025 12:33:24 -0700 [thread overview]
Message-ID: <20250829193346.31565-13-tony.luck@intel.com> (raw)
In-Reply-To: <20250829193346.31565-1-tony.luck@intel.com>
All details about a monitor event are kept in the mon_evt structure.
Upper levels of code only provide the event id via the mon_data and
rmid_read structures to the functions finally reading the monitoring data.
The event id is sufficient for reading existing monitoring event
data that requires programming of event id into MSR when reading the
counter. Reading monitoring data from MMIO requires more context to be
able to read the correct memory. struct mon_evt is the appropriate place
for this event specific context.
Change the mon_data and rmid_read structures to hold a pointer
to the mon_evt structure instead of just taking a copy of the
event id.
No functional change.
Signed-off-by: Tony Luck <tony.luck@intel.com>
---
fs/resctrl/internal.h | 10 +++++-----
fs/resctrl/ctrlmondata.c | 16 ++++++++--------
fs/resctrl/monitor.c | 17 +++++++++--------
fs/resctrl/rdtgroup.c | 6 +++---
4 files changed, 25 insertions(+), 24 deletions(-)
diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h
index 70572f6cc223..b2a236b373c0 100644
--- a/fs/resctrl/internal.h
+++ b/fs/resctrl/internal.h
@@ -76,7 +76,7 @@ extern struct mon_evt mon_event_all[QOS_NUM_EVENTS];
* struct mon_data - Monitoring details for each event file.
* @list: Member of the global @mon_data_kn_priv_list list.
* @rid: Resource id associated with the event file.
- * @evtid: Event id associated with the event file.
+ * @evt: Event structure associated with the event file.
* @sum: Set for RDT_RESOURCE_L3 when event must be summed
* across multiple domains.
* @domid: When @sum is zero this is the domain to which
@@ -90,7 +90,7 @@ extern struct mon_evt mon_event_all[QOS_NUM_EVENTS];
struct mon_data {
struct list_head list;
enum resctrl_res_level rid;
- enum resctrl_event_id evtid;
+ struct mon_evt *evt;
int domid;
bool sum;
};
@@ -103,7 +103,7 @@ struct mon_data {
* @r: Resource describing the properties of the event being read.
* @hdr: Header of domain that the counter should be read from. If NULL then sum all
* domains in @r sharing L3 @ci.id
- * @evtid: Which monitor event to read.
+ * @evt: Which monitor event to read.
* @first: Initialize MBM counter when true.
* @ci_id: Cacheinfo id for L3. Only set when @hdr is NULL. Used when summing domains.
* @err: Error encountered when reading counter.
@@ -117,7 +117,7 @@ struct rmid_read {
struct rdtgroup *rgrp;
struct rdt_resource *r;
struct rdt_domain_hdr *hdr;
- enum resctrl_event_id evtid;
+ struct mon_evt *evt;
bool first;
unsigned int ci_id;
int err;
@@ -355,7 +355,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg);
void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
struct rdt_domain_hdr *hdr, struct rdtgroup *rdtgrp,
- cpumask_t *cpumask, int evtid, int first);
+ cpumask_t *cpumask, struct mon_evt *evt, int first);
void mbm_setup_overflow_handler(struct rdt_l3_mon_domain *dom,
unsigned long delay_ms,
diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c
index 1d7086509bfa..a99903ac5d27 100644
--- a/fs/resctrl/ctrlmondata.c
+++ b/fs/resctrl/ctrlmondata.c
@@ -548,7 +548,7 @@ struct rdt_domain_hdr *resctrl_find_domain(struct list_head *h, int id,
void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
struct rdt_domain_hdr *hdr, struct rdtgroup *rdtgrp,
- cpumask_t *cpumask, int evtid, int first)
+ cpumask_t *cpumask, struct mon_evt *evt, int first)
{
int cpu;
@@ -559,11 +559,11 @@ void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
* Setup the parameters to pass to mon_event_count() to read the data.
*/
rr->rgrp = rdtgrp;
- rr->evtid = evtid;
+ rr->evt = evt;
rr->r = r;
rr->hdr = hdr;
rr->first = first;
- rr->arch_mon_ctx = resctrl_arch_mon_ctx_alloc(r, evtid);
+ rr->arch_mon_ctx = resctrl_arch_mon_ctx_alloc(r, evt->evtid);
if (IS_ERR(rr->arch_mon_ctx)) {
rr->err = -EINVAL;
return;
@@ -582,20 +582,20 @@ void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
else
smp_call_on_cpu(cpu, smp_mon_event_count, rr, false);
- resctrl_arch_mon_ctx_free(r, evtid, rr->arch_mon_ctx);
+ resctrl_arch_mon_ctx_free(r, evt->evtid, rr->arch_mon_ctx);
}
int rdtgroup_mondata_show(struct seq_file *m, void *arg)
{
struct kernfs_open_file *of = m->private;
enum resctrl_res_level resid;
- enum resctrl_event_id evtid;
struct rdt_domain_hdr *hdr;
struct rmid_read rr = {0};
struct rdtgroup *rdtgrp;
int domid, cpu, ret = 0;
struct rdt_resource *r;
struct cacheinfo *ci;
+ struct mon_evt *evt;
struct mon_data *md;
rdtgrp = rdtgroup_kn_lock_live(of->kn);
@@ -612,7 +612,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
resid = md->rid;
domid = md->domid;
- evtid = md->evtid;
+ evt = md->evt;
r = resctrl_arch_get_resource(resid);
if (md->sum) {
@@ -636,7 +636,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
if (!ci)
continue;
mon_event_read(&rr, r, NULL, rdtgrp,
- &ci->shared_cpu_map, evtid, false);
+ &ci->shared_cpu_map, evt, false);
goto checkresult;
}
}
@@ -652,7 +652,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
ret = -ENOENT;
goto out;
}
- mon_event_read(&rr, r, hdr, rdtgrp, &hdr->cpu_mask, evtid, false);
+ mon_event_read(&rr, r, hdr, rdtgrp, &hdr->cpu_mask, evt, false);
}
checkresult:
diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c
index 614c753929e0..81c3fb6a95b6 100644
--- a/fs/resctrl/monitor.c
+++ b/fs/resctrl/monitor.c
@@ -369,8 +369,8 @@ static int __mon_event_count(u32 closid, u32 rmid, struct rmid_read *rr)
if (!domain_header_is_valid(rr->hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3))
return -EINVAL;
d = container_of(rr->hdr, struct rdt_l3_mon_domain, hdr);
- resctrl_arch_reset_rmid(rr->r, d, closid, rmid, rr->evtid);
- m = get_mbm_state(d, closid, rmid, rr->evtid);
+ resctrl_arch_reset_rmid(rr->r, d, closid, rmid, rr->evt->evtid);
+ m = get_mbm_state(d, closid, rmid, rr->evt->evtid);
if (m)
memset(m, 0, sizeof(struct mbm_state));
return 0;
@@ -381,7 +381,7 @@ static int __mon_event_count(u32 closid, u32 rmid, struct rmid_read *rr)
if (!cpumask_test_cpu(cpu, &rr->hdr->cpu_mask))
return -EINVAL;
rr->err = resctrl_arch_rmid_read(rr->r, rr->hdr, closid, rmid,
- rr->evtid, &tval, rr->arch_mon_ctx);
+ rr->evt->evtid, &tval, rr->arch_mon_ctx);
if (rr->err)
return rr->err;
@@ -410,7 +410,7 @@ static int __mon_event_count(u32 closid, u32 rmid, struct rmid_read *rr)
if (d->ci_id != rr->ci_id)
continue;
err = resctrl_arch_rmid_read(rr->r, &d->hdr, closid, rmid,
- rr->evtid, &tval, rr->arch_mon_ctx);
+ rr->evt->evtid, &tval, rr->arch_mon_ctx);
if (!err) {
rr->val += tval;
ret = 0;
@@ -444,7 +444,7 @@ static void mbm_bw_count(u32 closid, u32 rmid, struct rmid_read *rr)
if (!domain_header_is_valid(rr->hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3))
return;
d = container_of(rr->hdr, struct rdt_l3_mon_domain, hdr);
- m = get_mbm_state(d, closid, rmid, rr->evtid);
+ m = get_mbm_state(d, closid, rmid, rr->evt->evtid);
if (WARN_ON_ONCE(!m))
return;
@@ -615,12 +615,13 @@ static void update_mba_bw(struct rdtgroup *rgrp, struct rdt_l3_mon_domain *dom_m
static void mbm_update_one_event(struct rdt_resource *r, struct rdt_l3_mon_domain *d,
u32 closid, u32 rmid, enum resctrl_event_id evtid)
{
+ struct mon_evt *evt = &mon_event_all[evtid];
struct rmid_read rr = {0};
rr.r = r;
rr.hdr = &d->hdr;
- rr.evtid = evtid;
- rr.arch_mon_ctx = resctrl_arch_mon_ctx_alloc(rr.r, rr.evtid);
+ rr.evt = evt;
+ rr.arch_mon_ctx = resctrl_arch_mon_ctx_alloc(rr.r, evt->evtid);
if (IS_ERR(rr.arch_mon_ctx)) {
pr_warn_ratelimited("Failed to allocate monitor context: %ld",
PTR_ERR(rr.arch_mon_ctx));
@@ -636,7 +637,7 @@ static void mbm_update_one_event(struct rdt_resource *r, struct rdt_l3_mon_domai
if (is_mba_sc(NULL))
mbm_bw_count(closid, rmid, &rr);
- resctrl_arch_mon_ctx_free(rr.r, rr.evtid, rr.arch_mon_ctx);
+ resctrl_arch_mon_ctx_free(rr.r, evt->evtid, rr.arch_mon_ctx);
}
static void mbm_update(struct rdt_resource *r, struct rdt_l3_mon_domain *d,
diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index 0203f43b7883..f98f34e75f35 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -2903,7 +2903,7 @@ static struct mon_data *mon_get_kn_priv(enum resctrl_res_level rid, int domid,
list_for_each_entry(priv, &mon_data_kn_priv_list, list) {
if (priv->rid == rid && priv->domid == domid &&
- priv->sum == do_sum && priv->evtid == mevt->evtid)
+ priv->sum == do_sum && priv->evt == mevt)
return priv;
}
@@ -2914,7 +2914,7 @@ static struct mon_data *mon_get_kn_priv(enum resctrl_res_level rid, int domid,
priv->rid = rid;
priv->domid = domid;
priv->sum = do_sum;
- priv->evtid = mevt->evtid;
+ priv->evt = mevt;
list_add_tail(&priv->list, &mon_data_kn_priv_list);
return priv;
@@ -3079,7 +3079,7 @@ static int mon_add_all_files(struct kernfs_node *kn, struct rdt_domain_hdr *hdr,
return ret;
if (r->rid == RDT_RESOURCE_L3 && !do_sum && resctrl_is_mbm_event(mevt->evtid))
- mon_event_read(&rr, r, hdr, prgrp, &hdr->cpu_mask, mevt->evtid, true);
+ mon_event_read(&rr, r, hdr, prgrp, &hdr->cpu_mask, mevt, true);
}
return 0;
--
2.50.1
next prev parent reply other threads:[~2025-08-29 19:34 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-29 19:33 [PATCH v9 00/31] x86,fs/resctrl telemetry monitoring Tony Luck
2025-08-29 19:33 ` [PATCH v9 01/31] x86,fs/resctrl: Consolidate monitor event descriptions Tony Luck
2025-08-29 19:33 ` [PATCH v9 02/31] x86,fs/resctrl: Replace architecture event enabled checks Tony Luck
2025-08-29 19:33 ` [PATCH v9 03/31] x86/resctrl: Remove 'rdt_mon_features' global variable Tony Luck
2025-08-29 19:33 ` [PATCH v9 04/31] x86,fs/resctrl: Prepare for more monitor events Tony Luck
2025-08-29 19:33 ` [PATCH v9 05/31] x86,fs/resctrl: Improve domain type checking Tony Luck
2025-09-09 21:12 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 06/31] x86/resctrl: Move L3 initialization into new helper function Tony Luck
2025-09-09 21:13 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 07/31] x86,fs/resctrl: Refactor domain_remove_cpu_mon() ready for new domain types Tony Luck
2025-09-09 21:23 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 08/31] x86/resctrl: Clean up domain_remove_cpu_ctrl() Tony Luck
2025-09-09 21:25 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 09/31] x86,fs/resctrl: Use struct rdt_domain_hdr instead of struct rdt_mon_domain Tony Luck
2025-09-09 21:26 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 10/31] x86,fs/resctrl: Rename struct rdt_mon_domain and rdt_hw_mon_domain Tony Luck
2025-09-09 21:26 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 11/31] x86,fs/resctrl: Rename some L3 specific functions Tony Luck
2025-09-09 21:27 ` Reinette Chatre
2025-08-29 19:33 ` Tony Luck [this message]
2025-09-09 22:12 ` [PATCH v9 12/31] fs/resctrl: Make event details accessible to functions when reading events Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 13/31] x86,fs/resctrl: Handle events that can be read from any CPU Tony Luck
2025-09-09 22:13 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 14/31] x86,fs/resctrl: Support binary fixed point event counters Tony Luck
2025-09-09 22:13 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 15/31] x86,fs/resctrl: Add an architectural hook called for each mount Tony Luck
2025-09-09 22:17 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 16/31] x86,fs/resctrl: Add and initialize rdt_resource for package scope monitor Tony Luck
2025-08-29 19:33 ` [PATCH v9 17/31] x86/resctrl: Discover hardware telemetry events Tony Luck
2025-09-01 8:39 ` Ilpo Järvinen
2025-09-03 18:12 ` Luck, Tony
2025-09-10 3:39 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 18/31] x86,fs/resctrl: Fill in details of events for guid 0x26696143 and 0x26557651 Tony Luck
2025-09-01 8:57 ` Ilpo Järvinen
2025-09-10 3:39 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 19/31] x86,fs/resctrl: Add architectural event pointer Tony Luck
2025-09-10 3:40 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 20/31] x86/resctrl: Find and enable usable telemetry events Tony Luck
2025-09-01 8:58 ` Ilpo Järvinen
2025-09-03 18:19 ` Luck, Tony
2025-09-10 3:40 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 21/31] x86/resctrl: Read " Tony Luck
2025-09-01 9:15 ` Ilpo Järvinen
2025-09-03 18:24 ` Luck, Tony
2025-09-10 3:43 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 22/31] x86/resctrl: Handle domain creation/deletion for RDT_RESOURCE_PERF_PKG Tony Luck
2025-09-10 15:56 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 23/31] x86/resctrl: Add energy/perf choices to rdt boot option Tony Luck
2025-09-10 15:56 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 24/31] x86/resctrl: Handle number of RMIDs supported by telemetry resources Tony Luck
2025-09-10 15:57 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 25/31] fs/resctrl: Move allocation/free of closid_num_dirty_rmid Tony Luck
2025-09-10 17:55 ` Reinette Chatre
2025-09-11 22:26 ` Luck, Tony
2025-09-12 17:19 ` Luck, Tony
2025-08-29 19:33 ` [PATCH v9 26/31] fs,x86/resctrl: Compute number of RMIDs as minimum across resources Tony Luck
2025-09-10 17:57 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 27/31] fs/resctrl: Move RMID initialization to first mount Tony Luck
2025-09-10 17:58 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 28/31] x86/resctrl: Enable RDT_RESOURCE_PERF_PKG Tony Luck
2025-09-10 17:58 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 29/31] fs/resctrl: Provide interface to create architecture specific debugfs area Tony Luck
2025-09-10 17:58 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 30/31] x86/resctrl: Add debugfs files to show telemetry aggregator status Tony Luck
2025-09-10 17:59 ` Reinette Chatre
2025-08-29 19:33 ` [PATCH v9 31/31] x86,fs/resctrl: Update Documentation for package events Tony Luck
2025-09-10 17:59 ` Reinette Chatre
2025-09-03 18:27 ` [PATCH v9 00/31] x86,fs/resctrl telemetry monitoring Luck, Tony
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=20250829193346.31565-13-tony.luck@intel.com \
--to=tony.luck@intel.com \
--cc=Dave.Martin@arm.com \
--cc=babu.moger@amd.com \
--cc=dfustini@baylibre.com \
--cc=fenghuay@nvidia.com \
--cc=james.morse@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.wieczor-retman@intel.com \
--cc=patches@lists.linux.dev \
--cc=peternewman@google.com \
--cc=reinette.chatre@intel.com \
--cc=x86@kernel.org \
--cc=yu.c.chen@intel.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
all inboxes | Powered by JetHome®