Hi James, While I'm here: On Fri, Aug 22, 2025 at 03:29:55PM +0000, James Morse 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. > > CC: Lecopzer Chen <lecopzerc@xxxxxxxxxx> > Signed-off-by: James Morse <james.morse@xxxxxxx> > --- > drivers/resctrl/mpam_devices.c | 144 +++++++++++++++++++++++++++++++- > drivers/resctrl/mpam_internal.h | 8 +- > 2 files changed, 147 insertions(+), 5 deletions(-) > > diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c > index 5baf2a8786fb..9d6516f98acf 100644 > --- a/drivers/resctrl/mpam_devices.c > +++ b/drivers/resctrl/mpam_devices.c [...] > @@ -511,9 +539,84 @@ int mpam_ris_create(struct mpam_msc *msc, u8 ris_idx, > return err; > } > > -static void mpam_discovery_complete(void) > +static int mpam_msc_hw_probe(struct mpam_msc *msc) > +{ > + u64 idr; > + int err; Redundant variable which gets removed again in the next patch? > + > + lockdep_assert_held(&msc->probe_lock); > + > + mutex_lock(&msc->part_sel_lock); > + idr = mpam_read_partsel_reg(msc, AIDR); > + if ((idr & MPAMF_AIDR_ARCH_MAJOR_REV) != MPAM_ARCHITECTURE_V1) { > + pr_err_once("%s does not match MPAM architecture v1.x\n", > + dev_name(&msc->pdev->dev)); > + err = -EIO; > + } else { > + msc->probed = true; > + err = 0; > + } > + mutex_unlock(&msc->part_sel_lock); > + > + return err; > +} [...] Cheers ---Dave