Re: [PATCH v6 1/3] x86/resctrl: Add mount option "mba_MBps_event"

From: Tony Luck
Date: Tue Dec 12 2023 - 15:02:20 EST


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