diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index 96a9c3d001dbe5eaefaa7c934018d971a3171595..cb139678fef0ac4c8af0cc1b53ec2dfba3b25f5f 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -2809,6 +2809,7 @@ static int rdt_parse_param(struct fs_context *fc, struct fs_parameter *param) { struct rdt_fs_context *ctx = rdt_fc2context(fc); struct fs_parse_result result; + struct rdt_resource *r; int opt; opt = fs_parse(fc, rdt_fs_parameters, param, &result); @@ -2817,9 +2818,15 @@ static int rdt_parse_param(struct fs_context *fc, struct fs_parameter *param) switch (opt) { case Opt_cdp: + r = resctrl_arch_get_resource(RDT_RESOURCE_L3); + if (!r->alloc_capable) + return -EINVAL; ctx->enable_cdpl3 = true; return 0; case Opt_cdpl2: + r = resctrl_arch_get_resource(RDT_RESOURCE_L2); + if (!r->alloc_capable) + return -EINVAL; ctx->enable_cdpl2 = true; return 0; case Opt_mba_mbps: @@ -2831,6 +2838,9 @@ static int rdt_parse_param(struct fs_context *fc, struct fs_parameter *param) ctx->enable_debug = true; return 0; case Opt_l2: + r = resctrl_arch_get_resource(RDT_RESOURCE_L2); + if (!r->alloc_capable) + return -EINVAL; ctx->enable_l2 = true; return 0; } @@ -3932,10 +3942,12 @@ static int rdtgroup_rename(struct kernfs_node *kn, static int rdtgroup_show_options(struct seq_file *seq, struct kernfs_root *kf) { + bool l2_visible = !resctrl_arch_get_resource(RDT_RESOURCE_L2)->invisible; + if (resctrl_arch_get_cdp_enabled(RDT_RESOURCE_L3)) seq_puts(seq, ",cdp"); - if (resctrl_arch_get_cdp_enabled(RDT_RESOURCE_L2)) + if (l2_visible && resctrl_arch_get_cdp_enabled(RDT_RESOURCE_L2)) seq_puts(seq, ",cdpl2"); if (is_mba_sc(resctrl_arch_get_resource(RDT_RESOURCE_MBA))) @@ -3944,6 +3956,9 @@ static int rdtgroup_show_options(struct seq_file *seq, struct kernfs_root *kf) if (resctrl_debug) seq_puts(seq, ",debug"); + if (IS_ENABLED(CONFIG_ARM64_MPAM) && l2_visible) + seq_puts(seq, ",l2"); + return 0; }