On Tue, Dec 12, 2023 at 09:54:38AM -0800, Reinette Chatre wrote: > > On 12/8/2023 2:09 PM, Peter Newman wrote: > > On Fri, Dec 8, 2023 at 1:57 PM Tony Luck <tony.luck@xxxxxxxxx> wrote: > >> > >> On Fri, Dec 08, 2023 at 10:17:08AM -0800, Peter Newman wrote: > >>> Hi Tony, > >>> > >>> On Thu, Dec 7, 2023 at 11:56 AM Tony Luck <tony.luck@xxxxxxxxx> wrote: > >>>> @@ -2715,7 +2723,25 @@ static int rdt_parse_param(struct fs_context *fc, struct fs_parameter *param) > >>>> case Opt_mba_mbps: > >>>> if (!supports_mba_mbps()) > >>>> return -EINVAL; > >>>> - ctx->enable_mba_mbps = true; > >>>> + if (is_mbm_local_enabled()) > >>>> + ctx->enable_mba_mbps_local = true; > >>>> + else > >>>> + return -EINVAL; > >>>> + return 0; > >>>> + case Opt_mba_mbps_event: > >>>> + if (!supports_mba_mbps()) > >>>> + return -EINVAL; > >>>> + if (!strcmp("mbm_local_bytes", param->string)) { > >>>> + if (!is_mbm_local_enabled()) > >>>> + return -EINVAL; > >>>> + ctx->enable_mba_mbps_local = true; > >>>> + } else if (!strcmp("mbm_total_bytes", param->string)) { > >>>> + if (!is_mbm_total_enabled()) > >>>> + return -EINVAL; > >>>> + ctx->enable_mba_mbps_total = true; > >>>> + } else { > >>>> + return -EINVAL; > >>> > >>> It looks like if I pass > >>> "mba_MBps_event=mbm_total_bytes,mba_MBps_event=mbm_local_bytes" I can > >>> set both flags true. > >> > >> That's going to be confusing. I'll add code to stop the user from > >> passing both options. > > > > Also kind of confusing, after reading the second patch, I realized > > "mba_MBps_event=mbm_total_bytes,mba_MBps" also results in both being > > set. If you're able to fail the mount operation if both flags somehow > > get set, that would address this one too. > > Are two separate flags required? All existing options within struct rdt_fs_context > are of type bool but that does not imply that it is the required type for > all. Reinette, Maybe a flag and a value? The structure becomes: struct rdt_fs_context { struct kernfs_fs_context kfc; bool enable_cdpl2; bool enable_cdpl3; bool enable_mba_mbps; enum resctrl_event_id mba_mbps_event; bool enable_debug; }; Mount option parsing (including blocking user from setting the options multiple times): case Opt_mba_mbps: if (!supports_mba_mbps() || ctx->enable_mba_mbps) return -EINVAL; if (is_mbm_local_enabled()) ctx->mba_mbps_event = QOS_L3_MBM_LOCAL_EVENT_ID; else if (is_mbm_total_enabled()) ctx->mba_mbps_event = QOS_L3_MBM_TOTAL_EVENT_ID; else return -EINVAL; ctx->enable_mba_mbps = true; return 0; case Opt_mba_mbps_event: if (!supports_mba_mbps() || ctx->enable_mba_mbps) return -EINVAL; if (!strcmp("mbm_local_bytes", param->string)) ctx->mba_mbps_event = QOS_L3_MBM_LOCAL_EVENT_ID; else if (!strcmp("mbm_total_bytes", param->string)) ctx->mba_mbps_event = QOS_L3_MBM_TOTAL_EVENT_ID; else return -EINVAL; ctx->enable_mba_mbps = true; return 0; and use of the options to enable the feature: if (ctx->enable_mba_mbps) { r->membw.mba_mbps_event = ctx->mba_mbps_event; ret = set_mba_sc(true); if (ret) goto out_cdpl3; } -Tony