From nobody Tue Apr 7 00:49:41 2026 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) (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 B43333CE497 for ; Tue, 17 Mar 2026 13:22:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.187 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773753727; cv=none; b=c4wEjiVy6sQcxbyCglyG0dMpiSADLe2P3bPaqMQb+p6WT6wScDmt18fsoEWrQcRPa04/plKsZ+NGEFafR2PXf1lrQIku13SX+g74msx1UDozvznZawwFRT0PdbM8IrVb7hxBSPL/sSshnk5BkeXktyVOjGj0yV1cpAs3IDesRwc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773753727; c=relaxed/simple; bh=BdGjbPdpCAOMXZ0I8IaZpBNJ2HIkZmo9lRm+TDo1Zk8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=inD5//7n3iVAAmT8okN9LHbQoZqdGDJJ+K2uKrObZC3JdjwLx1exzuyJD/cflDYIu7ASFxA/cKgO8QsuAX6rhKwvaUYKKSYs+ji44V8NdLrPE+dSOlEGweX2Yoe2HRbqESXso7Unk3aSn43SXSmkqU/GROaXHz3kNvmf0ssz6Mg= 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=bi7PaieE; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b=bi7PaieE; arc=none smtp.client-ip=45.249.212.187 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="bi7PaieE"; dkim=pass (1024-bit key) header.d=h-partners.com header.i=@h-partners.com header.b="bi7PaieE" dkim-signature: v=1; a=rsa-sha256; d=h-partners.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=TVYTDSh3yQDioNhUgMcmHZcGJzEaoOUYB/1JgCMw++Q=; b=bi7PaieEyX+h1rLVA/1q+FZB+nDnt1713YpfnYsqO1/KiQ5otg5WwSBFgxaKUuhY6eccex7Qz EhYR7RNV4fRUVePdtbg3hhRjVWVd5/krxroYQSBb5AdRhSnTxFzZYXshmn7t+oIyaeYjDimbc/1 CYeRp6qF5wgAXm7MJZ1n4/Y= Received: from canpmsgout03.his.huawei.com (unknown [172.19.92.159]) by szxga01-in.huawei.com (SkyGuard) with ESMTPS id 4fZszN6Trsz1BG0r for ; Tue, 17 Mar 2026 21:21:04 +0800 (CST) dkim-signature: v=1; a=rsa-sha256; d=h-partners.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=TVYTDSh3yQDioNhUgMcmHZcGJzEaoOUYB/1JgCMw++Q=; b=bi7PaieEyX+h1rLVA/1q+FZB+nDnt1713YpfnYsqO1/KiQ5otg5WwSBFgxaKUuhY6eccex7Qz EhYR7RNV4fRUVePdtbg3hhRjVWVd5/krxroYQSBb5AdRhSnTxFzZYXshmn7t+oIyaeYjDimbc/1 CYeRp6qF5wgAXm7MJZ1n4/Y= Received: from mail.maildlp.com (unknown [172.19.162.197]) by canpmsgout03.his.huawei.com (SkyGuard) with ESMTPS id 4fZst70rYyzpSwF; Tue, 17 Mar 2026 21:16:31 +0800 (CST) Received: from kwepemf100008.china.huawei.com (unknown [7.202.181.222]) by mail.maildlp.com (Postfix) with ESMTPS id 51F7C40363; Tue, 17 Mar 2026 21:21:53 +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, 17 Mar 2026 21:21:52 +0800 From: Zeng Heng To: , , , , CC: , , , , , , , , , Subject: [PATCH v3 1/9] fs/resctrl: Fix MPAM Partid parsing errors by preserving CDP state during umount Date: Tue, 17 Mar 2026 21:21:33 +0800 Message-ID: <20260317132141.1272506-2-zengheng4@huawei.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260317132141.1272506-1-zengheng4@huawei.com> References: <20260317132141.1272506-1-zengheng4@huawei.com> 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: kwepems500002.china.huawei.com (7.221.188.17) To kwepemf100008.china.huawei.com (7.202.181.222) Content-Type: text/plain; charset="utf-8" This patch fixes a pre-existing issue in the resctrl filesystem teardown sequence where premature clearing of cdp_enabled could lead to MPAM Partid parsing errors. The closid to partid conversion logic inherently depends on the global cdp_enabled state. However, rdt_disable_ctx() clears this flag early in the umount path, while free_rmid() operations will reference after that. This creates a window where partid parsing operates with inconsistent CDP state, potentially make monitor reads with wrong partid mapping. Additionally, rmid_entry remaining in limbo between mount sessions may trigger potential partid out-of-range errors, leading to MPAM fault interrupts and subsequent MPAM disablement. Reorder rdt_kill_sb() to delay rdt_disable_ctx() until after rmdir_all_sub() and resctrl_fs_teardown() complete. This ensures all rmid-related operations finish with correct CDP state. Introduce rdt_flush_limbo() to flush and cancel limbo work before the filesystem teardown completes. An alternative approach would be to cancel limbo work on umount and restart it on remount with remaked bitmap. However, this would require substantial changes in the resctrl layer to handle CDP state transitions across mount sessions, which is beyond the scope of the reqpartid feature work this patchset focuses on. The current fix addresses the immediate correctness issue with minimal churn. Signed-off-by: Zeng Heng --- fs/resctrl/rdtgroup.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index 5da305bd36c9..bc0735eef92a 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -3165,6 +3165,25 @@ static void resctrl_fs_teardown(void) rdtgroup_destroy_root(); } =20 +static void rdt_flush_limbo(void) +{ + struct rdt_resource *r =3D resctrl_arch_get_resource(RDT_RESOURCE_L3); + struct rdt_l3_mon_domain *d; + + if (!IS_ENABLED(CONFIG_RESCTRL_RMID_DEPENDS_ON_CLOSID)) + return; + + if (!resctrl_is_mon_event_enabled(QOS_L3_OCCUP_EVENT_ID)) + return; + + list_for_each_entry(d, &r->mon_domains, hdr.list) { + if (has_busy_rmid(d)) { + __check_limbo(d, true); + cancel_delayed_work(&d->cqm_limbo); + } + } +} + static void rdt_kill_sb(struct super_block *sb) { struct rdt_resource *r; @@ -3172,13 +3191,14 @@ static void rdt_kill_sb(struct super_block *sb) cpus_read_lock(); mutex_lock(&rdtgroup_mutex); =20 - rdt_disable_ctx(); - /* Put everything back to default values. */ for_each_alloc_capable_rdt_resource(r) resctrl_arch_reset_all_ctrls(r); =20 resctrl_fs_teardown(); + rdt_flush_limbo(); + rdt_disable_ctx(); + if (resctrl_arch_alloc_capable()) resctrl_arch_disable_alloc(); if (resctrl_arch_mon_capable()) --=20 2.25.1