[PATCH 21/33] arm_mpam: Extend reset logic to allow devices to be reset any time
James Morse
james.morse at arm.com
Tue Sep 9 09:58:05 PDT 2025
Hi Ben,
On 29/08/2025 15:30, Ben Horgan wrote:
> On 8/22/25 16:30, James Morse wrote:
>> cpuhp callbacks aren't the only time the MSC configuration may need to
>> be reset. Resctrl has an API call to reset a class.
>> If an MPAM error interrupt arrives it indicates the driver has
>> misprogrammed an MSC. The safest thing to do is reset all the MSCs
>> and disable MPAM.
>>
>> Add a helper to reset RIS via their class. Call this from mpam_disable(),
>> which can be scheduled from the error interrupt handler.
>> diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
>> index 759244966736..3516cbe8623e 100644
>> --- a/drivers/resctrl/mpam_devices.c
>> +++ b/drivers/resctrl/mpam_devices.c
>> @@ -1569,6 +1567,66 @@ static void mpam_enable_once(void)
>> +/*
>> + * Called in response to an error IRQ.
>> + * All of MPAMs errors indicate a software bug, restore any modified
>> + * controls to their reset values.
>> + */
>> +void mpam_disable(void)
>> +{
>> + int idx;
>> + struct mpam_class *class;
>> +
>> + idx = srcu_read_lock(&mpam_srcu);
>> + list_for_each_entry_srcu(class, &mpam_classes, classes_list,
>> + srcu_read_lock_held(&mpam_srcu))
>
> Why do you use list_for_each_entry_srcu() here when in other places you
> use list_for_each_entry_rcu()?
It's a mistake. I was part way making this use RCU when someone 'invented' the
firmware interface meaning readl() needs to be able to sleep...
Those were added in a later patch than I thought, and I missed fixing them up.
I think the srcu version provides extra checking - and is the correct one to use.
I'll fix those -- thanks for spotting it!
Thanks,
James
>> + mpam_reset_class(class);
>> + srcu_read_unlock(&mpam_srcu, idx);
>> +}
More information about the linux-arm-kernel
mailing list