Re: [PATCH v2 10/12] arm_mpam: Don't loop forever if there is the maximum possible amount of PARTIDs

From: James Morse

Date: Fri Oct 02 2026 - 11:20:16 EST


Hi Ben,

On 17/09/2026 15:56, Ben Horgan wrote:
> On a theoretical platform with the maximum possible number of usable
> PARTIDs, 0XFFFF, the loops iterating over PARTID in mpam_reset_ris() and
> mpam_reprogram_ris() will never reach their termination condition leading
> to a system hang when register the cpu hotplug handlers when MPAM is
> enabling.
>
> Fix these loops.

Ha! MPAM's mixture of num/max fields is really annoying.

Looks like we never loop over the PMG field.


> diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
> index cdc2d9d19e19..10fc5168699b 100644
> --- a/drivers/resctrl/mpam_devices.c
> +++ b/drivers/resctrl/mpam_devices.c
> @@ -1754,7 +1754,7 @@ static int mpam_save_mbwu_state(void *arg)
> */
> static int mpam_reset_ris(void *arg)
> {
> - u16 partid, partid_max;
> + u16 partid_max;
> struct mpam_config reset_cfg = {};
> struct mpam_msc_ris *ris = arg;
>
> @@ -1764,7 +1764,7 @@ static int mpam_reset_ris(void *arg)
> spin_lock(&partid_max_lock);
> partid_max = mpam_partid_max;
> spin_unlock(&partid_max_lock);
> - for (partid = 0; partid <= partid_max; partid++)
> + for (u32 partid = 0; partid <= partid_max; partid++)
> mpam_reprogram_ris_partid(ris, partid, &reset_cfg);
>
> return 0;
> @@ -1811,7 +1811,6 @@ static int __write_config(void *arg)
>
> static void mpam_reprogram_msc(struct mpam_msc *msc)
> {
> - u16 partid;
> bool reset;
> struct mpam_config *cfg;
> struct mpam_msc_ris *ris;
> @@ -1835,7 +1834,7 @@ static void mpam_reprogram_msc(struct mpam_msc *msc)
> arg.comp = ris->vmsc->comp;
> arg.ris = ris;
> reset = true;
> - for (partid = 0; partid <= mpam_partid_max; partid++) {
> + for (u32 partid = 0; partid <= mpam_partid_max; partid++) {
> cfg = &ris->vmsc->comp->cfg[partid];
> if (!bitmap_empty(cfg->features, MPAM_FEATURE_LAST))
> reset = false;

Reviewed-by: James Morse <james.morse@xxxxxxx>



Thanks,

James