Skip to content

Commit dd11088

Browse files
aeglbp3tk0v
authored andcommitted
fs/resctrl: Make event details accessible to functions when reading events
Reading monitoring event data from MMIO requires more context than the event id to be able to read the correct memory location. struct mon_evt is the appropriate place for this event specific context. Prepare for addition of extra fields to struct mon_evt by changing the calling conventions to pass a pointer to the mon_evt structure instead of just the event id. Signed-off-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Reinette Chatre <reinette.chatre@intel.com> Link: https://lore.kernel.org/20251217172121.12030-1-tony.luck@intel.com
1 parent 9c214d1 commit dd11088

4 files changed

Lines changed: 28 additions & 28 deletions

File tree

fs/resctrl/ctrlmondata.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,7 @@ struct rdt_domain_hdr *resctrl_find_domain(struct list_head *h, int id,
552552

553553
void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
554554
struct rdt_domain_hdr *hdr, struct rdtgroup *rdtgrp,
555-
cpumask_t *cpumask, int evtid, int first)
555+
cpumask_t *cpumask, struct mon_evt *evt, int first)
556556
{
557557
int cpu;
558558

@@ -563,15 +563,15 @@ void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
563563
* Setup the parameters to pass to mon_event_count() to read the data.
564564
*/
565565
rr->rgrp = rdtgrp;
566-
rr->evtid = evtid;
566+
rr->evt = evt;
567567
rr->r = r;
568568
rr->hdr = hdr;
569569
rr->first = first;
570570
if (resctrl_arch_mbm_cntr_assign_enabled(r) &&
571-
resctrl_is_mbm_event(evtid)) {
571+
resctrl_is_mbm_event(evt->evtid)) {
572572
rr->is_mbm_cntr = true;
573573
} else {
574-
rr->arch_mon_ctx = resctrl_arch_mon_ctx_alloc(r, evtid);
574+
rr->arch_mon_ctx = resctrl_arch_mon_ctx_alloc(r, evt->evtid);
575575
if (IS_ERR(rr->arch_mon_ctx)) {
576576
rr->err = -EINVAL;
577577
return;
@@ -592,21 +592,21 @@ void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
592592
smp_call_on_cpu(cpu, smp_mon_event_count, rr, false);
593593

594594
if (rr->arch_mon_ctx)
595-
resctrl_arch_mon_ctx_free(r, evtid, rr->arch_mon_ctx);
595+
resctrl_arch_mon_ctx_free(r, evt->evtid, rr->arch_mon_ctx);
596596
}
597597

598598
int rdtgroup_mondata_show(struct seq_file *m, void *arg)
599599
{
600600
struct kernfs_open_file *of = m->private;
601601
enum resctrl_res_level resid;
602-
enum resctrl_event_id evtid;
603602
struct rdt_l3_mon_domain *d;
604603
struct rdt_domain_hdr *hdr;
605604
struct rmid_read rr = {0};
606605
struct rdtgroup *rdtgrp;
607606
int domid, cpu, ret = 0;
608607
struct rdt_resource *r;
609608
struct cacheinfo *ci;
609+
struct mon_evt *evt;
610610
struct mon_data *md;
611611

612612
rdtgrp = rdtgroup_kn_lock_live(of->kn);
@@ -623,7 +623,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
623623

624624
resid = md->rid;
625625
domid = md->domid;
626-
evtid = md->evtid;
626+
evt = md->evt;
627627
r = resctrl_arch_get_resource(resid);
628628

629629
if (md->sum) {
@@ -641,7 +641,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
641641
continue;
642642
rr.ci = ci;
643643
mon_event_read(&rr, r, NULL, rdtgrp,
644-
&ci->shared_cpu_map, evtid, false);
644+
&ci->shared_cpu_map, evt, false);
645645
goto checkresult;
646646
}
647647
}
@@ -657,7 +657,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
657657
ret = -ENOENT;
658658
goto out;
659659
}
660-
mon_event_read(&rr, r, hdr, rdtgrp, &hdr->cpu_mask, evtid, false);
660+
mon_event_read(&rr, r, hdr, rdtgrp, &hdr->cpu_mask, evt, false);
661661
}
662662

663663
checkresult:

fs/resctrl/internal.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ extern struct mon_evt mon_event_all[QOS_NUM_EVENTS];
8181
* struct mon_data - Monitoring details for each event file.
8282
* @list: Member of the global @mon_data_kn_priv_list list.
8383
* @rid: Resource id associated with the event file.
84-
* @evtid: Event id associated with the event file.
84+
* @evt: Event structure associated with the event file.
8585
* @sum: Set when event must be summed across multiple
8686
* domains.
8787
* @domid: When @sum is zero this is the domain to which
@@ -95,7 +95,7 @@ extern struct mon_evt mon_event_all[QOS_NUM_EVENTS];
9595
struct mon_data {
9696
struct list_head list;
9797
enum resctrl_res_level rid;
98-
enum resctrl_event_id evtid;
98+
struct mon_evt *evt;
9999
int domid;
100100
bool sum;
101101
};
@@ -108,7 +108,7 @@ struct mon_data {
108108
* @r: Resource describing the properties of the event being read.
109109
* @hdr: Header of domain that the counter should be read from. If NULL then
110110
* sum all domains in @r sharing L3 @ci.id
111-
* @evtid: Which monitor event to read.
111+
* @evt: Which monitor event to read.
112112
* @first: Initialize MBM counter when true.
113113
* @ci: Cacheinfo for L3. Only set when @hdr is NULL. Used when summing
114114
* domains.
@@ -126,7 +126,7 @@ struct rmid_read {
126126
struct rdtgroup *rgrp;
127127
struct rdt_resource *r;
128128
struct rdt_domain_hdr *hdr;
129-
enum resctrl_event_id evtid;
129+
struct mon_evt *evt;
130130
bool first;
131131
struct cacheinfo *ci;
132132
bool is_mbm_cntr;
@@ -367,7 +367,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg);
367367

368368
void mon_event_read(struct rmid_read *rr, struct rdt_resource *r,
369369
struct rdt_domain_hdr *hdr, struct rdtgroup *rdtgrp,
370-
cpumask_t *cpumask, int evtid, int first);
370+
cpumask_t *cpumask, struct mon_evt *evt, int first);
371371

372372
void mbm_setup_overflow_handler(struct rdt_l3_mon_domain *dom,
373373
unsigned long delay_ms,

fs/resctrl/monitor.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ static int __l3_mon_event_count(struct rdtgroup *rdtgrp, struct rmid_read *rr)
430430
d = container_of(rr->hdr, struct rdt_l3_mon_domain, hdr);
431431

432432
if (rr->is_mbm_cntr) {
433-
cntr_id = mbm_cntr_get(rr->r, d, rdtgrp, rr->evtid);
433+
cntr_id = mbm_cntr_get(rr->r, d, rdtgrp, rr->evt->evtid);
434434
if (cntr_id < 0) {
435435
rr->err = -ENOENT;
436436
return -EINVAL;
@@ -439,10 +439,10 @@ static int __l3_mon_event_count(struct rdtgroup *rdtgrp, struct rmid_read *rr)
439439

440440
if (rr->first) {
441441
if (rr->is_mbm_cntr)
442-
resctrl_arch_reset_cntr(rr->r, d, closid, rmid, cntr_id, rr->evtid);
442+
resctrl_arch_reset_cntr(rr->r, d, closid, rmid, cntr_id, rr->evt->evtid);
443443
else
444-
resctrl_arch_reset_rmid(rr->r, d, closid, rmid, rr->evtid);
445-
m = get_mbm_state(d, closid, rmid, rr->evtid);
444+
resctrl_arch_reset_rmid(rr->r, d, closid, rmid, rr->evt->evtid);
445+
m = get_mbm_state(d, closid, rmid, rr->evt->evtid);
446446
if (m)
447447
memset(m, 0, sizeof(struct mbm_state));
448448
return 0;
@@ -453,10 +453,10 @@ static int __l3_mon_event_count(struct rdtgroup *rdtgrp, struct rmid_read *rr)
453453
return -EINVAL;
454454
if (rr->is_mbm_cntr)
455455
rr->err = resctrl_arch_cntr_read(rr->r, d, closid, rmid, cntr_id,
456-
rr->evtid, &tval);
456+
rr->evt->evtid, &tval);
457457
else
458458
rr->err = resctrl_arch_rmid_read(rr->r, rr->hdr, closid, rmid,
459-
rr->evtid, &tval, rr->arch_mon_ctx);
459+
rr->evt->evtid, &tval, rr->arch_mon_ctx);
460460
if (rr->err)
461461
return rr->err;
462462

@@ -501,7 +501,7 @@ static int __l3_mon_event_count_sum(struct rdtgroup *rdtgrp, struct rmid_read *r
501501
if (d->ci_id != rr->ci->id)
502502
continue;
503503
err = resctrl_arch_rmid_read(rr->r, &d->hdr, closid, rmid,
504-
rr->evtid, &tval, rr->arch_mon_ctx);
504+
rr->evt->evtid, &tval, rr->arch_mon_ctx);
505505
if (!err) {
506506
rr->val += tval;
507507
ret = 0;
@@ -551,7 +551,7 @@ static void mbm_bw_count(struct rdtgroup *rdtgrp, struct rmid_read *rr)
551551
if (!domain_header_is_valid(rr->hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3))
552552
return;
553553
d = container_of(rr->hdr, struct rdt_l3_mon_domain, hdr);
554-
m = get_mbm_state(d, closid, rmid, rr->evtid);
554+
m = get_mbm_state(d, closid, rmid, rr->evt->evtid);
555555
if (WARN_ON_ONCE(!m))
556556
return;
557557

@@ -725,11 +725,11 @@ static void mbm_update_one_event(struct rdt_resource *r, struct rdt_l3_mon_domai
725725

726726
rr.r = r;
727727
rr.hdr = &d->hdr;
728-
rr.evtid = evtid;
728+
rr.evt = &mon_event_all[evtid];
729729
if (resctrl_arch_mbm_cntr_assign_enabled(r)) {
730730
rr.is_mbm_cntr = true;
731731
} else {
732-
rr.arch_mon_ctx = resctrl_arch_mon_ctx_alloc(rr.r, rr.evtid);
732+
rr.arch_mon_ctx = resctrl_arch_mon_ctx_alloc(rr.r, evtid);
733733
if (IS_ERR(rr.arch_mon_ctx)) {
734734
pr_warn_ratelimited("Failed to allocate monitor context: %ld",
735735
PTR_ERR(rr.arch_mon_ctx));
@@ -747,7 +747,7 @@ static void mbm_update_one_event(struct rdt_resource *r, struct rdt_l3_mon_domai
747747
mbm_bw_count(rdtgrp, &rr);
748748

749749
if (rr.arch_mon_ctx)
750-
resctrl_arch_mon_ctx_free(rr.r, rr.evtid, rr.arch_mon_ctx);
750+
resctrl_arch_mon_ctx_free(rr.r, evtid, rr.arch_mon_ctx);
751751
}
752752

753753
static void mbm_update(struct rdt_resource *r, struct rdt_l3_mon_domain *d,

fs/resctrl/rdtgroup.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3103,7 +3103,7 @@ static struct mon_data *mon_get_kn_priv(enum resctrl_res_level rid, int domid,
31033103

31043104
list_for_each_entry(priv, &mon_data_kn_priv_list, list) {
31053105
if (priv->rid == rid && priv->domid == domid &&
3106-
priv->sum == do_sum && priv->evtid == mevt->evtid)
3106+
priv->sum == do_sum && priv->evt == mevt)
31073107
return priv;
31083108
}
31093109

@@ -3114,7 +3114,7 @@ static struct mon_data *mon_get_kn_priv(enum resctrl_res_level rid, int domid,
31143114
priv->rid = rid;
31153115
priv->domid = domid;
31163116
priv->sum = do_sum;
3117-
priv->evtid = mevt->evtid;
3117+
priv->evt = mevt;
31183118
list_add_tail(&priv->list, &mon_data_kn_priv_list);
31193119

31203120
return priv;
@@ -3281,7 +3281,7 @@ static int mon_add_all_files(struct kernfs_node *kn, struct rdt_domain_hdr *hdr,
32813281
return ret;
32823282

32833283
if (!do_sum && resctrl_is_mbm_event(mevt->evtid))
3284-
mon_event_read(&rr, r, hdr, prgrp, &hdr->cpu_mask, mevt->evtid, true);
3284+
mon_event_read(&rr, r, hdr, prgrp, &hdr->cpu_mask, mevt, true);
32853285
}
32863286

32873287
return 0;

0 commit comments

Comments
 (0)