From nobody Mon Feb 9 06:49:29 2026 Received: from canpmsgout11.his.huawei.com (canpmsgout11.his.huawei.com [113.46.200.226]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7AA529CB3A for ; Tue, 3 Feb 2026 09:31:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=113.46.200.226 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770111085; cv=none; b=gTMAimC5d6B9146hl1PgIbfdLRpCZB30fsSBMxUSTXxmRtOPhac7FdUFyS+aNKpG5wHg9vJd63PCiv359eR6Ogep9vYyfOMjJzM2LwJyv2pYyD3nMtOm5nFRwnkV84bDgb6ZAY2Wh+eSjZqeJK/P9dZk6zb9SzsZk28kKKVbZxk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770111085; c=relaxed/simple; bh=gjuMW5KkkKJTjzK7I+yzwouJ9dAgKcfXFOPyGYyVteQ=; h=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type; b=iXsiZXYvGOqTwDSCjlmajaG1JS1/WHRLipgBdQzC8+Wj5AZCwEf5thLs4mO2JSnGujrwp/wrp7lZhKDnKNfy7O5O4CM16oZPAC6evw9OHM+2ZVy+FNmMIgnGu8mU8TrHxQwe5/j4j5d3f/VpQgczYaWKfF8scXAYuMDGTn7Txwc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=h-partners.com; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b=oSzlU9yL; arc=none smtp.client-ip=113.46.200.226 Authentication-Results: smtp.subspace.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=h-partners.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b="oSzlU9yL" dkim-signature: v=1; a=rsa-sha256; d=h-partners.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=2w81BD/EbN2EIZdWcPPyNz1NtpN5vnoJM6tZEyd4gJk=; b=oSzlU9yLA+pYEr9rR1xpud4a4svxRpyhUbRslAzxjm4V3TxNXsGguF48cgwwEx7Z1kAqCo2y3 EnvfqP+LO9w3QUXgVubq+yVsMTjiUdGp/SV5QPO9kEAs3c96fnUISaaN3nDw1r77o+1GL8N3M+D 7P71mDBS/BsjZNucSfKWYRI= Received: from mail.maildlp.com (unknown [172.19.163.214]) by canpmsgout11.his.huawei.com (SkyGuard) with ESMTPS id 4f4ymK4V81zKm6J; Tue, 3 Feb 2026 17:26:41 +0800 (CST) Received: from kwepemf100008.china.huawei.com (unknown [7.202.181.222]) by mail.maildlp.com (Postfix) with ESMTPS id B7F1E4056C; Tue, 3 Feb 2026 17:31:15 +0800 (CST) Received: from huawei.com (10.50.87.109) by kwepemf100008.china.huawei.com (7.202.181.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.36; Tue, 3 Feb 2026 17:31:15 +0800 From: Zeng Heng To: , , , CC: , Subject: [PATCH v2] arm64/mpam: Support partial-core boot for MPAM Date: Tue, 3 Feb 2026 17:31:10 +0800 Message-ID: <20260203093110.4189708-1-zengheng4@huawei.com> X-Mailer: git-send-email 2.25.1 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: kwepems200001.china.huawei.com (7.221.188.67) To kwepemf100008.china.huawei.com (7.202.181.222) Content-Type: text/plain; charset="utf-8" Some MPAM MSCs (like L2 MSC) shares the same power domain with its associated CPUs. Therefore, in scenarios where only partial cores power up, the MSCs belonging to the un-powered cores don't need and should not be accessed, otherwise bus-access fault would occur. In such non-full core boot scenarios, the MSCs corresponding to offline CPUs should skip. If the MSC's accessibility mask doesn't contain any online CPU, this MSC remains uninitialized. During initialization of class->props, skip any MSC that is not powered up, so that ensure the class->props member unaffected from uninitialized vmsc->props in mpam_enable_init_class_features() and mpam_enable_merge_{class|vmsc}_features(). Signed-off-by: Zeng Heng --- Change in v2: - Add check for the MSC probe status in mpam_enable_merge_class_features() v1: https://lore.kernel.org/all/20260107031336.3599175-1-zengheng4@huawei.c= om/ drivers/resctrl/mpam_devices.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c index e6c9ddaa60e2..feb33931a83d 100644 --- a/drivers/resctrl/mpam_devices.c +++ b/drivers/resctrl/mpam_devices.c @@ -2335,10 +2335,12 @@ static void mpam_enable_init_class_features(struct = mpam_class *class) struct mpam_vmsc *vmsc; struct mpam_component *comp; - comp =3D list_first_entry(&class->components, - struct mpam_component, class_list); - vmsc =3D list_first_entry(&comp->vmsc, - struct mpam_vmsc, comp_list); + list_for_each_entry(comp, &class->components, class_list) { + list_for_each_entry(vmsc, &comp->vmsc, comp_list) { + if (vmsc->msc->probed) + break; + } + } class->props =3D vmsc->props; } @@ -2350,6 +2352,9 @@ static void mpam_enable_merge_vmsc_features(struct mp= am_component *comp) struct mpam_class *class =3D comp->class; list_for_each_entry(vmsc, &comp->vmsc, comp_list) { + if (!vmsc->msc->probed) + continue; + list_for_each_entry(ris, &vmsc->ris, vmsc_list) { __vmsc_props_mismatch(vmsc, ris); class->nrdy_usec =3D max(class->nrdy_usec, @@ -2363,8 +2368,12 @@ static void mpam_enable_merge_class_features(struct = mpam_component *comp) struct mpam_vmsc *vmsc; struct mpam_class *class =3D comp->class; - list_for_each_entry(vmsc, &comp->vmsc, comp_list) + list_for_each_entry(vmsc, &comp->vmsc, comp_list) { + if (!vmsc->msc->probed) + continue; + __class_props_mismatch(class, vmsc); + } } /* @@ -2890,6 +2899,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 =3D true; @@ -2899,8 +2909,11 @@ void mpam_enable(struct work_struct *work) list_for_each_entry_srcu(msc, &mpam_all_msc, all_msc_list, srcu_read_lock_held(&mpam_srcu)) { mutex_lock(&msc->probe_lock); - if (!msc->probed) - all_devices_probed =3D false; + if (!msc->probed) { + cpumask_and(&mask, &msc->accessibility, cpu_online_mask); + if (!cpumask_empty(&mask)) + all_devices_probed =3D false; + } mutex_unlock(&msc->probe_lock); if (!all_devices_probed) -- 2.25.1