From nobody Mon Feb 9 23:16:09 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 85FDA27C17A for ; Fri, 28 Feb 2025 20:01:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740772920; cv=none; b=JUBZgeZYzeRWEzBb0a9QUQgFEfsdABXZ7hSvOTYx2LMPPmSkV4NJyOuWERoij7Km0iKW2qrRyakjsbZ/kEhIh8jIDX97j5tb9arlfQeaXKHAbOU/mHAOk2GxkZruqY1lHWWIDGzfFdl+Twfzl0l2T0mVVFiiyxaHGi9jhiM+PgM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740772920; c=relaxed/simple; bh=P2IHkKGOURUXTh/oXhwgqbU9jsV0mPV1ofEcRsjjJYg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=kenKE26yJeg0I+7r9XC2nOIuDmRzL1tFuEXGPiMwZSYW2p+laOl7h5LCtgD3dhgla985jfIQ5oJap4R/TboxtHr4XLIvgy1573T1OpRiMaLljSR7nV1lmUmGJJFIhnxQvlVbDOoImyPvLylLm2sWgA0wrAaSAlXJKp5WYeJgP4U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2F6FA19F0; Fri, 28 Feb 2025 12:02:13 -0800 (PST) Received: from merodach.members.linode.com (usa-sjc-mx-foss1.foss.arm.com [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9C9593F5A1; Fri, 28 Feb 2025 12:01:54 -0800 (PST) From: James Morse To: x86@kernel.org, linux-kernel@vger.kernel.org Cc: Reinette Chatre , Thomas Gleixner , Ingo Molnar , Borislav Petkov , H Peter Anvin , Babu Moger , James Morse , shameerali.kolothum.thodi@huawei.com, D Scott Phillips OS , carl@os.amperecomputing.com, lcherian@marvell.com, bobo.shaobowang@huawei.com, tan.shaopeng@fujitsu.com, baolin.wang@linux.alibaba.com, Jamie Iles , Xin Hao , peternewman@google.com, dfustini@baylibre.com, amitsinght@marvell.com, David Hildenbrand , Rex Nie , Dave Martin , Koba Ko , Shanker Donthineni , fenghuay@nvidia.com, Shaopeng Tan , Tony Luck Subject: [PATCH v7 33/49] x86/resctrl: resctrl_exit() teardown resctrl but leave the mount point Date: Fri, 28 Feb 2025 19:58:57 +0000 Message-Id: <20250228195913.24895-34-james.morse@arm.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250228195913.24895-1-james.morse@arm.com> References: <20250228195913.24895-1-james.morse@arm.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 Content-Type: text/plain; charset="utf-8" resctrl_exit() was intended for use when the 'resctrl' module was unloaded. resctrl can't be built as a module, and the kernfs helpers are not exported so this is unlikely to change. MPAM has an error interrupt which indicates the MPAM driver has gone haywire. Should this occur tasks could run with the wrong control values, leading to bad performance for important tasks. The MPAM driver needs a way to tell resctrl that no further configuration should be attempted. Using resctrl_exit() for this leaves the system in a funny state as resctrl is still mounted, but cannot be un-mounted because the sysfs directory that is typically used has been removed. Dave Martin suggests this may cause systemd trouble in the future as not all filesystems can be unmounted. Add calls to remove all the files and directories in resctrl, and remove the sysfs_remove_mount_point() call that leaves the system in a funny state. When triggered, this causes all the resctrl files to disappear. resctrl can be unmounted, but not mounted again. Signed-off-by: James Morse Tested-by: Carl Worth # arm64 Tested-by: Shaopeng Tan Reviewed-by: Shaopeng Tan Reviewed-by: Tony Luck --- Changes since v6: * Added kdoc and comment to resctrl_exit(). Changes since v5: * Serialise rdtgroup_destroy_root() against umount(). * Check rdtgroup_default.kn to protect against duplicate calls. --- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/r= esctrl/rdtgroup.c index 2f34b7215679..0d74a6d98dba 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -4094,8 +4094,12 @@ static int rdtgroup_setup_root(struct rdt_fs_context= *ctx) =20 static void rdtgroup_destroy_root(void) { - kernfs_destroy_root(rdt_root); - rdtgroup_default.kn =3D NULL; + lockdep_assert_held(&rdtgroup_mutex); + + if (rdtgroup_default.kn) { + kernfs_destroy_root(rdt_root); + rdtgroup_default.kn =3D NULL; + } } =20 static void __init rdtgroup_setup_default(void) @@ -4387,11 +4391,26 @@ int __init resctrl_init(void) return ret; } =20 +/** + * resctrl_exit() - Remove the resctrl filesystem and free resources. + * + * Called by the architecture code in response to a fatal error. + * Resctrl files and structures are removed from kernfs to prevent further + * configuration. + */ void __exit resctrl_exit(void) { + mutex_lock(&rdtgroup_mutex); + rdtgroup_destroy_root(); + mutex_unlock(&rdtgroup_mutex); + debugfs_remove_recursive(debugfs_resctrl); unregister_filesystem(&rdt_fs_type); - sysfs_remove_mount_point(fs_kobj, "resctrl"); + + /* + * The sysfs mount point added by resctrl_init() is not removed so that + * it can be used to umount resctrl. + */ =20 resctrl_mon_resource_exit(); } --=20 2.39.5