[RFC PATCH 17/36] arm_mpam: Add cpuhp callbacks to probe MSC hardware
James Morse
james.morse at arm.com
Wed Aug 6 11:07:25 PDT 2025
Hi Baisheng,
On 29/07/2025 07:11, Baisheng Gao wrote:
>> Because an MSC can only by accessed from the CPUs in its cpu-affinity
>> set we need to be running on one of those CPUs to probe the MSC
>> hardware.
>>
>> Do this work in the cpuhp callback. Probing the hardware will only
>> happen before MPAM is enabled, walk all the MSCs and probe those we can
>> reach that haven't already been probed.
>>
>> Later once MPAM is enabled, this cpuhp callback will be replaced by
>> one that avoids the global list.
>>
>> Enabling a static key will also take the cpuhp lock, so can't be done
>> from the cpuhp callback. Whenever a new MSC has been probed schedule
>> work to test if all the MSCs have now been probed.
>> diff --git a/drivers/platform/arm64/mpam/mpam_devices.c b/drivers/platform/arm64/mpam/mpam_devices.c
>> index 0d6d5180903b..89434ae3efa6 100644
>> --- a/drivers/platform/arm64/mpam/mpam_devices.c
>> +++ b/drivers/platform/arm64/mpam/mpam_devices.c
>> @@ -513,9 +541,84 @@ int mpam_ris_create(struct mpam_msc *msc, u8 ris_idx,
>> +static void mpam_register_cpuhp_callbacks(int (*online)(unsigned int online),
>> + int (*offline)(unsigned int offline))
>> +{
>> + mutex_lock(&mpam_cpuhp_state_lock);
>> + if (mpam_cpuhp_state) {
>> + cpuhp_remove_state(mpam_cpuhp_state);
>> + mpam_cpuhp_state = 0;
>> + }
>> +
>> + mpam_cpuhp_state = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "mpam:online",
>> + online, offline);
>> + if (mpam_cpuhp_state <= 0) {
>> + pr_err("Failed to register cpuhp callbacks");
>> + mpam_cpuhp_state = 0;
>> + }
>> + mutex_unlock(&mpam_cpuhp_state_lock);
>> }
>>
>> static int mpam_dt_count_msc(void)
>> @@ -797,6 +900,46 @@ static struct platform_driver mpam_msc_driver = {
>> +static void mpam_enable_once(void)
>> +{
>> + mutex_lock(&mpam_cpuhp_state_lock);
>> + cpuhp_remove_state(mpam_cpuhp_state);
>> + mpam_cpuhp_state = 0;
>> + mutex_unlock(&mpam_cpuhp_state_lock);
> Deleting the above 4 lines?
> The mpam_cpuhp_state will be removed firstly in mpam_register_cpuhp_callbacks
> if the mpam_cpuhp_state isn't 0.
Yup - this is a pointless appendage because of the way the code evolved!
Thanks for catching it
James
>> +
>> + mpam_register_cpuhp_callbacks(mpam_cpu_online, mpam_cpu_offline);
>> +
>> + pr_info("MPAM enabled\n");
>> +}
More information about the linux-arm-kernel
mailing list