diff --git a/drivers/platform/mpam/mpam_devices.c b/drivers/platform/mpam/mpam_devices.c index 7f8fa47a9ac3f3114cef688cef99bb2cc5550790..ba15ce4492f97f6bc98085ad712376eb8c61d856 100644 --- a/drivers/platform/mpam/mpam_devices.c +++ b/drivers/platform/mpam/mpam_devices.c @@ -1529,11 +1529,8 @@ 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)) { - msc->probed = true; - msc->skipped = true; + if (!cpumask_test_cpu(cpu, &msc->accessibility)) continue; - } mutex_lock(&msc->lock); if (!msc->probed) @@ -1951,7 +1948,7 @@ static void mpam_enable_init_class_features(struct mpam_class *class) list_for_each_entry(comp, &class->components, class_list) { list_for_each_entry(ris, &comp->ris, comp_list) { - if (!ris->msc->skipped) + if (ris->msc->probed) break; } } @@ -1976,7 +1973,7 @@ 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) + if (!ris->msc->probed) continue; __resource_props_mismatch(ris, class); @@ -2352,6 +2349,7 @@ void mpam_disable(struct work_struct *ignored) */ void mpam_enable(struct work_struct *work) { + cpumask_t mask; static atomic_t once; struct mpam_msc *msc; bool all_devices_probed = true; @@ -2359,8 +2357,11 @@ void mpam_enable(struct work_struct *work) mutex_lock(&mpam_list_lock); list_for_each_entry(msc, &mpam_all_msc, glbl_list) { mutex_lock(&msc->lock); - if (!msc->probed) - all_devices_probed = false; + if (!msc->probed) { + cpumask_and(&mask, &msc->accessibility, cpu_online_mask); + if (!cpumask_empty(&mask)) + all_devices_probed = false; + } mutex_unlock(&msc->lock); if (!all_devices_probed) diff --git a/drivers/platform/mpam/mpam_internal.h b/drivers/platform/mpam/mpam_internal.h index 94872c0930a610afaf3eecc5e33b91e9df01a94d..ff1890b3a78e949ae8ba6b957c798a29dd8ab865 100644 --- a/drivers/platform/mpam/mpam_internal.h +++ b/drivers/platform/mpam/mpam_internal.h @@ -55,7 +55,6 @@ struct mpam_msc struct mutex lock; bool probed; - bool skipped; bool error_irq_requested; bool error_irq_hw_enabled; u16 partid_max;