diff --git a/drivers/platform/mpam/mpam_devices.c b/drivers/platform/mpam/mpam_devices.c index 19e2153652eb8df2560dc9a4dfaa00c2e631ed42..7f8fa47a9ac3f3114cef688cef99bb2cc5550790 100644 --- a/drivers/platform/mpam/mpam_devices.c +++ b/drivers/platform/mpam/mpam_devices.c @@ -1529,8 +1529,11 @@ static int mpam_discovery_cpu_online(unsigned int cpu) mutex_lock(&mpam_list_lock); list_for_each_entry(msc, &mpam_all_msc, glbl_list) { - if (!cpumask_test_cpu(cpu, &msc->accessibility)) + if (!cpumask_test_cpu(cpu, &msc->accessibility)) { + msc->probed = true; + msc->skipped = true; continue; + } mutex_lock(&msc->lock); if (!msc->probed) @@ -1946,14 +1949,14 @@ static void mpam_enable_init_class_features(struct mpam_class *class) struct mpam_msc_ris *ris; struct mpam_component *comp; - comp = list_first_entry_or_null(&class->components, - struct mpam_component, class_list); - if (WARN_ON(!comp)) - return; + list_for_each_entry(comp, &class->components, class_list) { + list_for_each_entry(ris, &comp->ris, comp_list) { + if (!ris->msc->skipped) + break; + } + } - ris = list_first_entry_or_null(&comp->ris, - struct mpam_msc_ris, comp_list); - if (WARN_ON(!ris)) + if (WARN_ON(!comp) || WARN_ON(!ris)) return; class->props = ris->props; @@ -1973,6 +1976,9 @@ static void mpam_enable_merge_features(void) list_for_each_entry(comp, &class->components, class_list) { list_for_each_entry(ris, &comp->ris, comp_list) { + if (ris->msc->skipped) + continue; + __resource_props_mismatch(ris, class); class->nrdy_usec = max(class->nrdy_usec, diff --git a/drivers/platform/mpam/mpam_internal.h b/drivers/platform/mpam/mpam_internal.h index ff1890b3a78e949ae8ba6b957c798a29dd8ab865..94872c0930a610afaf3eecc5e33b91e9df01a94d 100644 --- a/drivers/platform/mpam/mpam_internal.h +++ b/drivers/platform/mpam/mpam_internal.h @@ -55,6 +55,7 @@ struct mpam_msc struct mutex lock; bool probed; + bool skipped; bool error_irq_requested; bool error_irq_hw_enabled; u16 partid_max;