[PATCH v1 02/11] arm_mpam: Restore the error interrupt enable from mpam_cpu_online()

Gavin Shan gshan at redhat.com
Wed Jul 15 20:59:48 PDT 2026


Hi Ben,

On 7/10/26 9:55 PM, Ben Horgan wrote:
> When all CPUs affine to an MSC are offline the MSC may lose register state
> which the driver then restores when an affine CPU comes back online. The
> error interrupt enable, MPAMF_ECR.INTEN, is missed.
> 
> Restore MPAMF_ECR at CPU online.
> 
> Fixes: 49aa621c4dca ("arm_mpam: Register and enable IRQs")
> Signed-off-by: Ben Horgan <ben.horgan at arm.com>
> ---
>   drivers/resctrl/mpam_devices.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
> index 82966ca2a631..acfa9a4dc2fc 100644
> --- a/drivers/resctrl/mpam_devices.c
> +++ b/drivers/resctrl/mpam_devices.c
> @@ -1852,8 +1852,14 @@ static int mpam_cpu_online(unsigned int cpu)
>   		if (msc->reenable_error_ppi)
>   			_enable_percpu_irq(&msc->reenable_error_ppi);
>   
> -		if (atomic_fetch_inc(&msc->online_refs) == 0)
> +		if (atomic_fetch_inc(&msc->online_refs) == 0) {
> +			mutex_lock(&msc->error_irq_lock);
> +			if (msc->error_irq_hw_enabled)
> +				mpam_touch_msc(msc, mpam_enable_msc_ecr, msc);
> +			mutex_unlock(&msc->error_irq_lock);
> +
>   			mpam_reprogram_msc(msc);
> +		}
>   	}
>   

I don't understand how this happened that MPAMF_ECR gets lost, but msc->error_irq_hw_enabled
is kept as true. mpam_disable_msc_ecr() is triggered in __mpam_irq_handler() or mpam_unregister_irqs().
Both are related to mpam_broken_work, which is invoked to disable the driver completely.
I don't see how MPAMF_ECR is cleared at CPU offline time.

>   	if (mpam_resctrl_enabled)

Thanks,
Gavin




More information about the linux-arm-kernel mailing list