Skip to content

Commit 4a7f97e

Browse files
fyu1nvidia-bfigg
authored andcommitted
NVIDIA: SAUCE: arm_mpam: Fix monitor capability and MBM assign for MB events
BugLink: https://bugs.launchpad.net/bugs/2157922 When mbm_total_bytes is exposed on MBA for memory-level MSC monitors, resctrl_arch_mon_capable() must reflect mon_capable on the backing resource, not only L3. Also gate MBM counter auto-assign and unassign on each enabled event's resource so MBA-backed mbm_total_bytes gets ABMC setup on group create and cleanup on group delete. Signed-off-by: Fenghua Yu <fenghuay@nvidia.com> Acked-by: Matthew R. Ochs <mochs@nvidia.com> Acked-by: Carol L Soto <csoto@nvidia.com> Signed-off-by: Brad Figg <bfigg@nvidia.com>
1 parent 545a2db commit 4a7f97e

2 files changed

Lines changed: 49 additions & 23 deletions

File tree

drivers/resctrl/mpam_resctrl.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,11 +113,29 @@ bool resctrl_arch_alloc_capable(void)
113113

114114
bool resctrl_arch_mon_capable(void)
115115
{
116-
struct mpam_resctrl_res *res = &mpam_resctrl_controls[RDT_RESOURCE_L3];
117-
struct rdt_resource *l3 = &res->resctrl_res;
116+
enum resctrl_event_id eventid;
117+
struct mpam_resctrl_mon *mon;
118+
struct mpam_resctrl_res *res;
119+
struct rdt_resource *r;
120+
121+
for_each_mpam_resctrl_mon(mon, eventid) {
122+
struct mpam_class *class = mon->class;
123+
124+
if (!class)
125+
continue; // dummy resource
126+
127+
if ((class->type == MPAM_CLASS_MEMORY) && (class->level > 3))
128+
res = &mpam_resctrl_controls[RDT_RESOURCE_MBA];
129+
else
130+
res = &mpam_resctrl_controls[RDT_RESOURCE_L3];
118131

119-
/* All monitors are presented as being on the L3 cache */
120-
return l3->mon_capable;
132+
r = &res->resctrl_res;
133+
134+
if (r->mon_capable)
135+
return true;
136+
}
137+
138+
return false;
121139
}
122140

123141
/*

fs/resctrl/monitor.c

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,19 +1287,23 @@ static int rdtgroup_assign_cntr_event(struct rdt_l3_mon_domain *d, struct rdtgro
12871287
*/
12881288
void rdtgroup_assign_cntrs(struct rdtgroup *rdtgrp)
12891289
{
1290-
struct rdt_resource *r = resctrl_arch_get_resource(RDT_RESOURCE_L3);
1290+
enum resctrl_event_id eventid;
1291+
struct rdt_resource *r;
1292+
struct mon_evt *mevt;
12911293

1292-
if (!r->mon_capable || !resctrl_arch_mbm_cntr_assign_enabled(r) ||
1293-
!r->mon.mbm_assign_on_mkdir)
1294-
return;
1294+
for_each_mbm_event_id(eventid) {
1295+
if (!resctrl_is_mon_event_enabled(eventid))
1296+
continue;
12951297

1296-
if (resctrl_is_mon_event_enabled(QOS_L3_MBM_TOTAL_EVENT_ID))
1297-
rdtgroup_assign_cntr_event(NULL, rdtgrp,
1298-
&mon_event_all[QOS_L3_MBM_TOTAL_EVENT_ID]);
1298+
mevt = &mon_event_all[eventid];
1299+
r = resctrl_arch_get_resource(mevt->rid);
12991300

1300-
if (resctrl_is_mon_event_enabled(QOS_L3_MBM_LOCAL_EVENT_ID))
1301-
rdtgroup_assign_cntr_event(NULL, rdtgrp,
1302-
&mon_event_all[QOS_L3_MBM_LOCAL_EVENT_ID]);
1301+
if (!r->mon_capable || !resctrl_arch_mbm_cntr_assign_enabled(r) ||
1302+
!r->mon.mbm_assign_on_mkdir)
1303+
continue;
1304+
1305+
rdtgroup_assign_cntr_event(NULL, rdtgrp, mevt);
1306+
}
13031307
}
13041308

13051309
/*
@@ -1346,18 +1350,22 @@ static void rdtgroup_unassign_cntr_event(struct rdt_l3_mon_domain *d, struct rdt
13461350
*/
13471351
void rdtgroup_unassign_cntrs(struct rdtgroup *rdtgrp)
13481352
{
1349-
struct rdt_resource *r = resctrl_arch_get_resource(RDT_RESOURCE_L3);
1353+
enum resctrl_event_id eventid;
1354+
struct rdt_resource *r;
1355+
struct mon_evt *mevt;
13501356

1351-
if (!r->mon_capable || !resctrl_arch_mbm_cntr_assign_enabled(r))
1352-
return;
1357+
for_each_mbm_event_id(eventid) {
1358+
if (!resctrl_is_mon_event_enabled(eventid))
1359+
continue;
13531360

1354-
if (resctrl_is_mon_event_enabled(QOS_L3_MBM_TOTAL_EVENT_ID))
1355-
rdtgroup_unassign_cntr_event(NULL, rdtgrp,
1356-
&mon_event_all[QOS_L3_MBM_TOTAL_EVENT_ID]);
1361+
mevt = &mon_event_all[eventid];
1362+
r = resctrl_arch_get_resource(mevt->rid);
13571363

1358-
if (resctrl_is_mon_event_enabled(QOS_L3_MBM_LOCAL_EVENT_ID))
1359-
rdtgroup_unassign_cntr_event(NULL, rdtgrp,
1360-
&mon_event_all[QOS_L3_MBM_LOCAL_EVENT_ID]);
1364+
if (!r->mon_capable || !resctrl_arch_mbm_cntr_assign_enabled(r))
1365+
continue;
1366+
1367+
rdtgroup_unassign_cntr_event(NULL, rdtgrp, mevt);
1368+
}
13611369
}
13621370

13631371
static int resctrl_parse_mem_transactions(char *tok, u32 *val)

0 commit comments

Comments
 (0)