Skip to content

Commit 0ec1db4

Browse files
aeglbp3tk0v
authored andcommitted
fs/resctrl: Refactor mkdir_mondata_subdir()
Population of a monitor group's mon_data directory is unreasonably complicated because of the support for Sub-NUMA Cluster (SNC) mode. Split out the SNC code into a helper function to make it easier to add support for a new telemetry resource. Move all the duplicated code to make and set owner of domain directories into the mon_add_all_files() helper and rename to _mkdir_mondata_subdir(). Suggested-by: Reinette Chatre <reinette.chatre@intel.com> 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 51541f6 commit 0ec1db4

1 file changed

Lines changed: 58 additions & 50 deletions

File tree

fs/resctrl/rdtgroup.c

Lines changed: 58 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3260,57 +3260,65 @@ static void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r,
32603260
}
32613261
}
32623262

3263-
static int mon_add_all_files(struct kernfs_node *kn, struct rdt_domain_hdr *hdr,
3264-
struct rdt_resource *r, struct rdtgroup *prgrp,
3265-
bool do_sum)
3263+
/*
3264+
* Create a directory for a domain and populate it with monitor files. Create
3265+
* summing monitors when @hdr is NULL. No need to initialize summing monitors.
3266+
*/
3267+
static struct kernfs_node *_mkdir_mondata_subdir(struct kernfs_node *parent_kn, char *name,
3268+
struct rdt_domain_hdr *hdr,
3269+
struct rdt_resource *r,
3270+
struct rdtgroup *prgrp, int domid)
32663271
{
3267-
struct rdt_l3_mon_domain *d;
32683272
struct rmid_read rr = {0};
3273+
struct kernfs_node *kn;
32693274
struct mon_data *priv;
32703275
struct mon_evt *mevt;
3271-
int ret, domid;
3276+
int ret;
32723277

3273-
if (!domain_header_is_valid(hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3))
3274-
return -EINVAL;
3278+
kn = kernfs_create_dir(parent_kn, name, parent_kn->mode, prgrp);
3279+
if (IS_ERR(kn))
3280+
return kn;
3281+
3282+
ret = rdtgroup_kn_set_ugid(kn);
3283+
if (ret)
3284+
goto out_destroy;
32753285

3276-
d = container_of(hdr, struct rdt_l3_mon_domain, hdr);
32773286
for_each_mon_event(mevt) {
32783287
if (mevt->rid != r->rid || !mevt->enabled)
32793288
continue;
3280-
domid = do_sum ? d->ci_id : d->hdr.id;
3281-
priv = mon_get_kn_priv(r->rid, domid, mevt, do_sum);
3282-
if (WARN_ON_ONCE(!priv))
3283-
return -EINVAL;
3289+
priv = mon_get_kn_priv(r->rid, domid, mevt, !hdr);
3290+
if (WARN_ON_ONCE(!priv)) {
3291+
ret = -EINVAL;
3292+
goto out_destroy;
3293+
}
32843294

32853295
ret = mon_addfile(kn, mevt->name, priv);
32863296
if (ret)
3287-
return ret;
3297+
goto out_destroy;
32883298

3289-
if (!do_sum && resctrl_is_mbm_event(mevt->evtid))
3299+
if (hdr && resctrl_is_mbm_event(mevt->evtid))
32903300
mon_event_read(&rr, r, hdr, prgrp, &hdr->cpu_mask, mevt, true);
32913301
}
32923302

3293-
return 0;
3303+
return kn;
3304+
out_destroy:
3305+
kernfs_remove(kn);
3306+
return ERR_PTR(ret);
32943307
}
32953308

3296-
static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
3297-
struct rdt_domain_hdr *hdr,
3298-
struct rdt_resource *r, struct rdtgroup *prgrp)
3309+
static int mkdir_mondata_subdir_snc(struct kernfs_node *parent_kn,
3310+
struct rdt_domain_hdr *hdr,
3311+
struct rdt_resource *r, struct rdtgroup *prgrp)
32993312
{
3300-
struct kernfs_node *kn, *ckn;
3313+
struct kernfs_node *ckn, *kn;
33013314
struct rdt_l3_mon_domain *d;
33023315
char name[32];
3303-
bool snc_mode;
3304-
int ret = 0;
3305-
3306-
lockdep_assert_held(&rdtgroup_mutex);
33073316

33083317
if (!domain_header_is_valid(hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3))
33093318
return -EINVAL;
33103319

33113320
d = container_of(hdr, struct rdt_l3_mon_domain, hdr);
3312-
snc_mode = r->mon_scope == RESCTRL_L3_NODE;
3313-
sprintf(name, "mon_%s_%02d", r->name, snc_mode ? d->ci_id : d->hdr.id);
3321+
sprintf(name, "mon_%s_%02d", r->name, d->ci_id);
33143322
kn = kernfs_find_and_get(parent_kn, name);
33153323
if (kn) {
33163324
/*
@@ -3319,41 +3327,41 @@ static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
33193327
*/
33203328
kernfs_put(kn);
33213329
} else {
3322-
kn = kernfs_create_dir(parent_kn, name, parent_kn->mode, prgrp);
3330+
kn = _mkdir_mondata_subdir(parent_kn, name, NULL, r, prgrp, d->ci_id);
33233331
if (IS_ERR(kn))
33243332
return PTR_ERR(kn);
3333+
}
33253334

3326-
ret = rdtgroup_kn_set_ugid(kn);
3327-
if (ret)
3328-
goto out_destroy;
3329-
ret = mon_add_all_files(kn, hdr, r, prgrp, snc_mode);
3330-
if (ret)
3331-
goto out_destroy;
3335+
sprintf(name, "mon_sub_%s_%02d", r->name, hdr->id);
3336+
ckn = _mkdir_mondata_subdir(kn, name, hdr, r, prgrp, hdr->id);
3337+
if (IS_ERR(ckn)) {
3338+
kernfs_remove(kn);
3339+
return PTR_ERR(ckn);
33323340
}
33333341

3334-
if (snc_mode) {
3335-
sprintf(name, "mon_sub_%s_%02d", r->name, hdr->id);
3336-
ckn = kernfs_create_dir(kn, name, parent_kn->mode, prgrp);
3337-
if (IS_ERR(ckn)) {
3338-
ret = -EINVAL;
3339-
goto out_destroy;
3340-
}
3342+
kernfs_activate(kn);
3343+
return 0;
3344+
}
33413345

3342-
ret = rdtgroup_kn_set_ugid(ckn);
3343-
if (ret)
3344-
goto out_destroy;
3346+
static int mkdir_mondata_subdir(struct kernfs_node *parent_kn,
3347+
struct rdt_domain_hdr *hdr,
3348+
struct rdt_resource *r, struct rdtgroup *prgrp)
3349+
{
3350+
struct kernfs_node *kn;
3351+
char name[32];
33453352

3346-
ret = mon_add_all_files(ckn, hdr, r, prgrp, false);
3347-
if (ret)
3348-
goto out_destroy;
3349-
}
3353+
lockdep_assert_held(&rdtgroup_mutex);
3354+
3355+
if (r->rid == RDT_RESOURCE_L3 && r->mon_scope == RESCTRL_L3_NODE)
3356+
return mkdir_mondata_subdir_snc(parent_kn, hdr, r, prgrp);
3357+
3358+
sprintf(name, "mon_%s_%02d", r->name, hdr->id);
3359+
kn = _mkdir_mondata_subdir(parent_kn, name, hdr, r, prgrp, hdr->id);
3360+
if (IS_ERR(kn))
3361+
return PTR_ERR(kn);
33503362

33513363
kernfs_activate(kn);
33523364
return 0;
3353-
3354-
out_destroy:
3355-
kernfs_remove(kn);
3356-
return ret;
33573365
}
33583366

33593367
/*

0 commit comments

Comments
 (0)