Hi Ben,
On 13/03/2026 14:45, Ben Horgan wrote:
> When CDP is not enabled, the 'rmid_entry's in the limbo list,
> rmid_busy_llc, map directly to a (PARTID,PMG) pair and when CDP is enabled
> the mapping is to two different pairs.
> As the limbo list is reused between
> mounts and CDP disabled on unmount this can lead to stale mapping and the
> limbo handler will then make monitor reads with potentially out of range
> PARTID.
Bother - I missed that!
> This may then cause an MPAM error interrupt and the driver will
> disable MPAM.
... and that's why it's not a problem on x86 because the RMID range is unaffected by CDP,
whereas MPAM works on a combined value.
> No problems are expected if you just mount the resctrl file system
> once with CDP enabled and never unmount it.
(guess how it was tested!)
> Hide CDP emulation behind CONFIG_EXPERT to protect the unwary.
>
> Signed-off-by: Ben Horgan <ben.horgan@arm.com>
> ---
> Adding this ugliness in the hope of avoiding patch churn and extra
> reviewer work. I am looking into the resctrl changes needed to fix this.
Makes sense - people can still use this if they're aware of the limitation, and it sounds
like you've got a plan to fix it properly. We just don't want it enabled in distros until
then.
> diff --git a/drivers/resctrl/mpam_resctrl.c b/drivers/resctrl/mpam_resctrl.c
> index 903d1a0f564f..cab3e9ccb5c7 100644
> --- a/drivers/resctrl/mpam_resctrl.c
> +++ b/drivers/resctrl/mpam_resctrl.c
> @@ -82,6 +82,18 @@ int resctrl_arch_set_cdp_enabled(enum resctrl_res_level rid, bool enable)
> u32 partid_i = RESCTRL_RESERVED_CLOSID, partid_d = RESCTRL_RESERVED_CLOSID;
> int cpu;
>
> + if (!IS_ENABLED(CONFIG_EXPERT) && enable) {
> + /*
> + * If the resctrl fs is mounted more than once, sequentially,
> + * then CDP can lead to the use of out of range PARTIDs.
> + */
> + pr_warn("CDP not supported\n");
> + return -EOPNOTSUPP;
> + }
> +
> + if (enable)
> + pr_warn("CDP is an expert feature and may cause MPAM to malfunction.\n");
> +
> /*
> * resctrl_arch_set_cdp_enabled() is only called with enable set to
> * false on error and unmount.
Reviewed-by: James Morse <james.morse@arm.com>
Thanks,
James