Re: [PATCH v2 11/12] arm_mpam: Switch to kvzmalloc_objs() for allocation of component cfg

From: James Morse

Date: Fri Oct 02 2026 - 11:21:38 EST


Hi Ben,

On 17/09/2026 15:56, Ben Horgan wrote:
> Each component cfg is sized by the size of a per-PARTID multiplied by the
> number of PARTIDs. On a platform sized to push the limits of the
> specification, the allocation using kzalloc_objs() will consistently
> fail. Change to use kvzmalloc_objs() so that large allocations fall back to
> vmalloc() based allocations.

Makes sense. We should do this for any allocation that could be larger than
a page.


> diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
> index 10fc5168699b..d74292f8cdfd 100644
> --- a/drivers/resctrl/mpam_devices.c
> +++ b/drivers/resctrl/mpam_devices.c
> @@ -157,7 +157,7 @@ static void mpam_free_garbage(void)
> if (iter->pdev)
> devm_kfree(&iter->pdev->dev, iter->to_free);
> else
> - kfree(iter->to_free);
> + kvfree(iter->to_free);

And kvfree() is safe to use with non-vmalloc'd memory that we use for things
like struct class, which get free'd here.


> }
> }
>
> @@ -2692,7 +2692,7 @@ static int __allocate_component_cfg(struct mpam_component *comp)
> if (comp->cfg)
> return 0;
>
> - comp->cfg = kzalloc_objs(*comp->cfg, mpam_partid_max + 1);
> + comp->cfg = kvzalloc_objs(*comp->cfg, mpam_partid_max + 1);
> if (!comp->cfg)
> return -ENOMEM;
>


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


Thanks,

James