From nobody Sat Jul 25 15:24:49 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012026.outbound.protection.outlook.com [40.93.195.26]) (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 394463BCD20 for ; Thu, 16 Jul 2026 21:03:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235822; cv=fail; b=muvFJmdG2zwHp09p/3SPF/KQFV3cLM01AA869kLTC2PHAFNUshuiDofVvE8L3DW+6nz2sanf4X1kxVHGXiVDEPh+2xuklnBCHfZJYHUb+t/jyfmDh6Xxy/+e3xm2GrzrdCF7Npsp18EcyX0nnZWn7IoRwbs5cyRD4WnGDeY6zL8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235822; c=relaxed/simple; bh=IIwus1nvG79JLIjvL6xkGTgpP9A5XAAE8WWs90vV9Ww=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=g9vI1uomxqoxKZSBtPY/mxm5zi6VONbOl+9imuTb6ttmxgHWDh3yFhOfRL7+gGd7tY8wAX42tNOElDBn4FaapcY6Yu+BRjeBOxu9WHfOWHjcDpEP1dhDzF+OgBPs1Eg37vuaxded5fsZJQf1BbdzP7jinwV1sZrQsv6vIOEJ250= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=XzCDuxTX; arc=fail smtp.client-ip=40.93.195.26 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="XzCDuxTX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=u2B07sk9T65BMqJeJRfuSLf6qYJiB6uDiYkW4p5zXDcrcAMO1psHRPULt5xtKXksxHZW4+7LLUGzgowqIJW0zDT30zOUwW6Uv/7121FTIfuLRo9Qcimh5PlEBJUXPxYPPgvGsp+wfmLPjDsS35NYxg9KWxRWjRnoYx/fKNLsOP+nTbVam+nGgccBywjVfIizEnyiHk8ShDydFCrztTQviBbw8qTi/gluW5Vp4XoTvmryJETQ1aJhFQRw5847Zd5phUHq154ELfFCMrehLW4zn05/DEA9NjnCamZNVV8fuCitPnQW2c6eVIoEOYQ/Uvc3maKZlvBGQcDe7/MMxrTnfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=x5kwkq3KbDBQSPQwSevZU6hLzRLQHNLwcKnfZ1JQAB8=; b=C0q4f0HMoEZpWmQ15uqWb7UDkgC1uAAbJooaMkJLib5QOF80AOmgtR6+iegX6I32ZTnd+X2Wxf55l3DScK29E7waj8QzGRXGTIbwx4VPOdhDddRB17IjsY5DkvaoXwOkO1swJlZPwoYkKELsweX46n+v5S9wjviRxytdB+GE6jE0BKDWu5fKm0FJbv3aMbsJusfi2eDJgKJahHaPIIh9Ax3/6zWI3d1Y9FCKMIbTgq/pwdQK9QjElPG/hect2f/5Tv0ACpoQ1X9CxX2Zpnm0Yg9OBU6bjw2cfZddqDNuDsPaGYuU0xB0R0u58oeMks2J4vN+uLfeRcA5OeirCRAeBg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=x5kwkq3KbDBQSPQwSevZU6hLzRLQHNLwcKnfZ1JQAB8=; b=XzCDuxTXUOKds+pFwNyBbPGY4hikyKGGLrV76G9I7mKWnXwhJVktcw+SrXavepIMRuUFAYDZ4U9vioJrlqDaQ9eG/Edzmd7WPfPZvWDxWl3U//Dy7azTwZEs2uM7SThbQtjOhoQNw11T8GtyFgHPi3nxyBYXqBmHTGicByTq1yz0CTeZVgg154QIKnavZNO8LcOsRHFL26rji8wRyo/Fij0GIlcGsw02SLDcS0wzcOj0s11Zn4r3Q25/6MAyO553DchNfbayHNeHRqfcO8xhspMiijcyTcSV+h9uHCxywfTMtFs68jhMalqqKQP1CnZt0pHXARN20Onf0GVFbl182g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by PH0PR12MB7485.namprd12.prod.outlook.com (2603:10b6:510:1e9::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:30 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:30 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 01/23] resctrl: Fix ownership of resource_schemata control subdirectories Date: Thu, 16 Jul 2026 14:02:51 -0700 Message-ID: <20260716210329.2914625-1-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0154.namprd03.prod.outlook.com (2603:10b6:a03:338::9) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|PH0PR12MB7485:EE_ X-MS-Office365-Filtering-Correlation-Id: 83c9d0ac-e8db-4853-6c36-08dee37db09a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|921020|22082099003|18002099003|56012099006|11063799006|10067099003|3023799007|6133799003; X-Microsoft-Antispam-Message-Info: tKa5ozuH2rYL/8glLI5CUS65hGCUKk8Aua93Ft6sMjf+0l0ebSJ5+9Lw55f38JS9N5PjU4wjIqmjjnMmbVjepkwXyUI1VtY5y4K5GLdWDNtK5FlLralQhk5CTKUvUA4I4aNCLDYXN6fubA1GMlfOht6ykd7IEp7mPm4E6Ng7wYSYh8JfH1wGTr+Y0GWvBBvINiSz5WaaDCiWNlFwtwlA93w7vpYkXiYI0II+13MsN/QQjvcRaEw+y2FG8XwHl6qBgHiKCrDR96/mwYIuZuI/rBoJ26saM0tnnJXjk0QMPd9MJtJzqBOvyN4CFsvYDDL2DeNKVzj5Yf8fpfFx0Y9OoPwtZM/k43YZpejMzrK4Cdq2hIA7ywOudg+968uIB6KEtampQqVFwTb5JBbr9jbDwKzDP/G08x6jTm1Vt+ND4uY/ft+WqeJq089n+e6B3FmW8IP11bNaFkwxwDlUEY5SZv2Qs+d/iD2Ljm/SyT4FeodPFLIXOqPVj583AT24D5TnBp8hBJKz066hdMqdZq2TgKA9ogyHOiNqcgLKmVr0M95ymUxOpLNJOaU6l3TGt1M5H3RyolaOh0e1mEqRYHmavckpfIlPyyD49eZgZVlodrYRlMNgIZy2NSyKtpoArcVcM/E9C8Qul9rC2ad7ueolhoy7fBqp2C5lnUiRq8Q/B0rBDY91cwCsyqbtbyPXIEC1fyXTrHfNb+prBzqo56SUVw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(921020)(22082099003)(18002099003)(56012099006)(11063799006)(10067099003)(3023799007)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?XXmYt5U+No+rBkoaGP4F5otuzgUpACkaV76jxvITm86pAysYNxxjo3ELR8nz?= =?us-ascii?Q?jiiH0Gb6HifOxR6CbNHyvof78ryxF8B2e7P5QZ3RnEHiMpAJQDanCFGFaa+x?= =?us-ascii?Q?wjiDcWRITa3vuSvj+T1P+/+8bBMMDW/8f4AGjOFBBC+PCZXwsHpQEp1gePVe?= =?us-ascii?Q?ej4kQhAcZ2V85Vns3tBLo9/7PWS8bMDINQi5V1fVaXls9XIt5gTW6DEpfHJj?= =?us-ascii?Q?2u9CbA43T3r6BnEk1/kCxlFZUAbAQ1SKo0FwPGTBYD+WWY9nqtkngcgi4sPr?= =?us-ascii?Q?wmgagAYhyMwiQdG4rSVw68xp25mK8XKQMWIlfGinWVSUjaBvoe5q7OGLO657?= =?us-ascii?Q?CppUKyGYZ/P3sDyQlmFIjuk0VYXNA8gv+Av3+7oMhMvj5c3QvImHztJDYGrz?= =?us-ascii?Q?rdpu5zyYjDHod3i8+A3ChKmiuCO8kXgtHmTka7Z9oxOsx8qtROxA8qCJh4SX?= =?us-ascii?Q?oorX0g3Ery/qmC7UARfqzzEzHMQipvpbZf5tqxzslHE0TCBYrMBeKjyBm8/j?= =?us-ascii?Q?rD1ja1kwvhakXjz/4ReKNeV5D2y9QuwNsiafQtpPh7fkDHfBD5er87YMtVPc?= =?us-ascii?Q?MNKj5Rc2/TnHDiCidiQlOqi4E+ps0sYwQuSRKZ0fnrdFxpmefH1f6EdCGv7k?= =?us-ascii?Q?3oVQOPtfXSkMX8QCnDOoFhvnw6J5P3kJ0o5beiSukfNRBvwLIDnZae0rn5Ug?= =?us-ascii?Q?bM7GF0ODy5lPjQql6ktK8Zena1mPSlCyF/iQebMMFroGggWJKdN1JqEgWUaK?= =?us-ascii?Q?m5MnsrW3ZqtqQ8d3LliY36Ni+rovuUXNr0uvWAonkVQ1Bq+vFk5nYbMORd2E?= =?us-ascii?Q?p8+5uElBaRtZD2XuwIEHOd/xNXCkJHh38hgkw6n8xvxzUup53b3TyO5OzRIT?= =?us-ascii?Q?niLKx6Lk5dzYTGBtzEKWWtloCvRxjIDvJrAaHncERv5TE/KrA75kBc+gMzMA?= =?us-ascii?Q?n4lmQa4vUKycLsZlurwvGtVllR7Wkjx+91JBpf+WdIIrc3Is6aofwtV5cpwF?= =?us-ascii?Q?twr5oW5GzAl+eIqwjDOC/NajaXghnPwi6laC2nq8kbFjHRFTzpAogWGi305r?= =?us-ascii?Q?wn60qYnciPT7pWCxS+mzKUIQcFJL/pUe8zLWew2Ze/4MK4nWEhDXM2psmUcT?= =?us-ascii?Q?cu1ifLfdXAY/DQQDDVxzV0yeRj67gANWwaYNg1V0jZGrz8gJswJQKRb5PeVF?= =?us-ascii?Q?eHG8hLGC/OP0PEvt8rgnhTaUtTXGZs0uEm/umiae12vNCT4W0gcdcOjSvgPP?= =?us-ascii?Q?h1yx6EGe2paXml823WKgwvKGVPy4V0653jLVtUcSRB/mIAFaN/1s3SRMfMcp?= =?us-ascii?Q?Jf/Glywt9KztQIORowW+5whUucWvpfMlLFHNtDMy4d6IbsgJGCEl2jxMpjJk?= =?us-ascii?Q?fkzpd7M0qCwxO+hJHOOiOs42B0yInweiuy8U15E6gcDyn4n9UDZ2AnIc8r30?= =?us-ascii?Q?CRNZijDw5IMM7NTbaeFi+TsC0MOBOg42rf4sj/fH9Jce3qRRDRpG9DPk7LhS?= =?us-ascii?Q?r9WTDkycqB8Ljm3Uhz5/Wc43VbVNYok8UN7o1M4ZtUr6gJrjz77herXXDZcC?= =?us-ascii?Q?2pAW/fzDSkcvbg+qQlH1pjkEOnOXf/ik10LShzRbBPfWAfPSkK0qDONS2uR9?= =?us-ascii?Q?jo6zINdOU26j2i5OamjR8/XaA2lw5cD8lQu0AuvwUPJJsYmN41Uz/kDEkmDc?= =?us-ascii?Q?GXL1lXrLO8xF8DoCqS8cqgpfWzXkGjdiEgcGvTk2arC7cSv1LV7ATv2Wv6jf?= =?us-ascii?Q?BkV3Ge+yuA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 83c9d0ac-e8db-4853-6c36-08dee37db09a X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:30.8302 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: gL7HY4TOuwjEpaH/X2eQfOHmSi8abfcv0IOBmJ1veyRFGvKz8Iwb9juy8i5kNOd815Oad/veaLKFaw8JBX0ALQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7485 Content-Type: text/plain; charset="utf-8" resctrl_mkdir_schemata_dir() creates a control subdirectory (kn_ctrl) for each control under resource_schemata, but applied ownership to the parent resource_schemata directory (kn_subdir) instead of the newly created subdirectory. rdtgroup_kn_set_ugid() is a no-op when both uid and gid are root, so on the common root mount this is harmless. On a non-root resctrl mount, however, each control subdirectory keeps root:root ownership instead of inheriting the mounting user's credentials. Apply the ownership to kn_ctrl so each control subdirectory gets the correct uid/gid. On error, resctrl_mkdir_schemata_dir() intentionally does not unwind partially created nodes (see the comment above the function). The sole caller, rdtgroup_create_info_dir(), removes the whole info subtree via kernfs_remove(kn_info), which recursively frees resource_schemata and any control subdirectories already created. Signed-off-by: Fenghua Yu --- fs/resctrl/rdtgroup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index 5ccd09b16e0f..2abb7fda6091 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -2728,7 +2728,7 @@ static int resctrl_mkdir_schemata_dir(struct kernfs_n= ode *kn, if (IS_ERR(kn_ctrl)) return PTR_ERR(kn_ctrl); =20 - ret =3D rdtgroup_kn_set_ugid(kn_subdir); + ret =3D rdtgroup_kn_set_ugid(kn_ctrl); if (ret) return ret; =20 --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012026.outbound.protection.outlook.com [40.93.195.26]) (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 0C0BF3BE14A for ; Thu, 16 Jul 2026 21:03:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235827; cv=fail; b=Gho1O2bbIJQ9aksgzDBsAfDD0RkNAWugge1v+mQDRyPFd4dPZSzicKOsKKtSE2N+Q/GQntqmCh8vetWjmKQsif0nHD/rDhAweu0w6OH5io7HtFt+Q9D8EHea+HtvPehrzpT8BH23yvdLn11diViab4y5qvwO/CUCM8ASX10l1TA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235827; c=relaxed/simple; bh=3Xavb+R81vttdCRMbvdMZ3k29OB1ebCP8b3EBnft1Rc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=szO7zDKwP6vQGZdfSw3logu9fRG/OJNL8AZukyd7HJt20APpmRFmerJjDK6C+i1qpl7etJm3/toG5jIDw/OBSJ2VWTp5ImfGJFFduIPOlISPsrz9XvRdE5+FtnNjeo3WEDBrY/sA7nSnIlWBENoiz5e4bbngRXNGQSjpZgQ4ZUM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Knwelo65; arc=fail smtp.client-ip=40.93.195.26 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Knwelo65" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eCoB642FuSE91q7af0l8FwTtQOoyYBwoOAGRAA+PVT4H4pJd7b2WoK7uDegzAuDvY5kErdfXDQtgfHCMjuuKOYIsW2rHiip6gOvVmQquZzsOl6P4KDjeGzxQcPpgxt9pOoi9E22ef0hRYhLhUPSp4YZjcDNnZ6rj0RmymdwS6kVKCNPMYwCUrxfriXi51GkeLep3zSPNdSpivzvMVpTLB0Rr2pkrWoOTH1OV9xdVWm4PyKRlQk9WlPP16uQVrw4RbJ7udUwGAVhoH2vrjAEDDDW2Jl42+03Y0KQOvQGvlaQ49S/VJ8tSYFtaHTOoLf+vB1WRbL3niHKT103331aLRA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AW9TjGSatVvWSZ0TGUUwybfwE1IN6Gx5okMhDPZ0LH8=; b=sqkMXOHuAkLkueM62PkHcBsC4nzIoai58zlx+EVu5EY77hcmpjYFXHvifh1M6yywbTRabUzdvX0JL3NEGyou7JtTLNq5hMj05FHzbxS4aUd1oEMcYHe8RX16icmuEsweBtg1xBl2K5BUCp3UoJXcuYai/ltorpa/yUSsQiQ+LNoK8iXw6xteesxo2tW9MmscCQFbb2ydVprmSn3zr9PL5KETg9QawkCD1MLGhtrSaiIeHdJ+engjjzAzca4404JsfYjK03hGcIHQU2vXpnZqHLvm+9DpgArBpOGafOu4UwmAO7d6HBY3vLpwrir/0cDGlFdl+kG9bGlzWIlnW/eQAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AW9TjGSatVvWSZ0TGUUwybfwE1IN6Gx5okMhDPZ0LH8=; b=Knwelo65ZSxyedw5IMa5+NlxhYHDm/8EA5zx1ij7Uz/jce+tyIXhScI0yYxpzVOl1wZASlEmJQ/fMm2SamAaGa2/taDgGyyViY0tgdarSWVJrlfLYKKOvQsFuPW3m/aHGnRpsaTunXKdOKh5cRZHNLE0PpQx95KmYGLyr6la7TH5dZpa3q2dO8GNc+fMXsD+r97iLkkalclUJJc0zvGDTWRr2wVaNIbGDEa80TFN+TZMfksSlkFBOuVuHmfZ1Q3OZ7TVMoHTBHu9dKU5YcgFQJcd9rvAtIwMa8jfVKRheZBXXiJD4QZxHABQTxWAJ7dlI65OZJJqUJ8OmoX9l0mOUA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by PH0PR12MB7485.namprd12.prod.outlook.com (2603:10b6:510:1e9::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:32 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:32 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 02/23] arm_mpam: Fix NULL address access issue Date: Thu, 16 Jul 2026 14:02:52 -0700 Message-ID: <20260716210329.2914625-2-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0089.namprd03.prod.outlook.com (2603:10b6:a03:331::34) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|PH0PR12MB7485:EE_ X-MS-Office365-Filtering-Correlation-Id: da4fd157-02ee-4e02-c3ff-08dee37db192 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|921020|22082099003|18002099003|56012099006|11063799006|10067099003|6133799003; X-Microsoft-Antispam-Message-Info: CL9ERHL0TpcHdqgc4Frt54aDuMd/XMopPMkP+7U2zfX603XsRVk8IUfOb/NyPttRAsFopW5jH4asrPpIXMet08xqOEPimtW4v9fFCpKtj50qjTThd0Q2CGutaMiFp8esefdrT/Q7/OsFgGa8jtZ4JJZb3QKSOpiVQvov9MejwpmEe9UwC+MCmul+GxlKiQE2Q3+myJJCkTqN0RgPta2H6EqcsYrraZVRvggZGS7aza1wbZ5xiyWCnnkFwvqsnU8G8cmppRwwCUqRGJrfe777IqdE6oD9u8phD/QkoOYIrycDmoyhbBAdWO7rDbqxLNr6NId8azAyxzmDY0NAkKj/r1CyPDoBtm7VRbK4THOrLiyyAVMOKOIBdYTto6ss8KaS8TAMU1gVjOfw+cw7CR0jmS+yt+UPR+isHbgIapXbBLpGtaLinUhMkXKru23MmYy7Gs9Iti6dafI5ajgBOpnb8KXWHw97CZdMC8H0ngQKkqnnSVCf3seIPIorh8At/azQVpRBgKNcJgZQ23nevxCm6GWOkvOLSwZpZVXqEVP1OhA+Ako15O89WUylc5WvEbmDV/izASMK5dkezRg8+IbPCKNt940sPCCXx6DkZaCR7pkiqEoeQPTCb2PZPZjCrdnZALZQlcMvca5YdQ+uP7hUYB4BBM/A7Q3zS2XsVyRIa2EWAx+D/DFqdxK4FafKdWkIGxk28foL9oJyptCAT34emQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(921020)(22082099003)(18002099003)(56012099006)(11063799006)(10067099003)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?EF5+SPvUf23Vrd+RU/uExN0WdhS52MkTO6CoPs2qFnp+gTnVln0SicFABRJz?= =?us-ascii?Q?NDdmrjAq6QCmkyGYU7Qtbf0ud1Muh2S/4LOETNXXSbak6cZn4/DtyslN6551?= =?us-ascii?Q?eXhZRlqRZJy5uQSvWMledS+oAD7PRqSYJkiH+Qnk68C0fj1Jq0f51JR0QVYK?= =?us-ascii?Q?XipA13o/5F9JS2cxtDfcdrB9hvfPMQcADGPZ95FtVn/jKb5OKxzMC3z+X56P?= =?us-ascii?Q?QLItO3AxSf2b4mm14s0And9vNI/IZ7Yj79nEg01EbINunoOpon0nQ/jhP22w?= =?us-ascii?Q?McprR1uoApv4ptAd1kXDw5y5d9UuM9RmNEBIOsfcBISq0/YZZwpcmfmiDl7N?= =?us-ascii?Q?KiumTQ2LzhxJ6tiG5fGHGtbnDKbGE4rwIU4DOx3V+Hpkh8THHqbCb7T3d4cZ?= =?us-ascii?Q?OSWWHWaynN3jmv4HMGNhoxXFKKryc9VVLltXfZjNlYCIepWdRjUuMaNJJ32a?= =?us-ascii?Q?0vR0Uiffyr1nEiDMyK0pUHXP+OSL1fAQYVDm5P30B22YCJscuMOH3rJ+AmwT?= =?us-ascii?Q?Cr6e9mmBmT2l9bB1EW3XwdUVt4xMouBtrQwWUOwG8KHuN5z+V7mZNeb/YF88?= =?us-ascii?Q?LqnPGq6y8ygXUaqr4TI7GgRzkohxCPx7oV/6stNAh8763kx02dtB6YXhxn3R?= =?us-ascii?Q?XHaqo4gIkH4IZWqrmsVCGjGIzFinsCy+1Bxq+sheB5GN1IVyh3mn5zhfQQkw?= =?us-ascii?Q?YDmYpQmvivEu+lap5Aep5bSCujrx/pqyUvNQ18WTxzw3CJjqWLNQ6GPk7IPk?= =?us-ascii?Q?QsZ97FazMEvRJz1VYrWGb6ykdkBOdkWyn3ntmR1OF7o7J6O1RFzYVYp3w0h/?= =?us-ascii?Q?/Lp4XiGc0FRutPe03rpq5bfNLkvjVyxI+Hdp0koVnJAmQBKSIO+pGY+nJNhd?= =?us-ascii?Q?XIp+pP/oVs8incSejyZabxEk7AXyQBz5fDB7r2SuUDT/su+CpGZfLAxKCqBf?= =?us-ascii?Q?j3+VGgwTDaRbcwzs7Zmw4YGbNbqzmoQu4w5hZI+e4HE/9Z06sqmXg6nH6rav?= =?us-ascii?Q?fMOBAL4zEVvNgH4klnYeURDJrVo5lXz3ntWhQbBtiLUmRtGfPhlaSwuuLir1?= =?us-ascii?Q?8J09yEYXFONKJJi8vdcupW1YnVZzY5VDenEIl1yHO3jlizJ95uG6PdVF2QvE?= =?us-ascii?Q?5Ft8WrsTwKC9c+f0BuDvLpgR1/KI7esDm/Otj3kaFWGuOqjAW+HYzprc2D1l?= =?us-ascii?Q?/hBoYWoQ+SlTual+RKfbbkspt5vHEG8TZJP9lPLTW9pMquHoTWXTLCpEwxoM?= =?us-ascii?Q?IkvkIUsXERAub+jHiHhuEQ2zyodJBgizH+yicQNXz3fogKc09YhS2rDED6Vw?= =?us-ascii?Q?OAe51L6d0sFLVP7/fS+LOYPp3H+vAimBfhQe1JjjQ7AmBdWjefSeTFGNvJV6?= =?us-ascii?Q?SnPmAD4+TxS/NC9o3gD/POzK98VArScqc2MFGGK13Mzna0A4WW1yUJecKrck?= =?us-ascii?Q?mifVAsZt8+AqPuq92UUJehxbn/EzCu31pzDO4k4ScX1uI0F2RDlB+4iAT5Xf?= =?us-ascii?Q?KxOWX1YtBlBa4xaqRqEBsDwzns6mc4GsOsrDUkQE47bGSOgPZ5iDhTZkIRV4?= =?us-ascii?Q?twnM7DVjh2UXnA56wWqCSu5t2QeSPxTJL+gVr3SDADW8fVY9IbFli/J9IV96?= =?us-ascii?Q?AIYzACeEEghwn8qiXOm++ORjq5QIrp/U36SrD4NtgzHaPdHD3CsdX01xj3To?= =?us-ascii?Q?ST9+OjT/k3HCgLUHfJ6SHwy5z5WMhjtSTaCYR2CFluyM8wyS3zvU4deOQyxM?= =?us-ascii?Q?N0OKrNHDFA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: da4fd157-02ee-4e02-c3ff-08dee37db192 X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:32.4568 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5kUhf8gMqwB7fO6tRvyE4Hpbc7zc5F4bynnCSFEtIoCAXR7mFV6AX/Z8U85RTOGFdvck1eSVCAcQ3OFKoJJYJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7485 Content-Type: text/plain; charset="utf-8" mpam_resctrl_setup() initializes each resource's mon_domains list but not controls. mpam_resctrl_controls[] is statically allocated, so the controls list heads are zero-initialized rather than empty lists. Generic resctrl walks controls with for_each_resource_ctrl(), which dereferences through the list head's next pointer and can hit NULL on resources that have no controls yet (for example dummy resources whose class is unset). Match the existing mon_domains initialization and initialize controls with INIT_LIST_HEAD() before any resctrl setup path can walk the list. x86 resctrl uses LIST_HEAD_INIT() at compile time for the same reason. Signed-off-by: Fenghua Yu --- drivers/resctrl/mpam_resctrl.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/resctrl/mpam_resctrl.c b/drivers/resctrl/mpam_resctrl.c index 68b94008d38e..e2cb3384820a 100644 --- a/drivers/resctrl/mpam_resctrl.c +++ b/drivers/resctrl/mpam_resctrl.c @@ -1942,6 +1942,7 @@ int mpam_resctrl_setup(void) =20 cpus_read_lock(); for_each_mpam_resctrl_control(res, rid) { + INIT_LIST_HEAD(&res->resctrl_res.controls); INIT_LIST_HEAD_RCU(&res->resctrl_res.mon_domains); res->resctrl_res.rid =3D rid; } --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012026.outbound.protection.outlook.com [40.93.195.26]) (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 DB6C73BE155 for ; Thu, 16 Jul 2026 21:03:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235832; cv=fail; b=UuihlKC9tMw37QUzyVPBdr7JnA+n7AcieFblwBqiSMMqUmXzH4lWDrJCwtul1TnMpasTQWspR70n9b4QesuIKhjF99ri+3Jl2YQ0wm+fZnFWMZV6ZUIoycT7JdWcc+6uoPiBpNSNMvhIsLHsk5/MMg4ZNnx/P/nvRvmvnUhdrWg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235832; c=relaxed/simple; bh=kjPBDldARMurmGMehEEsJbXMN0R1pKW3w4iw0RmfYLU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=N/eouhR99luQXOPIm9kYp4oB1fpYhTSoIoc7QGfBdCFaZVgOU7DY8FhRM5NuoKaqyr5M01vQYWHdMQNL7X9vG4JyMJx8HRXQooRLRSqo04Fqx2XdnkEujvQFjUciTv/ciPHNafH9O/g8cXedttYBLfySJ5uGFYlGPwgstQRVH/k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=V8m1Kyr5; arc=fail smtp.client-ip=40.93.195.26 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="V8m1Kyr5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XQIXuaoB6iv3yYihtFVfLcpw74fCbe/hvjwMM0i/2Bc2wAod9tBzUluLZ8nsdu5zijPcVHzNnC8bonumTRSsItflgiFNy0i4+xjGrRDycRL7MJgsb7L3TMgfpEyHtUbPVLZiNsKUCItQiVnuanmLCoNpxd44D7KqQZ/TnkjJSImbJKuQV3teZUnzQ3YWPMPGBxd09twBF4g5HHYLnuu8JJub14qblfmuqFCfY9vUPiuEH43Bmpg8AGvvCudzKec0fvmTl8q8HiWpouTuanGpJqB5eToiMiMRd+svpih3wfYboOss4jihG78q7QFqV9N3fARAX11/R4dAfUxM21g7UQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=El/qMgS9CJ/Oykq+IgFLvKdQYq8XSSkgytTflW+oyR4=; b=FLIUPmGjX9lQZGtdY0ylDvgWDuDqqTgeuvOIH4t2Lgk1MdI1fDtTzI7EjjBy85+i1qaonaX8egsCZ7LgWRGGe21jGYZ9WOV96QYjbimhZUsYJFVC398gMXBs5TNO9rsEZEYzuw330YV15JbsKfJ/bNW/65lK9PifSmcLLdUcKFsek7fEXx4Jx5R7mZAj7nulqO9iDiU5a0xoeUX1MsrfF0LtkwxhtcRtzyM40deyOZfUsoFdoz9Cf01H/TpiTVlQ6PsmIJJT19lGfVBA+Aaep6yHXHtE45MousBuy8DGDlYuK2nUn4+uv5uLSi1WeTRrNotB14EIGWHlNGp2uw05qg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=El/qMgS9CJ/Oykq+IgFLvKdQYq8XSSkgytTflW+oyR4=; b=V8m1Kyr5tRhQjZZLdVl+R48hMx9BcljDfpRrA1QGNGleEu6ShvLefRdq2Brw5LRYoiey9hTObwx2UaHWhFdRmLVtDzCbgesp63J8cGwcI66lX9Tvw1+25CDo/k1cjU5Ze6EJZuBR3gPvLfzyRfy9RAxKTKvkOg3s0ht3eM96Rw1DYZneLCC+cYetI3f3/Er8l5R0Zkhr6u0cC+pfr/vk8zB7RGsKSvV/GIsVY3RFgsep0mqhmATFJHP4M/YbsyB+jffI+hFXpbuYrhp5Q2lfo61X5aH/Rd+xsZ9jiC1jwh32J6OjDzzmn0JmzJOGy/Rb15cEZIq+wlnF3DgBAZ4hsA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by PH0PR12MB7485.namprd12.prod.outlook.com (2603:10b6:510:1e9::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:33 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:33 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 03/23] resctrl: Expose MBA resource_schemata mode sysfs Date: Thu, 16 Jul 2026 14:02:53 -0700 Message-ID: <20260716210329.2914625-3-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0120.namprd13.prod.outlook.com (2603:10b6:a03:2c5::35) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|PH0PR12MB7485:EE_ X-MS-Office365-Filtering-Correlation-Id: 85e3a821-c21a-4299-57cc-08dee37db24f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|921020|22082099003|18002099003|18092099006|56012099006|5023799004|11063799006|10067099003|3023799007|6133799003; X-Microsoft-Antispam-Message-Info: rj/O7btQmfkF6z68tE4UjZVLPmr8qGYir0nAwdPxKj7kGxSzk0zb4GFsgZYtiEiOBEHJ6W/kE5o7x7aUbZdYgZKjpXFGY5zCqVEz2MXTC/1+r4cV0xprLRAG+bYwP8/jZJbUA0i7T7DMt05IVK3lNF8Ys28THkN8z4LDiCh58dletvZyrqvi0H/ruv5yJpmqe7/X9Id/7DM2LrGs1a36iY1g5V3pQ8q1BPio2I4o7/N+pI+DJ1YQT+fAVkB/sXUI+HvEIbiPESgnrHlekAoA0OJZMg4moGURFCIfdOFSNTpckRldUJOlksESkacqM1lcftzMlabo74k1I5HsPOivMl0mhaOV/qewT7l1IEUfVfzW06DFz+nwRsxiuNo+P14z8qZgaq2HU9K9uVGYsAY7q8OKIE75tz+EArMWUnWY4V1KQ3dXnKfnQQfv85cOzn7jJ6Yf7nvGndwbZLM1ErBOfh38nSQbuwLlhXA/vLwzZLsikZupNWPdvJcsN9R77WxHVZ8Ao420gIhBOAKrg2cpiGygFh54lC/1TXtiamkjD98GdmhMIjA0Z+Bhwj8l63xAJab81sQfsY2JtbK309amOr0x8k5kTyG2lckwlZ5J8RTCF7cE8TvIEW8MKQTXRCR9HVABkx6J9Eo5CBTDxp2PSrI8m6x9G+qz9o6ppBMBzCalzK7VMoJHPxMXWoQl3zZooiwKdyDLidBZGYOTcfe4ZQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(921020)(22082099003)(18002099003)(18092099006)(56012099006)(5023799004)(11063799006)(10067099003)(3023799007)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?84edVPkI+dtOjITK3u+c25gHu2xQZ2WNuZ3WMZkvLBgA3xI+AQwTMocmuY83?= =?us-ascii?Q?HgDqQj9wmPgGyRV8skypnPjkJXlhAbr1CF0fyTTGEift0Shki2xIEFHetRif?= =?us-ascii?Q?wwf5QgxJxsAko7N55Ne7d0JFviCn92NlfBJdTuv4yJwK5KNEpIG12qLY1PfD?= =?us-ascii?Q?y1NHiyg6bAse7np/nVJTs2h+uZ5OQBlgYtKuHqX6c3muDaEJXQIh2JNlOIh3?= =?us-ascii?Q?WuDWvyWSt6ygTLVyJzuDYcoSrfCRM+xjOhpyeae+YagEd8hKalh4GFmMTT/g?= =?us-ascii?Q?Zookoa1EMO7e6GshnkeZiZfSxA9zEb+LRpFlHA8weKHZz6CIJrLkLy8/iz4I?= =?us-ascii?Q?zS7rExt9/nnMwTKj7pbhewWibR5ddsx2RStUwC1OBuyq/iFZP90vV8+kUIuz?= =?us-ascii?Q?v9Qs0io1+opsqXcnoedYTzDv44RwEbLUha5OJ7/c7m7Td2a8cwrosSeS6wOv?= =?us-ascii?Q?9O2Y8F5B8TlXAyHB/AWfzQvw47He55jNw9qNfhPfsgYOETD49vCM5lSMsoka?= =?us-ascii?Q?NkgGIqdWMZSvLShohCLfsPn/MhWJXFSkr9Y/d3COyjXsKyiFaYRMd5cFPOmT?= =?us-ascii?Q?67pR5FOXryVXNn0QSKodDlkJ7K9WxGeaS5E/5uNO74HptS2tLZAZZF8YOyW/?= =?us-ascii?Q?fuh5gxhWG2agENPjnpxWK7dCelzBu1V8MC3jW8aOHgDmfi9C8aoz9/1+D9zW?= =?us-ascii?Q?e/IA9PZemZPXAJcIdMtm1gMyvWTs1uy6IpsUuFSae2ZrztA2wP41Il44c6DP?= =?us-ascii?Q?AB0CXZOQLzw7Y1Pj60ooEZL1zJPXtdoriqPlhS9UZ5WWFtzV9qHY01l1WAUz?= =?us-ascii?Q?6MyeoGcEWhp9CoTbS8x7nRDmJelzkJQjKURM1jjUXS2ZymWzF3jLsK1ZF6Bd?= =?us-ascii?Q?nMshGTg5wIIhwfgqgv6eIiP6P14W75wD3pHCjrEPlG3xsLFhXHLk6KLV5rK5?= =?us-ascii?Q?j4EXDAE6QgeZEUdwwGSusyGMrVZtWcXFrlcBp+dXI6vLIa4Eusdmxjd5xiRZ?= =?us-ascii?Q?AHveBPHMVNCxM/+jAQ1l+CA60/+wRYz4u6EXsO7f6ZoRChz1xwBVhGxksYht?= =?us-ascii?Q?E+SjyJW41aFfSdol0oI7R9pM2VXVV/8f4bJyuFAMtKUzxsaRvQS76edpPHsP?= =?us-ascii?Q?TBP7SUmULiW92ThCmWDAt5U3Xufeh6PnK1rtjN/UNwcwCSf5D4zrqsMIB98h?= =?us-ascii?Q?PGG5k0NK/AOJZ0qXCdNnbARBUIv1rXLEmBCmfrFtulUYBG4isyff94zNC0oG?= =?us-ascii?Q?SHIRVhO3gsG75HorRTi83X8LfaAnMJoBdtLEUX74N9Efc79lk33cyZDRP4NR?= =?us-ascii?Q?2pJzgzR0s/w99uzqIEGyxF++uNEcfy5EQXq7/HUin1adKp4gpcbs5/b18ULz?= =?us-ascii?Q?DLr47O1D3u2RmEAbPXrdMgRBmqNRb0hH6KVkinX/JTMI7E/BksCwuh2N8wbB?= =?us-ascii?Q?md+18kSZZTqMyNLKJbYGWOKNZFnphk+xmWPRoYv/916tOO3Ju1K5+ZQlvzge?= =?us-ascii?Q?frSYPYFsIl1Hs1gK3UX1FNfPJALDpy10uiq+SgNuhKd8Mo/hlbVzdwV0pVch?= =?us-ascii?Q?Mu6cABgZiKe8ZBIR28Va6h+01tCnwxbvH3ocDdyG4iTgkSwuBgcno7exkkjk?= =?us-ascii?Q?97yyk/eUd4OMqqmBzQLlJw6CZjK0oz1QBlO/vez0jKf5sCW0D5/cdhvzr3eL?= =?us-ascii?Q?1IzLVTcXmg7xC8TfL6kYucUvp4hysMEANiWUZ7iOatDCibKlzJPwNcoozAYl?= =?us-ascii?Q?QRMxnB7zfg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 85e3a821-c21a-4299-57cc-08dee37db24f X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:33.6427 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RRm+BhS9lWnRgHHmfXI3vKjYaK45I2CJ2eTG8hFH2fjRZLPgct4kUHMYlooGOoNuLJ28M8O1VCtKPFEvaoAF7w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7485 Content-Type: text/plain; charset="utf-8" Node-scoped MBA on MPAM needs a way to distinguish native memory-side controls from legacy L3-shaped MB emulation. Track the selected emulate mode on rdt_resource and expose it as info//resource_schemata/mode ("native" or "legacy") when the architecture enables emulation. The mode file is only created when rdt_resource::mode is non-zero (RESCTRL_CTRL_LEGACY or RESCTRL_CTRL_NATIVE). It defaults to RESCTRL_CTRL_MODE_NONE, so resources whose architecture does not support control emulation get no mode file and are unaffected. Architecture backends that support emulation set the initial mode when they create their controls; on MPAM this is wired up together with the node-scoped MB_NODE control in a later patch, so this commit only adds the (dormant) generic mechanism. The mode file is added read-only here: switching the mode at runtime requires rebuilding the resource_schemata layout to match the new mode, so the writable interface is added together with that rebuild logic in a later patch. Keeping the file read-only until then avoids exposing a writable-but-no-op interface. Store rdt_resource_final in the resource_schemata directory priv so the mode file can resolve the backing resource without dereferencing NULL. Signed-off-by: Fenghua Yu --- fs/resctrl/rdtgroup.c | 77 ++++++++++++++++++++++++++++++++++++++++- include/linux/resctrl.h | 17 +++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index 2abb7fda6091..6b1f24c6a1f2 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -2696,6 +2696,74 @@ static unsigned long fflags_from_resource(struct rdt= _resource *r) return WARN_ON_ONCE(1); } =20 +static int resctrl_ctrl_mb_mode_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v) +{ + struct rdt_resource_final *f =3D rdt_kn_parent_priv(of->kn); + struct rdt_resource *r =3D f->res; + + guard(mutex)(&rdtgroup_mutex); + + switch (r->mode) { + case RESCTRL_CTRL_LEGACY: + seq_puts(seq, "[legacy] native\n"); + break; + case RESCTRL_CTRL_NATIVE: + seq_puts(seq, "legacy [native]\n"); + break; + default: + WARN_ONCE(1, "%s: unexpected MB control mode %d\n", + f->name, r->mode); + seq_puts(seq, "legacy native\n"); + break; + } + + return 0; +} + +static struct rftype resctrl_ctrl_mb_files[] =3D { + { + .name =3D "mode", + .mode =3D 0444, + .kf_ops =3D &rdtgroup_kf_single_ops, + .seq_show =3D resctrl_ctrl_mb_mode_show, + /* + * Directory-level file, not per-control: fflags is only a + * presence flag here, not the BIT(ctrl->type) type filter used + * by resctrl_add_ctrl_files(). + */ + .fflags =3D 1, + } +}; + +static int resctrl_ctrl_add_files(struct kernfs_node *kn) +{ + struct rftype *rfts, *rft; + int ret, len; + + rfts =3D resctrl_ctrl_mb_files; + len =3D ARRAY_SIZE(resctrl_ctrl_mb_files); + + lockdep_assert_held(&rdtgroup_mutex); + + for (rft =3D rfts; rft < rfts + len; rft++) { + if (rft->fflags) { + ret =3D rdtgroup_add_file(kn, rft); + if (ret) + goto error; + } + } + + return 0; +error: + pr_warn("Failed to add %s, err=3D%d\n", rft->name, ret); + while (--rft >=3D rfts) { + if (rft->fflags) + kernfs_remove_by_name(kn, rft->name); + } + return ret; +} + /* * No need to cleanup on exit - caller calls the recursive kernfs_remove() * on failure. @@ -2704,11 +2772,12 @@ static int resctrl_mkdir_schemata_dir(struct kernfs= _node *kn, struct rdt_resource_final *f) { struct kernfs_node *kn_subdir, *kn_ctrl; + struct rdt_resource *r =3D f->res; struct resctrl_ctrl *ctrl; char ctrl_full_name[20]; int ret; =20 - kn_subdir =3D kernfs_create_dir(kn, "resource_schemata", kn->mode, NULL); + kn_subdir =3D kernfs_create_dir(kn, "resource_schemata", kn->mode, f); if (IS_ERR(kn_subdir)) return PTR_ERR(kn_subdir); =20 @@ -2716,6 +2785,12 @@ static int resctrl_mkdir_schemata_dir(struct kernfs_= node *kn, if (ret) return ret; =20 + if (r->mode) { + ret =3D resctrl_ctrl_add_files(kn_subdir); + if (ret) + return ret; + } + for_each_resource_ctrl(ctrl, f->res) { ret =3D snprintf(ctrl_full_name, sizeof(ctrl_full_name), "%s%s%s", f->name, resctrl_ctrl_is_default(ctrl) ? "" : "_", diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index 72fb7256270e..4fc41e269d0b 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -257,6 +257,16 @@ enum resctrl_ctrl_unit { RESCTRL_CTRL_UNIT_GBPS, }; =20 +enum resctrl_ctrl_mode { + /* + * Default (zero) value: the resource does not support control + * emulation, so no resource_schemata/mode file is created for it. + */ + RESCTRL_CTRL_MODE_NONE =3D 0, + RESCTRL_CTRL_LEGACY, + RESCTRL_CTRL_NATIVE, +}; + /** * struct resctrl_membw - Memory bandwidth allocation related data * @min_bw: Minimum memory bandwidth percentage user can request @@ -399,6 +409,12 @@ struct resctrl_ctrl { * different memory bandwidths * @cache_io_alloc_capable:True if portion of the cache can be configured * for I/O traffic. + * @mode: Control emulation mode for this resource. + * RESCTRL_CTRL_MODE_NONE if the resource does not support + * emulation. "legacy": keep the legacy MB control, + * emulating it with a native control when it has no MBW + * hardware of its own. "native": expose native controls + * directly with no emulation. * @controls: List of controls of an alloc_capable resource */ struct rdt_resource { @@ -413,6 +429,7 @@ struct rdt_resource { bool bw_delay_linear; enum membw_throttle_mode bw_throttle_mode; bool cache_io_alloc_capable; + enum resctrl_ctrl_mode mode; struct list_head controls; }; =20 --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012026.outbound.protection.outlook.com [40.93.195.26]) (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 A75223BF699 for ; Thu, 16 Jul 2026 21:03:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235837; cv=fail; b=j/HqAELd3dHtVaAwhItYDBxgygwZXvYrm/Ux8iYVu/3ktUPzX8STIi1GCFC+BLt8q8s1KK408EFgZ9nLKp1kWmSgxfnZltzSGgEGylJ3EdIJtCR9ZjzmmOzojidtMYqgVYKcs1HvewWdABsEtWaYGwMy0cn53nPOrJAja6Vf7go= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235837; c=relaxed/simple; bh=lPr6nU1AMB3n0YvsvGdeN0tx0VL6hMqur4q64lEPCZw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=jpqk0wSUNKkrkJ8VLG8BtSL3FkFLQuaR8vDl/FAvDm8yO1bqYIC6+Cd09EKxYxol7MkQvJ6+4sq1OHQyhfW2+uZk5N2xYtv2Ra/5fXXajHAVJvLiaDN/JT5mBO9CbhqDtGpKFdNtLvlh++wzxg3t901xRYURW+JVWkS68DzwZ6k= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=Sb32vLEQ; arc=fail smtp.client-ip=40.93.195.26 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="Sb32vLEQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AKpT/ePsPjz2lT8v+qduTgFn4oHHHDoRVRk8A5ZjEkhcXHfAUgJMb13kfW5Ta0qKqewe1S+VvJGYra+a0cWBm0939Od4i+KPiWDfq71Y9HxSzyHxXmjMNmIrQbH9IiKePHY59ByF5Ls1zzJwi9lBW9fb/fwkrZsjhC6vAn0tr+htd3+SSWpNdTJnvNcP5f+hPfszjll8zATrYJtw62NYDvKjQSEz/HRFEUSluP1mxM5icK/vvkCyCFR+yy2QA2wkt7dn/BRVpWNA7poUJ0hxzJX42sE8PI/vvxP/wvjIRAt5xS/cahx1gR5YgCDL9WJ5GumPmEqLNeaBFbhjqWytbw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hBoVEZK1tAF557hq3+NYQ5YymsrdRFixE8MyNhgKL+c=; b=Y7JsGurwJwqfJwkNrKgXsKKZQ6neuIS8kYIzOTqsg8lDMAW+uaIjtMaQA575zz0uOYndywAOSGHEohhqfKbSpBmc5u1nJ12PNU3OXvbbyRNzBiR4sg0A+/FKWMKKzv8FcpLh7ujKSsbaIkySxy6Jc3VhJuIuUm1dIkMWwRFfJotfUSiM/Hej8NOKRvC5HGHKV8DNMmowKvE74Qf/RjQP8x0KU+O1+v3Bc6OVFFai6x/Ey8ttmnnOHPnSN7J8jf9E30mxkVYoNdQ7JLYZ6m90VlC9Xvo0rGiImUlaG4zqwfMbUPFdUchIgn5nYY2ChK5qVABUiRL6juJTM2tTRBPo1A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hBoVEZK1tAF557hq3+NYQ5YymsrdRFixE8MyNhgKL+c=; b=Sb32vLEQ+yZNGz3danLZhwbe3vW05wDGZeBlvo8YqY/RpJ0F9colmii7eJH4SI/6Jozxtt5z4rLIftzb6V3p+BLDqByRiwjWXLNorAY0JMEhr6kYfKKyD34XmUhIYqSIoihqLfTl2Y0Mf+WIzXhS4T4ncl/WY2pviCgehzPqYoXGxKUMwKaj6neXkyCDZR0EDKDD4aSDRuSWt50OeF2N1TP0uCieXccHsqwYNZ64xE3rem3UCkSsabH6QMdGvQxkizC1Ii4+DDK8cnHvQXOSnidX0iIRze8UIxMwPWRoVcDgp/mzZO5IC7QgpkMe7UDza/RmAfC9xgXsZsb/UPEVAA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by PH0PR12MB7485.namprd12.prod.outlook.com (2603:10b6:510:1e9::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:35 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:35 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 04/23] resctrl: Expose per-control status in resource_schemata Date: Thu, 16 Jul 2026 14:02:54 -0700 Message-ID: <20260716210329.2914625-4-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0070.namprd03.prod.outlook.com (2603:10b6:a03:331::15) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|PH0PR12MB7485:EE_ X-MS-Office365-Filtering-Correlation-Id: 04bb160f-8604-475f-d665-08dee37db326 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|921020|22082099003|18002099003|56012099006|11063799006|10067099003|3023799007|6133799003; X-Microsoft-Antispam-Message-Info: MZB5+GWNkuYFgNYEO9KIxFwpVXKrH51KcOzg8C4cVv/9JIEDcTDxROwzYOyJoBHvHKutw9cA2Az6XHJCC/1/uhZwN8iDpBx1swNU0G2RE+bHm39vdaKU8Qd7p37gHYkQt8/puXQ1N54Q1zBXXPU3sHAkLZ2LJ71uPH4fFqfN4ay5RZIKjoNTx73B53G6nXnC9h8NDCE18JTT7ijDhg4DPt+tmVAQAU3d2zGmw4FVbDvcx332z+a8T1n9eslIkcODIISQxzH7REYwxf/x74MmSGP01JKt0OEzUdGVk4igQZWNOgNdCibQhuWE1cic0oT926/GzoGqiV5WA6Xq9cUS2Zub8/2ihdj44KPPnlBS8nVtq+w05PVkYuoVxXEYT3hFMMjLUew46Yfbb5Q2uFwfj9x3EfpbxS5DwwAXrMi0f1r9SZMFeAoPdeUPtygb4A3qGnA4uZZ35QMcqBAAsgMTW660HEzmoLHs4ktEgNycR+LEexntYSXtwMQM0c1gPzXDOKA5w0yI72xFCdjtog3nuzxKYcJfihSQCPUrL4uHvhmZz9hCqQxWSwEYZr137+CHvcArzHTDraMpdqV45ogd/miE4nDa6UaUfjFjScz9LVBQtfZEwzctxxhd328qLcYlZfNqe2LZY/5hzIC8tdLDGQSBdvUFQgkPa+FNvAM9NOibq5ORU/BMfcNz1Wbn3qWS+3Tm2mb4o7T9zghiNF0M1g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(921020)(22082099003)(18002099003)(56012099006)(11063799006)(10067099003)(3023799007)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sqbN74YA32haP2ug9EZpu671ogna0fTY4Fv+mXpRSTw4S2yK1pIqUMLclEsk?= =?us-ascii?Q?vX4EnK7AdD4P3lKj/M8+GhPGMQnO7RgyYpyfl75YiuJrUX4ehWq2pws2vx/q?= =?us-ascii?Q?bgnDZXjFilllnkFOozHY73GfYYiIFXryGvyJscPP4uRJRWfQtjubVVjfefXi?= =?us-ascii?Q?OyzHexZocdM/ZekXeX7ZF3PY/FO/eRNdrhuZwybjGJl+d30WETeI+Y/fwV+s?= =?us-ascii?Q?rxgz3RvS9IqrHxcoWLQmPQyz8q9EJ51DYk1uTQDZsl1DjlZhgwor7XxIsCwi?= =?us-ascii?Q?qHkF2SRwA9Jfk007FMVUX0IQizElaMvjTSHQzd8aNjihsYxxCtySKIUxL6CP?= =?us-ascii?Q?FbKmgDpTCIt2ccWhz6T2rhXDYwa6aGh03GwaowuADTmgMq4b4OCmRHjrcMBy?= =?us-ascii?Q?AG0IPS3P3DBgTRyeS2CPEa8hGhxACSZvAAMFU6yG8T7/2eBUdD2dm7m5IzFo?= =?us-ascii?Q?PFn2KmkiH/y2eWGdSNgeQTRfbY7aXDZW4bd2GlZE/fWNmuUPL/g57lXTlG8D?= =?us-ascii?Q?mE1xbU8VV85uQaHpoEgqkhU2SMkDYejBT8/AItA1Aa5fP++tfT8W9qGJ7rp3?= =?us-ascii?Q?KyYV3T+DTLARNMPUoAII99F27FjA/w1go3+xaEqldGZCLoQMhQyShecxbaui?= =?us-ascii?Q?UoQjmo/DzhFLVh92LQiOj0Lj6Dr+ivYXtXnkULmX7lVupfheFJFN5r9w+nKv?= =?us-ascii?Q?xL8S9DvwDyMDJ996Nyoco8ZypBIrRpPuBk6usjEFBHGQ5V+o0jQi9mCqa5Zg?= =?us-ascii?Q?ssImPgxtrIwu9wEhVEsNu1lvtY+et5rJyAo2AfbeTwOPdq0cF+Kg1Nrfgodo?= =?us-ascii?Q?CWyNTWmLvxX6QN/6Bt/Eksu4en0J2ElXlLBTmlU+aOTFdnqTsaLm1e+Il5sR?= =?us-ascii?Q?nNqS/H2kJHzcUUIZCo5x5/Tx+OIo5lzod5ir0ZSmWd4QlJdPJ4Ch/BJr4uPr?= =?us-ascii?Q?kh60kQgZMbWFVIgJhYNj2A0PuWmImvf/4/zIQV7PpzQEcDMlwhlGj9BQhZRy?= =?us-ascii?Q?etVVKN7GAiFjcnzD2xv2y4phcBD4FYRmqXqDXTylmpu1TD4Xw5xcQP7qlhwo?= =?us-ascii?Q?iQm6CNC6q60mB6uY4avgQqWapgc1xZBXxXPmpj+0XVclBNvOIcH55fp8S116?= =?us-ascii?Q?b3U5BsmS4vddZlLEqJGZvR+zploEAWbHXG71feq50LeZBSzJqjPgqjDtSTHE?= =?us-ascii?Q?F2YMljVk8g9n82D/dooJ522by5gkWIjbYXWoRPYaCKWaGyRrCUfQRT5e37wx?= =?us-ascii?Q?KZCV/JFCd9ZH21Fu9xtrWTjBdivw7mNN/VONI+Tl3w4XAhMCpxzzi0Z/mszP?= =?us-ascii?Q?djiD4Afy0YLLnFidROxfs+yih/ba8A947SSoEGPS24geXFIRm9QhMl8cUH+6?= =?us-ascii?Q?zN26O/tQy/OL9Bndn22V0f3JMTIWn9aFbITOv3afYZkNk+Tjr/9zUqSG5DfK?= =?us-ascii?Q?dZu7j6eKt8a/mZb4un2CzVMAOQf0NUxYM9zeHZkSVwB9fK4OAV5sKBEaoNpp?= =?us-ascii?Q?+Qz8Zpa8gPRZMeRejdW0+PhWS33aGuTncA0VdBW1JH7r/iWpeWxfShCZu2L4?= =?us-ascii?Q?fWGICYCCiDtFyk/fYDilwxAQGQkFinC/7rsiCUcw2bxrsGxzfRpTzat+Jaau?= =?us-ascii?Q?egW/EWsdFIAGkHlTA+/uRMQsTKM+4FTwtWklDUjWMkVNavm6jw2rcUhs29QT?= =?us-ascii?Q?UrQ3VYZ/Wgmzgigw5n4jtDW7FdPSadfg+lPubgegss/LsBdHWe8t3Ma2XzJq?= =?us-ascii?Q?2VKLQ7QKEQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 04bb160f-8604-475f-d665-08dee37db326 X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:35.0417 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iH/jo1ampseQzrrOBoYZBwe9zN8wi1AwOKYPanHxFkHZNkqJdAMe/JeeEf6S6OY9a3Aye1ed4lAw6DB9c/ESJA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7485 Content-Type: text/plain; charset="utf-8" Emulated MB controls can be individually present or absent depending on what the underlying MSC advertises, but user space has no way to tell which controls under resource_schemata are actually backed by hardware. Track this per control and expose it as a read-only "status" file for scalar controls, reporting "enabled" or "disabled". The state is stored as resctrl_membw::no_mbw_hw, which defaults to false so every control is reported "enabled" (hardware-backed) unless an architecture explicitly marks it as lacking MBW hardware of its own. This keeps the common case correct on all architectures with no per-arch initialization code. This commit only adds the generic field, the "status" file, and the default (hardware-backed) reporting. No architecture writes no_mbw_hw yet, so every control reports "enabled" until a backend sets it. On MPAM the field is assigned for the emulated, hardware-less MB control in a later patch that adds the node-scoped MB_NODE control. Signed-off-by: Fenghua Yu --- fs/resctrl/rdtgroup.c | 17 +++++++++++++++++ include/linux/resctrl.h | 4 ++++ 2 files changed, 21 insertions(+) diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index 6b1f24c6a1f2..a3aad9b1ff6e 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -2318,6 +2318,16 @@ static int resctrl_ctrl_unit_show(struct kernfs_open= _file *of, return 0; } =20 +static int resctrl_ctrl_status_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v) +{ + struct resctrl_ctrl *ctrl =3D rdt_kn_parent_priv(of->kn); + + seq_printf(seq, "%s\n", ctrl->membw.no_mbw_hw ? "disabled" : "enabled"); + + return 0; +} + static struct rftype ctrl_files[] =3D { { .name =3D "scope", @@ -2375,6 +2385,13 @@ static struct rftype ctrl_files[] =3D { .seq_show =3D resctrl_ctrl_unit_show, .fflags =3D BIT(RESCTRL_CTRL_SCALAR), }, + { + .name =3D "status", + .mode =3D 0444, + .kf_ops =3D &rdtgroup_kf_single_ops, + .seq_show =3D resctrl_ctrl_status_show, + .fflags =3D BIT(RESCTRL_CTRL_SCALAR), + }, }; =20 static int resctrl_add_ctrl_files(struct kernfs_node *kn, struct resctrl_c= trl *ctrl) diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index 4fc41e269d0b..5d8ea12ae16b 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -289,6 +289,9 @@ enum resctrl_ctrl_mode { * "all" for a proportional schema. Base unit of an * absolute control, for example "GBps". * @mba_sc: True if MBA software controller(mba_sc) is enabled + * @no_mbw_hw: True if the control has no MBW (mbw_max) hardware of its + * own. Defaults to false (hardware-backed); architectures + * set this for emulated controls that lack hardware. * * With a control value "C" written to the schemata file, min_bw <=3D C <= =3D max_bw, * the amount of resource allocated by this control is: @@ -303,6 +306,7 @@ struct resctrl_membw { u32 scale; enum resctrl_ctrl_unit unit; bool mba_sc; + bool no_mbw_hw; }; =20 enum resctrl_scope { --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012026.outbound.protection.outlook.com [40.93.195.26]) (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 0D3083BFAD1 for ; Thu, 16 Jul 2026 21:03:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.26 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235842; cv=fail; b=qtMBhcFrIr+aMIuwWitRWT5ocV1jCi7RC7hY5modL3BKPeKcPLb/NHautaMMc51jz1xLkV/FfNwxFLBhUirbKcwUM/2gsCLL1gZUTo0tJv5os54dyi38u3QYkXLVJixsGSWfkXZviyb+A6ETYf1vaQ0C83sHKp+vATXdi2wPmmw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235842; c=relaxed/simple; bh=hOx470su+qzPbFAcPudB2wiOVgdnxjUk6NdnwGqTeGI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cOJaIaX3Ft2sCjFnSO3Lh7A/Ga4IWwVg0dX13uawLPxOw+bBYhr3bLFJctrlr/ntDmjQk4BGAlIgnMB5XK7m5HwWOid7yHWzqI+Xol89O4qWfFIUYKeqSy8ni/xR19Fj97yQSfSc9Z9a0H8GORDcRLPEwMTYE9KaX1XIue3W+PM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=J41R0Q9C; arc=fail smtp.client-ip=40.93.195.26 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="J41R0Q9C" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=o+hvWWcZ8OnSq+6EUmlviCjJEFaicNLQ0Waabq3NVF9VNDEylHHR7mLbwyCQnmycETkHAj5zb029gzcf4pNeJzkwngX1dF7J14w4hPMbZyXleHf4e2eI+43hVzLovD7N9CkpzK4o/v4Q+6M6xnXpvnVLInI0IRhdSt+xoLOdtH4Sq+L+e51Ba5pb5BRLwTX+31JolpJORHd5pAyuTtHI+tEMjzSM42hPulUhMJyAO0Fdznv6Vl9TeGhRQO+8cHC6V3ghaGbLqT9HXB+s8KhYiey5bjUJY6x+IfubLStjXvkCwLJQqgU92qLVp9uH2nGioSy07jvMH/xheZ1zjkBJgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1sSUlg5zoDJCca+wr6NHpayGmCTObicVg/Sxg26I8Xg=; b=BwSLIILZkc4Koy/KecSM/sTNm/zW4Lmsiq1zBMXjF4BhGUzpXtEX+z5jAXN5ndRoHztmIhPtoN0w8jQ6M4zrMsCutU3PppRJzhikfd7emuhQTAOjDbcoXNRi0fOGowcIjXM9pCk8mu9g1Q0yhSwHznuPSJaCvwzPw/IKKHFr4nOlLgcnS67zBfkoDq3lmTZdINSScrGcRLWDHHG5cFxmoLWhwuLid+wJXzI8tfD8il3zNvHp5z9HRTSO3OIXivTmN/bFiNN5qmqzRn5mTAQEOromcTTp24Ue5Zz29/NsGfYdvnqz+QT/Ic3uwgXNLyFb6T6grnE9bNzyKhcVDaeGDg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1sSUlg5zoDJCca+wr6NHpayGmCTObicVg/Sxg26I8Xg=; b=J41R0Q9CZ3E2On/PaKRJMjH9Oz6ZdxmjYBKScW4v3s6h3f+1OgRziKZgRpn69M1Ttu1mzbCXM/mzCing27+FuXlaFvXo0tHzllRce4jot/72hWcdHxOSKuFR/uHZg87hVxsGnM8/AdAwpbK5SFFuMajs44/6IbtfTHXw9KWVMEWthQDCgrHLY0pAtbx4Rez6QAKele4swl8C/KTqLxKouc1G6wh7imJbPiMNfGbLH7ZO3ITXCjSBzgknd8GquCXtjJn5ECTvZqQcAUFqPyxGdDsBvAm2ZuCAH7hczpO/CLoQxR0rAgOpXL0vIQxCUe+EU3h2UwTwySPc/bO6ucAgMA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by PH0PR12MB7485.namprd12.prod.outlook.com (2603:10b6:510:1e9::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:36 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:36 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 05/23] resctrl: Add nested resource_schemata support for emulated controls Date: Thu, 16 Jul 2026 14:02:55 -0700 Message-ID: <20260716210329.2914625-5-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0103.namprd13.prod.outlook.com (2603:10b6:a03:2c5::18) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|PH0PR12MB7485:EE_ X-MS-Office365-Filtering-Correlation-Id: fc30905c-27d3-418e-a9c5-08dee37db3ea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|7416014|376014|1800799024|921020|22082099003|18002099003|56012099006|11063799006|10067099003|3023799007|6133799003; X-Microsoft-Antispam-Message-Info: zbIyUWXOKA2J61VoeY2J5SBEh61frk8LgX2Cynq6GzGBrsgw1R+kkdnrxAjQuN2W0OQZPtK5/5kHuvY1HoT+M7gt6JPn/gBUzBk6c2p/PphI2a5e9cvDqXJ6w3MjwClHX+CYhtx+hEq8k3b8KC9YNenR3tAgZPDUBhMYFy1osebScbb64mG91zeTRLeH9rKMj6iyrEO+gZh1WsmynEVO0OXglEAPkox3fTDdYsQK+ZzHvlAE01O52DosYxIdHyT/c+be1uE8QtVzOGtQHkk0BmJsi57ERH+oErQ2xxhuK+EPXMgKRTkcMiDHECFNFxNHUptPwd/t4KBZp5ADeqD54yLwR63jlDz5Yxx4G3HaamC3S2y9oLGySLHJ7jZ8T6zlY9fnofMmp1K8gQbqwX2/i22dIuT7/N+n6YfYqbSC/cC6y2sHvPLS1si9kz/5eGRe/fBbfOOijYlWZiJKlyAvV/KixCP+1cUl7u3f9/e9ut0dspugrIaMqfrg1ZeLeA5yuoyh0qvBb2sCQ6rJQvS/xE5ifcZcVY5O3JGpBQiZMlLK9vvgo++BsA32XTkkU3B4FbXne+gvlJKdu6+alkzm1K+u3X6InEd/14BDMi325Ho7QgTc3YClKdkG15JyOX1ERJ1E0RPUrjSA04DnGV7XxVZL53eSZZnmT0wao96rvTOJUSng6NRj58TbwPTMrVvrtE0BYECFerYSKnhq8J3k2Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(7416014)(376014)(1800799024)(921020)(22082099003)(18002099003)(56012099006)(11063799006)(10067099003)(3023799007)(6133799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GXLaCbkpCRApx+3+MMyIpt6uF00p5EGxAft6C6+uQy2srubBB4PpE6VdnWSS?= =?us-ascii?Q?tzNCqnpNijbaDLzco7BbwuibGNv/lbdaN6cyYdG3gdy+eQVVkUjXZHmzM8Ob?= =?us-ascii?Q?VxC6/PS6Q8udZRZIHKZ1aq5K4iThX3PhobBKT8/QdupZNNmoHJkKwD0iiGKO?= =?us-ascii?Q?TkQzTLNUPN03YyNtDXSbh3SkBYOS4SC03s/hsRPXoeRLd8n+zd1fSx0Ec37j?= =?us-ascii?Q?DV4IbrgUlrhz5acAfeMFQZBN5Q4OohrQUZ2We+E61fmxO8adrFpws3hUFGU1?= =?us-ascii?Q?QDZgirTuuE7TeGzh7V923yJAsc/8wB9ioXi3Ey0XBdSYOGo3s7jIswBTbQp3?= =?us-ascii?Q?PFSk0nGCHUtksLny0OiKjpIPHnnflTwMk7/JjkJF7pLaCuo8HoRWengj2cTj?= =?us-ascii?Q?C3NIsKsMdrE6NCQ6i2C4F8iuFz7Nulx8bEJ0YCDT6ZAGPzHih649yGkAQp4q?= =?us-ascii?Q?sS8SII+xJkt2gFbyZjrxl9DImrPCIW/oseK8mQ1YTMFp9bma/wioXfKlDMa7?= =?us-ascii?Q?GBdbcxPPwDh8ELCuXVorrLI6t+ReSdF65n/LrX9ZMUUOwPMiDCRCSw4xYZRB?= =?us-ascii?Q?CUn0b872JwKf3cY9mmMzcSiHVChmCuUAzcgSNBnZrtaHraxSupqEBM/mPQXP?= =?us-ascii?Q?JPqZp2WNjkV5mts8zsaOeSGzXNlJ5RlhDwgzR6P605ECfjcLqvbVpfBwhM9l?= =?us-ascii?Q?/CHjHS7xwT+AHbyJctoZ4NtPB7VoIdCMsSG1b+1FtrlvPI83RYJfUB7iXCj6?= =?us-ascii?Q?rSr0jzfQ3DLYSHP2o74xHlJOXDkS/dMNmQ5F9hXCT5xxPWV84sJN6tOOEbNI?= =?us-ascii?Q?d6ovCeayWW6ABcluktpDcdgnAaVuAyo6qxiplZct6EYTPuKx8rmIwx1cSnrW?= =?us-ascii?Q?GkYkJW4SgPNzRkCaaLPD2FZ0IDcnr2T6ARCxfDGJUrJdaF65ZTCOgdTAZTP+?= =?us-ascii?Q?KeBb4K6VvqhEfa3gZ9/KnPs8APeJAZp4LZmDmI26UyomU3j9JVX1Ss6A4wXp?= =?us-ascii?Q?ALc4uQyKf9EJ0Dc7ih7rCB8RD1lcZ+oVfGeCmZ7stkWvAN1n25hNLIzwZRse?= =?us-ascii?Q?i7cgQKx+gM7xb65+aUq1eItrC8FpXDO9ZMxLhWr6scvRpiRJeDELN6C/S+MQ?= =?us-ascii?Q?ZDMn1ZY/ERuYn+H1FpP0QpM1iXI6Gp4fgxu1We9UurvIEnb98cj0LO1LcehL?= =?us-ascii?Q?255zDyOTGqQ5esUMmHW1dY5xgy0p2bKOWw0daa43jaAhsLasRD/ljtgWwpGF?= =?us-ascii?Q?rVY+P1EgzE/U81hsfMfeNQVOEIXaWrt0Xg64obDwS4Ug7iUh4eMbmom7eUsm?= =?us-ascii?Q?jXbr1WbpsyM8eH48vHN/fYV0m09gxpbhhIHpqIWqNZR7KVPP6g8CUaO1soIw?= =?us-ascii?Q?iftfzBUbot8mg26DF7ICaORtIRryilANf774K2j2Hrh5v3Z3Y+1QLA3NC0Vm?= =?us-ascii?Q?LYDYjvofsSkNFOjFtmRmVvub+U1mlx7W5bBiyoVygavKvFiEOZ5LqBBO9WOn?= =?us-ascii?Q?QCJ/w19C2aLwx23159ZveeMhuc/xcPiikB1e1t5XvreerXgQxzZHqpvqzMbq?= =?us-ascii?Q?G/kybkXR9Qo8qDTbHyX2d2PK4FiclQhVESGEJLtZIOUjEADDoKWdVphM8EyQ?= =?us-ascii?Q?3m6C6o+SmKm+WY391Q0m3a+c18ODGWLt8OLMn357jJyHdyFfwm4TUHRevIYb?= =?us-ascii?Q?8frTyQa6CBueQoyrI4uUaPvWuhXEByLOdhwH5HH9tGf1W0vHH3hsGOpSucYQ?= =?us-ascii?Q?pLDwoyCq1Q=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc30905c-27d3-418e-a9c5-08dee37db3ea X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:36.3906 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /ghVzkNUkEpIvlMR0PO2yq2qz9Pnul6OjhZaHYJzohwujVETKGOXvAh/g4pVYYyQRSF600SjFO9GGacNIO9xig== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB7485 Content-Type: text/plain; charset="utf-8" Some architectures expose an alternate, hardware-native control that emulates a legacy control (for example a node-scoped bandwidth control emulating the L3-shaped MB control). Represent this relationship with a new resctrl_ctrl::emulated_by pointer stored on the emulated (default) control, pointing at the control that emulates it, and add a RESCTRL_CTRL_NAME_NODE control name for the node-scoped variant. Build the resource_schemata tree accordingly: create the default control directory first, then nest each emulating control beneath the default control it emulates, while non-emulated controls remain directly under resource_schemata. Creating the default directory up front makes the layout independent of the order controls appear in the list. Architecture backends set emulated_by during control init; until then the nesting branch is never taken and all controls remain directly under resource_schemata. Factor the per-control directory creation into resctrl_ctrl_create_subdir() and fix its error and ownership handling so the newly created directory (not its parent) is validated and gets its uid/gid applied. Signed-off-by: Fenghua Yu --- arch/x86/kernel/cpu/resctrl/core.c | 2 + fs/resctrl/ctrlmondata.c | 1 + fs/resctrl/rdtgroup.c | 67 ++++++++++++++++++++++++------ include/linux/resctrl.h | 7 +++- 4 files changed, 63 insertions(+), 14 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resct= rl/core.c index 07c6ebb7fc43..5575a16caeab 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -214,6 +214,8 @@ static __init bool __temporary_multiple_mba_intel_contr= ols(struct rdt_resource * case RESCTRL_CTRL_NAME_MAX: hw_ctrl->msr_update =3D update_temporary_max; break; + default: + break; } =20 return true; diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c index d95ab8ad36e2..1f832a838115 100644 --- a/fs/resctrl/ctrlmondata.c +++ b/fs/resctrl/ctrlmondata.c @@ -304,6 +304,7 @@ static const char * const resctrl_ctrl_name[] =3D { [RESCTRL_CTRL_NAME_DEF] =3D "", [RESCTRL_CTRL_NAME_MIN] =3D "MIN", [RESCTRL_CTRL_NAME_MAX] =3D "MAX", + [RESCTRL_CTRL_NAME_NODE] =3D "NODE", }; =20 const char *resctrl_ctrl_name_str(enum resctrl_ctrl_name name) diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index a3aad9b1ff6e..3bec23728847 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -2781,6 +2781,26 @@ static int resctrl_ctrl_add_files(struct kernfs_node= *kn) return ret; } =20 +static int resctrl_ctrl_create_subdir(struct kernfs_node *kn_dir, + struct rdt_resource_final *f, + struct resctrl_ctrl *ctrl, struct kernfs_node **kn_ctrl) +{ + char ctrl_full_name[20]; + int ret; + + ret =3D snprintf(ctrl_full_name, sizeof(ctrl_full_name), "%s%s%s", + f->name, resctrl_ctrl_is_default(ctrl) ? "" : "_", + resctrl_ctrl_is_default(ctrl) ? "" : resctrl_ctrl_name_str(ctrl->= name)); + if (ret >=3D sizeof(ctrl_full_name)) + return -ENOSPC; + + *kn_ctrl =3D kernfs_create_dir(kn_dir, ctrl_full_name, kn_dir->mode, ctrl= ); + if (IS_ERR(*kn_ctrl)) + return PTR_ERR(*kn_ctrl); + + return rdtgroup_kn_set_ugid(*kn_ctrl); +} + /* * No need to cleanup on exit - caller calls the recursive kernfs_remove() * on failure. @@ -2788,10 +2808,9 @@ static int resctrl_ctrl_add_files(struct kernfs_node= *kn) static int resctrl_mkdir_schemata_dir(struct kernfs_node *kn, struct rdt_resource_final *f) { - struct kernfs_node *kn_subdir, *kn_ctrl; + struct kernfs_node *kn_subdir, *kn_ctrl, *kn_ctrl_def =3D NULL; + struct resctrl_ctrl *ctrl, *ctrl_def =3D NULL; struct rdt_resource *r =3D f->res; - struct resctrl_ctrl *ctrl; - char ctrl_full_name[20]; int ret; =20 kn_subdir =3D kernfs_create_dir(kn, "resource_schemata", kn->mode, f); @@ -2808,19 +2827,41 @@ static int resctrl_mkdir_schemata_dir(struct kernfs= _node *kn, return ret; } =20 + /* + * Create the default control sub-dir first. Emulated controls are + * nested underneath it and may be iterated before it, so it has to + * exist before the rest of the controls are created. + */ for_each_resource_ctrl(ctrl, f->res) { - ret =3D snprintf(ctrl_full_name, sizeof(ctrl_full_name), "%s%s%s", - f->name, resctrl_ctrl_is_default(ctrl) ? "" : "_", - resctrl_ctrl_is_default(ctrl) ? "" : resctrl_ctrl_name_str(ctrl-= >name)); - if (ret >=3D sizeof(ctrl_full_name)) - return -ENOSPC; + if (ctrl->name !=3D RESCTRL_CTRL_NAME_DEF) + continue; =20 - kn_ctrl =3D kernfs_create_dir(kn_subdir, ctrl_full_name, kn_subdir->mode, - ctrl); - if (IS_ERR(kn_ctrl)) - return PTR_ERR(kn_ctrl); + ret =3D resctrl_ctrl_create_subdir(kn_subdir, f, ctrl, &kn_ctrl_def); + if (ret) + return ret; + ret =3D resctrl_add_ctrl_files(kn_ctrl_def, ctrl); + if (ret) + return ret; + ctrl_def =3D ctrl; + break; + } =20 - ret =3D rdtgroup_kn_set_ugid(kn_ctrl); + for_each_resource_ctrl(ctrl, f->res) { + if (ctrl->name =3D=3D RESCTRL_CTRL_NAME_DEF) + continue; + + /* + * In legacy mode the emulating control is nested under the + * default control it emulates (the default control's + * emulated_by points at it). In native mode there is no + * emulation, so every control sits directly under + * resource_schemata. + */ + if (r->mode =3D=3D RESCTRL_CTRL_LEGACY && + ctrl_def && ctrl_def->emulated_by =3D=3D ctrl) + ret =3D resctrl_ctrl_create_subdir(kn_ctrl_def, f, ctrl, &kn_ctrl); + else + ret =3D resctrl_ctrl_create_subdir(kn_subdir, f, ctrl, &kn_ctrl); if (ret) return ret; =20 diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index 5d8ea12ae16b..06482e766087 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -362,12 +362,14 @@ struct resctrl_mon { * has the same name as the resource. * @RESCTRL_CTRL_NAME_MIN: "MIN" * @RESCTRL_CTRL_NAME_MAX: "MAX" + * @RESCTRL_CTRL_NAME_NODE: "NODE" */ enum resctrl_ctrl_name { RESCTRL_CTRL_NAME_DEF, RESCTRL_CTRL_NAME_MIN, RESCTRL_CTRL_NAME_MAX, - RESCTRL_CTRL_NAME_LAST =3D RESCTRL_CTRL_NAME_MAX + RESCTRL_CTRL_NAME_NODE, + RESCTRL_CTRL_NAME_LAST =3D RESCTRL_CTRL_NAME_NODE }; =20 /** @@ -383,6 +385,8 @@ enum resctrl_ctrl_name { * Specifically, "rdt_resource_final::name"_"resctrl_ctrl::name". * For example, with resource name "MB" and control name "MAX" the * schema entry will be "MB_MAX". + * @emulated_by: For an emulated control, points at the control that emula= tes + * it; NULL if this control is not emulated. * @cache: Cache allocation control properties. * @membw: Bandwidth control properties. */ @@ -392,6 +396,7 @@ struct resctrl_ctrl { struct list_head domains; enum resctrl_ctrl_type type; enum resctrl_ctrl_name name; + struct resctrl_ctrl *emulated_by; union { struct resctrl_cache cache; struct resctrl_membw membw; --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013006.outbound.protection.outlook.com [40.93.201.6]) (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 E9E9F3BED0C for ; Thu, 16 Jul 2026 21:03:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.6 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235830; cv=fail; b=h89TEP/Xf07mGjeEfYjgeyu45Y3Y5nvWxCdUhrCllMLuzYLHa3MYhWSsmufzdKUcu5mkHo7B5FoeYFvDXvsiSH1aH42Qk/Z+NQCZ2rJXnAIypZzYUDDKHNMyBh/wuPBYO8/k3YL4phEdl5KDzzhiRkf8GO4DomxPb2H3nQFNqJU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235830; c=relaxed/simple; bh=j1oTpIFmLmTF614bMbnAyxjWQw3t/ZZxi98rMRn9F+k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ucXBRIcWN1p6IXDL34Swxkyd+4N8Btl0qhBmlVW/dJECxvO3efpYrwDHVzjXSKb0U6HHOA5QDJcs84D97vLyrGYZBI9mQFZUYAPvcw1Y6A9rVt82fjtgTs6qA9VcmpJMAzM6yUr8BjvamtyRNK0ml0tZ6eLLsQO1AUxb3tHg/i8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=qnoC0+Bc; arc=fail smtp.client-ip=40.93.201.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="qnoC0+Bc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=liH/KQ3mnql+9NPhADZaVoxJk12HkhaTvYfpZsQpdOPlRU9Ax8kjDBAR+8giDt4T79bTTnwsijPCHQq5qIDWaO0b93U18rXHYnDRYM1Uv4+5ClpEvfY4cNaxd0AeW2cow/o63JHEVq8Lb/1pZieyqlgOK9vO3AWYOnCdKfUH4zeCl6J9FKXT+tjDugoYsHBGWD3UgDhv1Wr7hHhJVGaK3UUQ7aD/R6FTEpVBSxDbogkyfKo0jWcw4KpDLPDw964oWzN1xS3Y+GR6lZeiMlhDAxg8hJHFz0eS1zo3FMt6JjfCqzcNxb7SfSGMui95B00prfUw6W5Dc51FryHVAH/aWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mt6w3nNPt5eTEjxALSsmFV2SIS6f1GIhUdZmSb1EESA=; b=fEcLkNrks2DhA5z/toSLnQMxJRWiW321Cna1+lBEepbNmJ0fp0N+/ChV3kV2RrtpVvVKRV8VElMFgGENSSVy8x69eWpXWE8VVT6amU1wDaCYRhiVXMTQNDuO5b26ik/QEjKmY5ejxepULi6LLw+L6tb1VElHzLlcUnpyJ2UNW626ZdV/koOfAoBsxIQGJtGZpW4u5AvtLL8/HH+NScVc4/dy2+IY8qxQw1h8FkinS9Ile6K3dDPgqMzR2gtuwOI/dkdnvUbLAHPzxc1RbWdpKHF7pjp5FX9axnGOt1ZlDWL3PhGVs6CQGfGz19xEsD6pstHM1acjOKX8zXW3XOayag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mt6w3nNPt5eTEjxALSsmFV2SIS6f1GIhUdZmSb1EESA=; b=qnoC0+BcPvTPAo9r2SqtnkYEOfYA5aFSVr66iOIyCk+tE/IvLSYLbo1Aj3Rsbbnj8ZNOo11b4u6Rcp4anT5QoIkUgIRg+4AXzCPBE0T20CsgoDffkthku/xKeTD50VyniKbjf4ov9IHW0LjWYR01zL5Tn79E24NO3Tp3GZLGD6TvN/NIuUOLVNvK17Ew5+LUcvh2FnfAiLhLrGayxr0eLh0qhtgpoSqdtNvdk2rIEtVbQcUOelp9EfFCPNYNytc0284kJwUun2PKakj91qwwrX+oZMVZ9LAxAOaKgmzsuPq2Dla+aGS/kDTFF03UMVxh6EvahQx5s28/5Cuttc5ZeA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by DS7PR12MB8081.namprd12.prod.outlook.com (2603:10b6:8:e6::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:37 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:37 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 06/23] resctrl: Mirror schemata for controls without MBW hardware Date: Thu, 16 Jul 2026 14:02:56 -0700 Message-ID: <20260716210329.2914625-6-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ2P221CA0007.NAMP221.PROD.OUTLOOK.COM (2603:10b6:a03:5db::18) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|DS7PR12MB8081:EE_ X-MS-Office365-Filtering-Correlation-Id: bbdb1fe1-a82a-4956-58c7-08dee37db4cb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|1800799024|366016|6133799003|3023799007|5023799004|11063799006|56012099006|18002099003|22082099003|10067099003|921020; X-Microsoft-Antispam-Message-Info: zimudT7u0z/EYJBkKqT7b+3FuO9RBmUiUmYs4cex3SFh7etNPd/ToSHzRp1SwoE9aNfDoSkDwg4w00uQB8VkkMcim6GUarkkOlZdVud4ihgvoJQC15w/1v1x2ihMxA/mMiBeOsms0w1820eNJUz8lygJiVuDK0U4C/voFv4R+1yXXpoB0RADyAswrlCwDEXVFfxCslW2ECLcmfRGplXKlkLxxEFfAXZjmfsMtCMQhY4tPickP0Y7AID9zISNpKLhLZWaY8FNL3JyH7118kpaZAcuCJ+rRV4qqxSj8V1dqilPq+kL3mY7TbbPFbNkkUCvHNmKIhLEOWtaTWstGWAQjfDi23rqgrkEpRCfk+HKVUzJ+UbhQdml/yI+NGXXFEOwdxVftoMhFVFCxd150LxVAAAHHRF7xJOXCDMITNyGBEyZIVnWBbeFPBzXkN5KV6Z+trW/YuH/9k/LyZmjPX4qqXXM4ezp4GhC+xFiIpQRhtj2abrNuf0owE97MtvGxN6+oyICLgCJXH1UGK0M83z3HISD51/21SGXGPyucOISXgCK7DVjufvbHQahJPDJY972PSESgVDY9K1AEnUon2x4JKmprvRr1UX9TD0XMxE5V/ecG3k/aLYI1989jOPO0lSfCgqbGpPTK0OirI7w6mZlw5ExWan7ODQ5vW4/vts1c5Dv67tLZg+rmHEqtYKI7ETjnBKMDkiEqiFMMjGnKe3DHw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(1800799024)(366016)(6133799003)(3023799007)(5023799004)(11063799006)(56012099006)(18002099003)(22082099003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?iYeGrKsZC4+/sKY6tCsWHArXBPeo4luFE5F3yYRDqoftehyB8VIv4nc85/Ud?= =?us-ascii?Q?S+fljNOPAqfX84Hu0YXphMmxBoPHTR8/e+zXPYmAft7xy25lLfC1oXviJclv?= =?us-ascii?Q?sx6pd8W6dvQIpOMUV6hrYak6TSyINpNCTCkUqNW+JuFn0UuSpXBPoMoOrXAu?= =?us-ascii?Q?3bBPscpQ7eFXQEBRyHzKpiqEZK+TFVSjMqWkkeS8etKyZbl476BKZMOnTnwJ?= =?us-ascii?Q?rk9nEn1uM/rIksXkrda9TjDcbeKhISvvrH9sMFPAwtz7SYl0zZ1abg55dVw8?= =?us-ascii?Q?J/MzjZQ5rqa1wXbwSYG8UwfdWBvcWozeaCGt1dhTWJepoLu3HV3P5qFH/Ze3?= =?us-ascii?Q?7CzZQTQHD6jd/4kNMkM0OHCch5Xgh420ABenMVG6Z7CmqoEF17cJzPrt7UQX?= =?us-ascii?Q?ptR91FylRO6p4t3Z/23Br3zSwLboFwHMfkmG79MAhqnlKDTNHVquFkVmteLx?= =?us-ascii?Q?pCEmL5X/ZquO1HwjruYpZBgmQx/nycfMheki+lx5vGZb5ZyC+y++yFF7X1MW?= =?us-ascii?Q?fv5xkeelbQxyknTlLaXzy5j9XLcbtzqiXG9O2rR3E0Sv3CPVIFgR9xbndSu/?= =?us-ascii?Q?rFvP4yR9HIwS+Ug4SGKhdTh23SMwYc+3DW2qCZNdWnB3/YA5lFbzd0L7cZmQ?= =?us-ascii?Q?mv2DCzJlGuNEFSIz0OfNGU2NrIIWPzlPkddcF9xywCadb8OfJmVK3VhXxzBE?= =?us-ascii?Q?gngfPsyv3wGcyL1GxQI12r2ngOKt38pSzcUIt2uj2IKfV6FccGZvpy2Qm+XF?= =?us-ascii?Q?VDQnHIIZ/2HMoX+OJnflcvSgW1ASv021e/hgoeMwAK6mUMMT7qD3JSjxE6qH?= =?us-ascii?Q?8kQqxrn1TWMGq7tN/C6aOxXjjtMY954Boxid7KM/O9RJR+iRr2+79RDSJ+3H?= =?us-ascii?Q?B9H7l5qHBvx1IP+Q2hXBYmY44xkBXcjyB0oLGOZpFqzs3X7xpw/nNrmmqCMl?= =?us-ascii?Q?Bds6nOv43iwKFVfLjapc27CWZ/VTmZSmCN/xYWm1GWLMqG7XAxFH/vL53pcZ?= =?us-ascii?Q?2S/M//BF9b6atxg5rbxhRtV1qhDzBVXb1YpSZbbyo1zMluxqDHJ02ikiziys?= =?us-ascii?Q?PwNYJGJplkiUxSRiY4IKC0VEaGOlDF21xEBE56A44NlAoMmlxczoZMs1gDTQ?= =?us-ascii?Q?y8YllzaRudwtzMF05YnGafMYIxGgH4zhYJQahbguhjCNjSTb4Tte2HkEcniJ?= =?us-ascii?Q?h7ZECsW9b71phCSRlhRXBwVCZLvXNAZorRSDTarzr7YwwE938j9PoA7yd0KU?= =?us-ascii?Q?YJfrDBunUEZreUqgXcWruN3EomB9+XDmNNofr3u4oorD9dBO+zDf8xcXNEmX?= =?us-ascii?Q?0q0EMykKsWP3aC74CU9NajVRur6vyPoYrCHLYXEttr3ONxunSVrJkHs1TnKS?= =?us-ascii?Q?lAB2xNXMMx+9MgCQGHgZZ8Y3Ku2cwhcten8lFzv1VIv9KX43swpqlWrIPBoN?= =?us-ascii?Q?y/IxjsSTupbOQLTIkFm9C70xkqeZZp5rCfutvpPvrF6kPl8i6px4MUSnFsap?= =?us-ascii?Q?XvkYxV1/TSZHjjaCCCkQDGD65WqV2+8jSNLAG/v2fbQ9bgyU/wvk2POx8Rna?= =?us-ascii?Q?RqaDAkZCt2/4l3SqAYGm4NqShiitYP4zOGXOhOgmhVlyHdV/uQgQD67XoMb/?= =?us-ascii?Q?9O5SefAegMYtQyyUbbvz7t9aEpVTPepFLpG89wlSvKwu3r4LSFSdxJmG119/?= =?us-ascii?Q?e6fMk3LKJDbKhA6YSDxsVIxeJ8cBGxsEr9U1AZ3jlKll+DodOmtvnV07FfM1?= =?us-ascii?Q?aqM3RWRDew=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: bbdb1fe1-a82a-4956-58c7-08dee37db4cb X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:37.8599 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: pgzI3Ew+Z/0lOH+AxOoseuIfUdyZYBi5f75X2Blgk9IFvorhE/JsjeRefrPs1JuW7LtknNqTem7xyFwd+6JoBA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB8081 Content-Type: text/plain; charset="utf-8" When an emulated control has no MBW hardware of its own, redirect schemata reads and writes to the backing control so both lines show and update the same value. Signed-off-by: Fenghua Yu --- fs/resctrl/ctrlmondata.c | 93 ++++++++++++++++++++++++++++++++++++---- fs/resctrl/rdtgroup.c | 1 + include/linux/resctrl.h | 6 +++ 3 files changed, 91 insertions(+), 9 deletions(-) diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c index 1f832a838115..ee7823cf9493 100644 --- a/fs/resctrl/ctrlmondata.c +++ b/fs/resctrl/ctrlmondata.c @@ -28,6 +28,13 @@ struct rdt_parse_data { u32 closid; enum rdtgrp_mode mode; char *buf; + /* + * The control whose schemata line is being parsed, before any + * redirection to a backing control. Used to distinguish a real + * duplicate domain from the mirrored write of an emulated control and + * the control that backs it. + */ + struct resctrl_ctrl *line_ctrl; }; =20 typedef int (ctrlval_parser_t)(struct rdt_parse_data *data, @@ -105,7 +112,7 @@ static int parse_bw(struct rdt_parse_data *data, struct= rdt_resource_final *f, u32 bw_val; =20 cfg =3D &d->staged_config[f->conf_type]; - if (cfg->have_new_ctrl) { + if (cfg->have_new_ctrl && cfg->staged_ctrl =3D=3D data->line_ctrl) { rdt_last_cmd_printf("Duplicate domain %d\n", d->hdr.id); return -EINVAL; } @@ -118,8 +125,18 @@ static int parse_bw(struct rdt_parse_data *data, struc= t rdt_resource_final *f, return 0; } =20 + if (cfg->have_new_ctrl) { + if (cfg->new_ctrl !=3D bw_val) { + rdt_last_cmd_printf("Conflicting values for domain %d\n", + d->hdr.id); + return -EINVAL; + } + return 0; + } + cfg->new_ctrl =3D bw_val; cfg->have_new_ctrl =3D true; + cfg->staged_ctrl =3D data->line_ctrl; =20 return 0; } @@ -185,7 +202,7 @@ static int parse_cbm(struct rdt_parse_data *data, struc= t rdt_resource_final *f, u32 cbm_val; =20 cfg =3D &d->staged_config[f->conf_type]; - if (cfg->have_new_ctrl) { + if (cfg->have_new_ctrl && cfg->staged_ctrl =3D=3D data->line_ctrl) { rdt_last_cmd_printf("Duplicate domain %d\n", d->hdr.id); return -EINVAL; } @@ -228,6 +245,7 @@ static int parse_cbm(struct rdt_parse_data *data, struc= t rdt_resource_final *f, =20 cfg->new_ctrl =3D cbm_val; cfg->have_new_ctrl =3D true; + cfg->staged_ctrl =3D data->line_ctrl; =20 return 0; } @@ -238,11 +256,50 @@ static int parse_cbm(struct rdt_parse_data *data, str= uct rdt_resource_final *f, * separated by ";". The "id" is in decimal, and must match one of * the "id"s for this resource. */ +/* + * A control can be emulated by another control (for example the legacy, + * resource-wide MB control emulated by a node-scoped bandwidth control). = When + * the control has no MBW hardware of its own (membw.no_mbw_hw), reads and= writes + * are redirected to the control that emulates it (emulated_by) so both sc= hemata + * lines show and update the same value. + * + * Emulation is only performed in legacy mode. In native mode + * (RESCTRL_CTRL_NATIVE) a control without hardware is left as-is, so a + * disabled control is not emulated by another control. + */ +static struct resctrl_ctrl *resctrl_ctrl_backing(struct rdt_resource *r, + struct resctrl_ctrl *ctrl) +{ + if (r->mode =3D=3D RESCTRL_CTRL_LEGACY && + ctrl->type =3D=3D RESCTRL_CTRL_SCALAR && + ctrl->emulated_by && ctrl->membw.no_mbw_hw) + return ctrl->emulated_by; + + return ctrl; +} + +/* + * A control emulated by another control has no MBW hardware of its own, s= o it + * only has a schemata line while emulation is active. Emulation is perfor= med + * in legacy mode only, so in native mode such a control is hidden from + * schemata rather than showing an empty or meaningless line. + */ +static bool resctrl_ctrl_schemata_hidden(struct rdt_resource *r, + struct resctrl_ctrl *ctrl) +{ + if (ctrl->type !=3D RESCTRL_CTRL_SCALAR || + !ctrl->emulated_by || !ctrl->membw.no_mbw_hw) + return false; + + return r->mode !=3D RESCTRL_CTRL_LEGACY; +} + static int parse_line(char *line, struct rdt_resource_final *f, struct resctrl_ctrl *ctrl, struct rdtgroup *rdtgrp) { enum resctrl_conf_type t =3D f->conf_type; ctrlval_parser_t *parse_ctrlval =3D NULL; + struct resctrl_ctrl *line_ctrl =3D ctrl; struct resctrl_staged_config *cfg; struct rdt_resource *r =3D f->res; struct rdt_parse_data data; @@ -253,6 +310,9 @@ static int parse_line(char *line, struct rdt_resource_f= inal *f, /* Walking r->domains, ensure it can't race with cpuhp */ lockdep_assert_cpus_held(); =20 + /* A control without MBW hardware mirrors the control that emulates it. */ + ctrl =3D resctrl_ctrl_backing(r, ctrl); + parse_ctrlval =3D resctrl_ctrl_priv_all[ctrl->type].parser; =20 if (rdtgrp->mode =3D=3D RDT_MODE_PSEUDO_LOCKSETUP && @@ -276,6 +336,7 @@ static int parse_line(char *line, struct rdt_resource_f= inal *f, data.buf =3D dom; data.closid =3D rdtgrp->closid; data.mode =3D rdtgrp->mode; + data.line_ctrl =3D line_ctrl; if (parse_ctrlval(&data, f, d, ctrl)) return -EINVAL; if (rdtgrp->mode =3D=3D RDT_MODE_PSEUDO_LOCKSETUP) { @@ -418,7 +479,7 @@ static int rdtgroup_parse_ctrl(char *ctrlname, char *to= k, list_for_each_entry(f, &rdt_resource_final_all, list) { if (!strcmp(resname, f->name) && rdtgrp->closid < f->num_closid) { ctrl =3D resctrl_resource_ctrl_get(f->res, ctrlname); - if (ctrl) + if (ctrl && !resctrl_ctrl_schemata_hidden(f->res, ctrl)) return parse_line(tok, f, ctrl, rdtgrp); else break; @@ -511,6 +572,7 @@ static void show_doms(struct seq_file *s, struct rdt_re= source_final *f, bool print_ctrl, int closid, struct resctrl_ctrl *ctrl) { struct rdt_resource *r =3D f->res; + struct resctrl_ctrl *vctrl; struct rdt_ctrl_domain *dom; bool sep =3D false; u32 ctrl_val; @@ -523,17 +585,23 @@ static void show_doms(struct seq_file *s, struct rdt_= resource_final *f, resctrl_ctrl_is_default(ctrl) ? "" : "_", resctrl_ctrl_is_default(ctrl) ? "" : resctrl_ctrl_name_str(ctrl->name)); - list_for_each_entry(dom, &ctrl->domains, hdr.list) { + + /* + * A control without MBW hardware has no values of its own; show the + * values of the control that emulates it so both schemata lines match. + */ + vctrl =3D resctrl_ctrl_backing(r, ctrl); + list_for_each_entry(dom, &vctrl->domains, hdr.list) { if (sep) seq_puts(s, ";"); =20 - if (is_mba_sc(r, ctrl)) + if (is_mba_sc(r, vctrl)) ctrl_val =3D dom->mbps_val[closid]; else - ctrl_val =3D resctrl_arch_get_config(r, ctrl, dom, closid, + ctrl_val =3D resctrl_arch_get_config(r, vctrl, dom, closid, f->conf_type); =20 - seq_printf(s, resctrl_ctrl_priv_all[ctrl->type].fmt_str, + seq_printf(s, resctrl_ctrl_priv_all[vctrl->type].fmt_str, dom->hdr.id, ctrl_val); sep =3D true; } @@ -553,11 +621,14 @@ int rdtgroup_schemata_show(struct kernfs_open_file *o= f, if (rdtgrp) { if (rdtgrp->mode =3D=3D RDT_MODE_PSEUDO_LOCKSETUP) { list_for_each_entry(f, &rdt_resource_final_all, list) { - for_each_resource_ctrl(ctrl, f->res) + for_each_resource_ctrl(ctrl, f->res) { + if (resctrl_ctrl_schemata_hidden(f->res, ctrl)) + continue; seq_printf(s, "%s%s%s:uninitialized\n", f->name, resctrl_ctrl_is_default(ctrl) ? "" : "_", resctrl_ctrl_is_default(ctrl) ? "" : resctrl_ctrl_name_str(ctrl->name)); + } } } else if (rdtgrp->mode =3D=3D RDT_MODE_PSEUDO_LOCKED) { if (!rdtgrp->plr->d) { @@ -574,8 +645,11 @@ int rdtgroup_schemata_show(struct kernfs_open_file *of, list_for_each_entry(f, &rdt_resource_final_all, list) { if (closid >=3D f->num_closid) continue; - for_each_resource_ctrl(ctrl, f->res) + for_each_resource_ctrl(ctrl, f->res) { + if (resctrl_ctrl_schemata_hidden(f->res, ctrl)) + continue; show_doms(s, f, true, closid, ctrl); + } } } } else { @@ -1147,6 +1221,7 @@ static int resctrl_io_alloc_parse_line(char *line, st= ruct rdt_resource_final *f, data.buf =3D dom; data.mode =3D RDT_MODE_SHAREABLE; data.closid =3D closid; + data.line_ctrl =3D ctrl; if (parse_cbm(&data, f, d, ctrl)) return -EINVAL; /* diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index 3bec23728847..a34c7ed8f874 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -4147,6 +4147,7 @@ static void rdtgroup_init_mba(struct rdt_resource *r,= struct resctrl_ctrl *ctrl, cfg =3D &d->staged_config[CDP_NONE]; cfg->new_ctrl =3D resctrl_get_default_ctrlval(ctrl); cfg->have_new_ctrl =3D true; + cfg->staged_ctrl =3D ctrl; } } =20 diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index 06482e766087..cfb4c17bcb53 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -121,10 +121,16 @@ struct pseudo_lock_region { * struct resctrl_staged_config - parsed configuration to be applied * @new_ctrl: new ctrl value to be loaded * @have_new_ctrl: whether the user provided new_ctrl is valid + * @staged_ctrl: the control whose schemata line staged this config. + * Used to tell a real duplicate domain in one schemata + * line from the mirrored write of an emulated control + * and the control that backs it, which share the same + * staged config. */ struct resctrl_staged_config { u32 new_ctrl; bool have_new_ctrl; + struct resctrl_ctrl *staged_ctrl; }; =20 enum resctrl_domain_type { --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013006.outbound.protection.outlook.com [40.93.201.6]) (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 93C323BED58 for ; Thu, 16 Jul 2026 21:03:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.6 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235840; cv=fail; b=FOKrHjsVJ2Kcl6b+56qJ5E9JlnNh/klBJD54VSGJw/dfy5K2KTyo0EwByvG3yN7EoUInkJE5oEEz2wRsEmNYUajSxB32HZ5LD9snesOKp8cgn5/ZLZbi21klSMLxYgutFbPxW2yPNki1UL4ICfCIHePNov+qXS2tF7aV4MmOZlE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235840; c=relaxed/simple; bh=I3Qyu+OsXAxQ1OevMH6hTYhQXu7BWjCZlRw3GlrI0Yk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=rpN/7A69NgEk3ESaCMd2k9GPJ1t1t68A2vpTF96kqmm9tp3sbv+r2VlCsf/1eSoYlfENNISxQ7Js4D6GtNLKTJpRa0KXjK3lD+yw3/aBvKotiTG+QXDHXaDmIvxlJItdrhvqycQv2skV1Y+ln4foQgQYcddkCeFKQv6TYCLUSK8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=MBmcZ7Gr; arc=fail smtp.client-ip=40.93.201.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="MBmcZ7Gr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iyXUc+T7rw/DLO0UHikwQQg6A1xg+aPd5Y09eqWOpgx97g6oZhWfgHhELktjvw36p1V2DPLX2ZRnkohpKCBHXFjJwyf2R8+ItNrdNB4gKukrcIDm7HcRZwJ/CE2siDeOsz2YLLL6yTzf8IHCRMoB+DVMGvOOfG5Ix8EF24h6Pbz2k0gpnNgdt9kPsh11VIdewfMpIUD20dsok+uquChZHddjkmldEKqRAWpqYXv3yHn9lWlDmvwpLyDyQMQO2kDWQtfBl/FXGnl3kks07VYvs4AvZK5D8d9S0SltJe5Tn6uFAagFzf2K1ONATIXWCs8g/IXCg6amyz04x7UkPV722A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QASWqqWTuEsVM+OwhLywMjqv9YzzNDcby31IXS/H5Dc=; b=UTjZy4WeR3Ngj+LiX4nfOaJuPwLD6H/nXxpDBO3j7CywaSY5qkzK90WuZzyG5Ly40yDotg+CrK7Yt7xHIIwlPGpr4HUgtZzGaZbaECCpRTKcvmSxynat18A9YC+2bH/OSmks2S5f66aBa6GXH3kUeYds35JL71iDdjbdt4rHBUpSXF85lYpIQhxvH4IIbP+GGm63nPL2qrQHK6IZF1kMH7QcJEt0vEmC18AQQwFj73izsw88sx+l4o9vD2fcAhDZPO+koXakkcE93zPLR9sg+wvXOQoYN09TKy5oJxZugEL+MxX8PPdJiTt/xMb7QUrI5KARE7zxrYe0+Lpaqr7Rqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QASWqqWTuEsVM+OwhLywMjqv9YzzNDcby31IXS/H5Dc=; b=MBmcZ7GrbyDuhw7N2WexDAHwkeRnBwyDPDwVBZJEGsYd7dx58IW+BjeEWO7bOFNV4NNMhEcKtpcEPlstw13jtfqksVVee5/A+1KzGQiT8Sp0rq01qT+n0Ll8Z07dg2pcziIHIibQGcixp4VuyFwi3eQE7DnO2W+Ypnn1DzliHFNZ1hiTpCRBNhcMlsvAonMyjJyyGXCTTSYQASVZ2heqGkZMSvYKjTbopLyghi18DnSCzbk15y57ET6pw5wkfQqKMxIOAxfuYEJ1U2h2fm3EekuavroFiffLFQXuRNx4kZV+Pq8Ofkc88GnI0sWAYj+7viYzAK9a3m0FA6/xpau4Tw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by DS7PR12MB8081.namprd12.prod.outlook.com (2603:10b6:8:e6::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:40 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:40 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 07/23] resctrl: Rebuild resource_schemata subdirs on MBA mode change Date: Thu, 16 Jul 2026 14:02:57 -0700 Message-ID: <20260716210329.2914625-7-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR13CA0117.namprd13.prod.outlook.com (2603:10b6:a03:2c5::32) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|DS7PR12MB8081:EE_ X-MS-Office365-Filtering-Correlation-Id: 06461669-57d9-4601-4d7e-08dee37db59b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|1800799024|366016|6133799003|3023799007|11063799006|56012099006|18002099003|22082099003|10067099003|921020; X-Microsoft-Antispam-Message-Info: ASCtjE25cKAAysL98DkydZ1s87ojRRWZbOooiMNSo5t3sB8apS0Kvl0q/Po6xElWXJdMS0cjsTiVcTnPwyo9ZXBH0D1LutOVcunJGfNvAhTGLvtpm8Xt/CpWjhT1C4U+1MKLkOeeZb9QMncyD2smZwS0w+q9LFXJQWyHRHgWJRoftnXjAv+npBio0NtTK16Tcum9K4HJQBcAqdwA2ulf3sQdPpJDEd/HYzuEHKzNwBSPO6lf1MbOqH4tMe9ne2aHAmiSKu2/qKO9p0IDYuWFIbix052MRMOMzaL8fA0q+qYAit91KPFOVTb6tMnvCasm+06rl9Qz62jNoH1SF2aImDTZJvZ9cDFmmknWaoxyihXsq+cQCWoRqRFjrH0xYlbllQu2X/SO9nq6D80KoS+ohmU6a01TnwuPtHS0SqjIO6DWHv0hOeJCBZritmaF9AQgX9vjfXolWAMCkw48rxzgq6WJP8cEysijY+6Jt01w3Zn+ednH5ph9ok4PZQPXmylhL2DGXsnj7InBCblgoIoKum/+fHQedCtXnhU9diOl7uVV2cwVwsDrrwz2ImFgCpuFHSakkKUrk05sdQZodaJpSCiCeH/g6bJr2sf2Y5wAnkBiu6hFXpRLHEa8vB2IMvtvwuwtz2t5jkDxX2UCUsfWTmTswNGYZuOlOnjx6BLqC2V0M/hzVRt05Uz85qcUL2SQ/6HtMOW3b96neaa3c3gtAw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(1800799024)(366016)(6133799003)(3023799007)(11063799006)(56012099006)(18002099003)(22082099003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ac0aUrOPpHXdJkWQ8fe55kNxyxcAMC8kFw9ukqyUQlUYRcKK9fpSiFnbOQKn?= =?us-ascii?Q?k/SphF9Gyw91xEvKvqLO2AdHgMC/K1FtNiJhdvUQIq2o/XvjhZQA37hDfeCJ?= =?us-ascii?Q?TimQI+yMgysHGivQJfwGEStipthvhfdfwYpk8YMCM0xw4UXhc03pln69rREb?= =?us-ascii?Q?wznXu+pvtK4Y0iLYzSdUao61p7P1lrYfTx6zoHe9z6l6CZLgV0hj47Ybt5fV?= =?us-ascii?Q?4PVGTwnlSH7LRYRIDMFGw0oPstp6bSH+9rLEVVaWOsu9yzCJPeTTiAAhqYCo?= =?us-ascii?Q?vRnseQiYP/roASA4d3WB09nLrvkZsym8kFNoX6ZcV/uU0YeWQDg97NoVODlV?= =?us-ascii?Q?kEgFL6Jmt2b3A19ZftYiTsGARuz/naYRQG7iYRSOof6Jw/rIuz6R/ZbbAQAv?= =?us-ascii?Q?4awM+vhjUtXEh5pjjN7ORfQkdk8+Bwq7bXRA0JZ12G4v6aBiOMowzQbXTrTL?= =?us-ascii?Q?C3c/hgvCjiOVMnYD6UIBh51zbMzF3JsYB+ACc86wMQbkbnhlN7KGoPa4DjID?= =?us-ascii?Q?Fa3qMXgskRPE+vQN1OjExd+5Z6NaLrzffJzzuwfR7MtZK2WvBrncEEjPB8Op?= =?us-ascii?Q?Il+/ns6Nm0r5hPePFq9mcXYQYXNP/IQSjlpdICeY8hwIKLgVNhcN/oddWUGd?= =?us-ascii?Q?kVlScqH3CJLesxNytKmwcKJZSVZYqSh0IpVablFkJBONs3QOvn6hpIFmZa7J?= =?us-ascii?Q?NJ7ZAYYRcDSAtW1QWl/mIFWkpjrVfPilRiaLtiLh8IBtWTVKNICaT7HNeM3q?= =?us-ascii?Q?KFHDu17+hN8BHim8I+hIjSYYUbr+5OenWF0ZVMFQAEVzXRdqoyovA1RJKVgh?= =?us-ascii?Q?TheXrUMRr3xi08K92tuhoXyAVFHfhryhpQ5y7XhzVOpUR1Z8eDHSt9ufj6Uf?= =?us-ascii?Q?eyoorsmh+flmGvsmiRru46EUlxkIuXbkgZlTVGYrxPn2KkXE754sKkBjDPhK?= =?us-ascii?Q?vzw60q/9781hQ6pEW4ZObdv6UQxf48wVQg1nMweH+uPMXTRwJGBpeN7PjEqP?= =?us-ascii?Q?T5065O54ho8z8QcbnluZqjT4IzEaNYRo7UlsdUC+BaV7SLPMmj1T/SHEE98C?= =?us-ascii?Q?mQ2DeTjyaW4tTnrRfR6mxWCYIFLvMdcj+ZXT1mJ/ic8X3fdpud1677U9hZZo?= =?us-ascii?Q?t0TIbE1XZqJMANqChjGNLbziHpWnKgOyyIWbc2piEidEs4aG8l24UNrrQ0a4?= =?us-ascii?Q?WYTzq8PkrFWGKaqkzkDNs8fDMq3iTo4qTCNIRVjxt2dsSRkb/PJWFrg6L2fL?= =?us-ascii?Q?OJGO9DMMrlzas7/V0mgdCL5EO28f4snLkCQwh/Yte7vZW4QyAAisJU4dHVuH?= =?us-ascii?Q?gVCuxngdslXGGR5tSTnULr6a1L5nNMcGwFx3zQVoy5CQDfL1ST50cnbILcw3?= =?us-ascii?Q?rv7VL3QrUf8BGZuWGK16OJzI5UUPtdd9G9VPt9K9D7yywi7j4HAZ+hdvTHjW?= =?us-ascii?Q?6RBPF8tDsZqmPbrZzHIxLDmmV43lE/gkBm9mrVV+cBvnl8XBkLNxtuxh+s8g?= =?us-ascii?Q?/y8W0VpILFXREAFyQml5eGB6Su2rZkZCfNn4qQkAPvpsJrxZZ8GiwZDCNIen?= =?us-ascii?Q?rT97mo+dxHhTWQkKIdZ9qJ50NrG87R4Vxodor4db82Mc2CgTJY43EFU1g14c?= =?us-ascii?Q?2pA7se5SOUWF4I0RILSm34TXuQYcUEQqADxCwUMOuEXE5PhVG9gOrz/ZEN6w?= =?us-ascii?Q?iwsAft4PgRaMIIXZW647SXqtztsKX7x9TwNkl184O2Mcws4RhoGztWew4xxa?= =?us-ascii?Q?Gz4kI9XCgA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 06461669-57d9-4601-4d7e-08dee37db59b X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:39.1704 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: mo72oLGBf+CR+Uqm266yxnsCxtKMef+izh7/wIwzNSKQOBjDgcXT82eu8MB7wh38mnG49TOzWtUUlHrsPqPfSw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB8081 Content-Type: text/plain; charset="utf-8" The resource_schemata directory layout is mode dependent: in legacy mode an emulated control (one without MBW hardware) is nested under the default control that emulates it, while in native mode every control sits directly under resource_schemata. The mode file added earlier is read-only, so the layout is built once at mount time and can never change. Make the mode file writable and rebuild the control subdirectories when the mode changes, so the tree stays consistent with the new mode and with the schemata file contents. Add resctrl_ctrl_mb_mode_write() and register it on the mode file (switching it from 0444 to 0644). Factor the per-control directory creation out of resctrl_mkdir_schemata_dir() into resctrl_ctrl_create_subdirs(), add resctrl_ctrl_remove_subdirs() to tear the control directories down, and drive both from resctrl_ctrl_rebuild_subdirs(), which is called from resctrl_ctrl_mb_mode_write() whenever the mode actually changes. Signed-off-by: Fenghua Yu --- fs/resctrl/rdtgroup.c | 334 ++++++++++++++++++++++++++++++++---------- 1 file changed, 260 insertions(+), 74 deletions(-) diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index a34c7ed8f874..d81877a5cd72 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -995,6 +995,15 @@ void *rdt_kn_parent_priv(struct kernfs_node *kn) return rcu_dereference(kn->__parent)->priv; } =20 +static struct kernfs_node *rdt_kn_parent(struct kernfs_node *kn) +{ + /* + * Valid within the RCU section it was obtained or while rdtgroup_mutex + * is held. + */ + return rcu_dereference_check(kn->__parent, lockdep_is_held(&rdtgroup_mute= x)); +} + static int rdt_num_closids_show(struct kernfs_open_file *of, struct seq_file *seq, void *v) { @@ -2713,6 +2722,173 @@ static unsigned long fflags_from_resource(struct rd= t_resource *r) return WARN_ON_ONCE(1); } =20 +/* + * Format the sysfs directory name of @ctrl (for example "MB" or "MB_NODE") + * into @buf. Returns -ENOSPC if the name would be truncated. + */ +static int resctrl_ctrl_full_name(struct rdt_resource_final *f, + struct resctrl_ctrl *ctrl, char *buf, size_t size) +{ + int ret; + + ret =3D snprintf(buf, size, "%s%s%s", + f->name, resctrl_ctrl_is_default(ctrl) ? "" : "_", + resctrl_ctrl_is_default(ctrl) ? "" : resctrl_ctrl_name_str(ctrl->= name)); + if (ret >=3D size) + return -ENOSPC; + + return 0; +} + +static int resctrl_ctrl_create_subdir(struct kernfs_node *kn_dir, + struct rdt_resource_final *f, + struct resctrl_ctrl *ctrl, struct kernfs_node **kn_ctrl) +{ + char ctrl_full_name[20]; + int ret; + + ret =3D resctrl_ctrl_full_name(f, ctrl, ctrl_full_name, sizeof(ctrl_full_= name)); + if (ret) + return ret; + + *kn_ctrl =3D kernfs_create_dir(kn_dir, ctrl_full_name, kn_dir->mode, ctrl= ); + if (IS_ERR(*kn_ctrl)) + return PTR_ERR(*kn_ctrl); + + return rdtgroup_kn_set_ugid(*kn_ctrl); +} + +/* + * Create a control subdirectory for each control under the + * resource_schemata directory @kn_subdir. + * + * No need to cleanup on exit - caller removes the created directories on + * failure (either via the recursive kernfs_remove() of an ancestor or by + * rebuilding the subdirectories). + */ +static int resctrl_ctrl_create_subdirs(struct kernfs_node *kn_subdir, + struct rdt_resource_final *f) +{ + struct kernfs_node *kn_ctrl, *kn_ctrl_def =3D NULL; + struct resctrl_ctrl *ctrl, *ctrl_def =3D NULL; + struct rdt_resource *r =3D f->res; + int ret; + + lockdep_assert_held(&rdtgroup_mutex); + + /* + * Create the default control sub-dir first. Emulated controls are + * nested underneath it and may be iterated before it, so it has to + * exist before the rest of the controls are created. + */ + for_each_resource_ctrl(ctrl, f->res) { + if (ctrl->name !=3D RESCTRL_CTRL_NAME_DEF) + continue; + + ret =3D resctrl_ctrl_create_subdir(kn_subdir, f, ctrl, &kn_ctrl_def); + if (ret) + return ret; + ret =3D resctrl_add_ctrl_files(kn_ctrl_def, ctrl); + if (ret) + return ret; + ctrl_def =3D ctrl; + break; + } + + for_each_resource_ctrl(ctrl, f->res) { + if (ctrl->name =3D=3D RESCTRL_CTRL_NAME_DEF) + continue; + + /* + * In legacy mode the emulating control is nested under the + * default control it emulates (the default control's + * emulated_by points at it). In native mode there is no + * emulation, so every control sits directly under + * resource_schemata. + */ + if (r->mode =3D=3D RESCTRL_CTRL_LEGACY && + ctrl_def && ctrl_def->emulated_by =3D=3D ctrl) + ret =3D resctrl_ctrl_create_subdir(kn_ctrl_def, f, ctrl, &kn_ctrl); + else + ret =3D resctrl_ctrl_create_subdir(kn_subdir, f, ctrl, &kn_ctrl); + if (ret) + return ret; + + ret =3D resctrl_add_ctrl_files(kn_ctrl, ctrl); + if (ret) + return ret; + } + + return 0; +} + +/* + * Remove every control subdirectory under the resource_schemata directory + * @kn_subdir, leaving the directory itself and its own files (for example + * "mode") in place. The default control directory is removed recursively = so + * any control nested underneath it is removed too; removing a control tha= t is + * not a direct child is a no-op. + */ +static void resctrl_ctrl_remove_subdirs(struct kernfs_node *kn_subdir, + struct rdt_resource_final *f) +{ + char ctrl_full_name[20]; + struct resctrl_ctrl *ctrl; + + lockdep_assert_held(&rdtgroup_mutex); + + for_each_resource_ctrl(ctrl, f->res) { + if (resctrl_ctrl_full_name(f, ctrl, ctrl_full_name, sizeof(ctrl_full_nam= e))) + continue; + kernfs_remove_by_name(kn_subdir, ctrl_full_name); + } +} + +/* + * Rebuild the control subdirectories under resource_schemata to match the + * current mode. Used when the mode changes at runtime. + * + * The control directories have the same names in both modes (only their + * nesting differs), so the old directories must be removed before the new + * ones can be created - kernfs_create_dir() would otherwise fail with + * -EEXIST. Between the removal and the following kernfs_activate() there = is + * a brief window in which resource_schemata contains only its own files (= for + * example "mode") and no control subdirectories. This is acceptable: the + * rebuild only happens on an explicit mode write, runs under rdtgroup_mut= ex, + * and the control subdirectories are purely informational (scope, type, + * status) - the actual bandwidth configuration lives in each group's + * "schemata" file and is unaffected. + * + * On failure any partially created subdirectories are removed, so + * resource_schemata is left with no control subdirectories at all (its own + * files such as "mode" remain). The caller is expected to restore a + * consistent layout, typically by reverting the change that triggered the + * rebuild and calling this function again. If that second rebuild also + * fails there is no further automatic recovery and the control + * subdirectories stay missing until the next successful rebuild or a + * remount; the caller should report this to user space. + */ +static int resctrl_ctrl_rebuild_subdirs(struct kernfs_node *kn_subdir, + struct rdt_resource_final *f) +{ + int ret; + + lockdep_assert_held(&rdtgroup_mutex); + + resctrl_ctrl_remove_subdirs(kn_subdir, f); + + ret =3D resctrl_ctrl_create_subdirs(kn_subdir, f); + if (ret) { + /* Drop any partially created subdirectories. */ + resctrl_ctrl_remove_subdirs(kn_subdir, f); + return ret; + } + + kernfs_activate(kn_subdir); + + return 0; +} + static int resctrl_ctrl_mb_mode_show(struct kernfs_open_file *of, struct seq_file *seq, void *v) { @@ -2738,12 +2914,91 @@ static int resctrl_ctrl_mb_mode_show(struct kernfs_= open_file *of, return 0; } =20 +static ssize_t resctrl_ctrl_mb_mode_write(struct kernfs_open_file *of, + char *buf, size_t nbytes, loff_t off) +{ + struct rdt_resource_final *f =3D rdt_kn_parent_priv(of->kn); + struct rdt_resource *r =3D f->res; + enum resctrl_ctrl_mode mode; + int ret =3D 0; + + guard(mutex)(&rdtgroup_mutex); + rdt_last_cmd_clear(); + + /* Valid input requires a trailing newline */ + if (nbytes =3D=3D 0 || buf[nbytes - 1] !=3D '\n') { + rdt_last_cmd_puts("Invalid input\n"); + return -EINVAL; + } + + buf[nbytes - 1] =3D '\0'; + + if (!strcmp(buf, "native")) { + mode =3D RESCTRL_CTRL_NATIVE; + } else if (!strcmp(buf, "legacy")) { + mode =3D RESCTRL_CTRL_LEGACY; + } else { + rdt_last_cmd_puts("Invalid input\n"); + return -EINVAL; + } + + if (mode !=3D r->mode) { + enum resctrl_ctrl_mode old_mode =3D r->mode; + + r->mode =3D mode; + + /* + * The resource_schemata directory layout depends on the mode + * (emulated controls are nested in legacy mode only), so rebuild + * the control subdirectories to match the new mode. + */ + ret =3D resctrl_ctrl_rebuild_subdirs(rdt_kn_parent(of->kn), f); + if (ret) { + int rollback_ret; + + /* + * Roll back to the previous mode and rebuild so the + * mode reported by this file stays consistent with the + * directory layout. + */ + r->mode =3D old_mode; + rollback_ret =3D resctrl_ctrl_rebuild_subdirs(rdt_kn_parent(of->kn), f); + if (rollback_ret) { + /* + * The rollback rebuild also failed: + * resource_schemata may now be missing control + * subdirectories. Report the inconsistency to the + * kernel log and to last_cmd_status, and return + * -EIO so user space can tell from the write() + * error that the filesystem state is unreliable + * rather than just that the mode switch failed. + */ + pr_err("%s: failed to restore resource_schemata (mode change error %d,= restore error %d), control subdirectories may be missing\n", + f->name, ret, rollback_ret); + rdt_last_cmd_puts("resource_schemata rebuild failed\n"); + ret =3D -EIO; + } else { + /* + * The requested mode change failed but the + * previous mode and its directory layout were + * restored, so the filesystem is consistent. Keep + * the original error from the forward rebuild. + */ + rdt_last_cmd_puts("Failed to switch mode, reverted\n"); + } + } + } + + return ret ?: nbytes; +} + static struct rftype resctrl_ctrl_mb_files[] =3D { { .name =3D "mode", - .mode =3D 0444, + .mode =3D 0644, .kf_ops =3D &rdtgroup_kf_single_ops, .seq_show =3D resctrl_ctrl_mb_mode_show, + .write =3D resctrl_ctrl_mb_mode_write, /* * Directory-level file, not per-control: fflags is only a * presence flag here, not the BIT(ctrl->type) type filter used @@ -2781,26 +3036,6 @@ static int resctrl_ctrl_add_files(struct kernfs_node= *kn) return ret; } =20 -static int resctrl_ctrl_create_subdir(struct kernfs_node *kn_dir, - struct rdt_resource_final *f, - struct resctrl_ctrl *ctrl, struct kernfs_node **kn_ctrl) -{ - char ctrl_full_name[20]; - int ret; - - ret =3D snprintf(ctrl_full_name, sizeof(ctrl_full_name), "%s%s%s", - f->name, resctrl_ctrl_is_default(ctrl) ? "" : "_", - resctrl_ctrl_is_default(ctrl) ? "" : resctrl_ctrl_name_str(ctrl->= name)); - if (ret >=3D sizeof(ctrl_full_name)) - return -ENOSPC; - - *kn_ctrl =3D kernfs_create_dir(kn_dir, ctrl_full_name, kn_dir->mode, ctrl= ); - if (IS_ERR(*kn_ctrl)) - return PTR_ERR(*kn_ctrl); - - return rdtgroup_kn_set_ugid(*kn_ctrl); -} - /* * No need to cleanup on exit - caller calls the recursive kernfs_remove() * on failure. @@ -2808,8 +3043,7 @@ static int resctrl_ctrl_create_subdir(struct kernfs_n= ode *kn_dir, static int resctrl_mkdir_schemata_dir(struct kernfs_node *kn, struct rdt_resource_final *f) { - struct kernfs_node *kn_subdir, *kn_ctrl, *kn_ctrl_def =3D NULL; - struct resctrl_ctrl *ctrl, *ctrl_def =3D NULL; + struct kernfs_node *kn_subdir; struct rdt_resource *r =3D f->res; int ret; =20 @@ -2827,48 +3061,9 @@ static int resctrl_mkdir_schemata_dir(struct kernfs_= node *kn, return ret; } =20 - /* - * Create the default control sub-dir first. Emulated controls are - * nested underneath it and may be iterated before it, so it has to - * exist before the rest of the controls are created. - */ - for_each_resource_ctrl(ctrl, f->res) { - if (ctrl->name !=3D RESCTRL_CTRL_NAME_DEF) - continue; - - ret =3D resctrl_ctrl_create_subdir(kn_subdir, f, ctrl, &kn_ctrl_def); - if (ret) - return ret; - ret =3D resctrl_add_ctrl_files(kn_ctrl_def, ctrl); - if (ret) - return ret; - ctrl_def =3D ctrl; - break; - } - - for_each_resource_ctrl(ctrl, f->res) { - if (ctrl->name =3D=3D RESCTRL_CTRL_NAME_DEF) - continue; - - /* - * In legacy mode the emulating control is nested under the - * default control it emulates (the default control's - * emulated_by points at it). In native mode there is no - * emulation, so every control sits directly under - * resource_schemata. - */ - if (r->mode =3D=3D RESCTRL_CTRL_LEGACY && - ctrl_def && ctrl_def->emulated_by =3D=3D ctrl) - ret =3D resctrl_ctrl_create_subdir(kn_ctrl_def, f, ctrl, &kn_ctrl); - else - ret =3D resctrl_ctrl_create_subdir(kn_subdir, f, ctrl, &kn_ctrl); - if (ret) - return ret; - - ret =3D resctrl_add_ctrl_files(kn_ctrl, ctrl); - if (ret) - return ret; - } + ret =3D resctrl_ctrl_create_subdirs(kn_subdir, f); + if (ret) + return ret; =20 kernfs_activate(kn_subdir); =20 @@ -4566,15 +4761,6 @@ static int rdtgroup_rmdir_ctrl(struct rdtgroup *rdtg= rp, cpumask_var_t tmpmask) return 0; } =20 -static struct kernfs_node *rdt_kn_parent(struct kernfs_node *kn) -{ - /* - * Valid within the RCU section it was obtained or while rdtgroup_mutex - * is held. - */ - return rcu_dereference_check(kn->__parent, lockdep_is_held(&rdtgroup_mute= x)); -} - static int rdtgroup_rmdir(struct kernfs_node *kn) { struct kernfs_node *parent_kn; --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013006.outbound.protection.outlook.com [40.93.201.6]) (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 434B33BD63C for ; Thu, 16 Jul 2026 21:03:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.6 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235837; cv=fail; b=Rlg+DKxEG35t3QXnx300dEHd+bpjftc20o4yTP+bgkwJiux9WcjZTWNIz44w9Vb8Ez3y3FN0d/EizbIPDPxa9CWcPd5KDZxmnqXpu92HrJkF4Ud0tVmrkq2y7zo2CzXgyJn9hh4ugrGkRjcwlNkJhE8McD7TtDlnySTmDtvfZ0U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235837; c=relaxed/simple; bh=dlUvktDEDAcqA95PFmXuwxluUs/gftOwvgZID4kYX4U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=RyAm0puGkbKr5lbHyh3gArIrtlFOICyBik1b08F15MQ2WjvUPRJofVot4R9OOCsoXPAKn4SAKVr/jwmbVsc74jlKzpCgv9aoPtU1FO9Hszh2SgsF7N5yhGJD4h2bSRb51jmDYnPd54IvqrJU0xwi5ZCB6nCeD8zmsynuxmbWKUw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=hmvkNhoJ; arc=fail smtp.client-ip=40.93.201.6 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="hmvkNhoJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Y4qkaUrcCMTuGRn48HQG7Q06A6tfI2BISi+lCpSbLmTn1UbxVNa1u675Nf9qtpWPxS3uWO4R70W4rQuFEqH+dWvV9TsKfGTLFnHiB0kqGI3jmpMoEHlPDAVu2HFScplkcm5rsGNLD9HVdmZrpcDdCaBfb8nf4axgr/vAPsddALrp5KKzwvRUlMouEA6ky8aE7OPSsy+2J/XbiLGJREvLR3xDKu8+qqtxUI7XubK4Nmr9Ikdz5TKqxiC99i9Ix4ZULF2eU34DpBiM6cwsmMQkiMwmmL9RZovxIlN1mk9MVP7+ahxvJNltfQaHDDMDTNjWt9Wop5S2H3CSH1cbtAQNiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wXQk/uaXX2G3TF8vPU244x3nFPRdRUJnn/otnLZHetg=; b=WoNx3gCd7S8q+/29ruXqwOWSpJe2BWPogPKNRkwBjLcJyVPIW7xzzaoDgiHsiaVG1XiaRHO4vv9MFftFFe2t/Wju1JaDzuQNZWAOqglJ0ytfDnGElJp6qeKGgv465ycOAL3li60eXHFaBaAKLiuKoTvDzyfpAAJ5k2vZrzENw85Kg6YIbbdyuFROFbmatn58JpBS8rDe87cmjq3gxu7Ky5nUZXH8UodniUwEW/0fPlOMvauaQnY4VYRikkFQXwMQcXg3jEBVXehC9eBnF12y8BW0upHPoHiAOD0XGcTmRc9O5JJwkDJcLx02BctJyIhB2Goz9R/J8tBIVBW+yyB5Fg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wXQk/uaXX2G3TF8vPU244x3nFPRdRUJnn/otnLZHetg=; b=hmvkNhoJ4hN/QNX8HixvR24diAyckuZAuUp9HH/j3SN0mWeDR7dxtrQ7Yvqlq187QMpW/zBxI1KgywQRLqbdiWupkk3wrEzk+8I+M0B2CSWjDZBwb/VxwVr5VNgbe4xXHPudM734FEx0apNc27RqKkrN27bcj+DHQm9y4DzSG1kuKNaUHUas6tvZMla1ya33l0FBuaQ3uivLHzdr0eZjnkKHyT45B6pKbd+dbUYb2Ut0V8lFvyrJG3FUjsKStWiPJ1g/OC7V8QiNeT2FjvjGSS0C6xIDbyjInlTVhFjIHLqg2yBipReh6mOpqZ/hn1Qe4AoujoD4Q9/z5TkMS/XbXQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by DS7PR12MB8081.namprd12.prod.outlook.com (2603:10b6:8:e6::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:40 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:40 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 08/23] Documentation: resctrl: document MBA control emulation Date: Thu, 16 Jul 2026 14:02:58 -0700 Message-ID: <20260716210329.2914625-8-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0033.namprd03.prod.outlook.com (2603:10b6:a03:33e::8) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|DS7PR12MB8081:EE_ X-MS-Office365-Filtering-Correlation-Id: 6ecbfdb8-30f9-4f0f-624d-08dee37db65c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|1800799024|366016|6133799003|3023799007|5023799004|11063799006|56012099006|18002099003|22082099003|10067099003|921020; X-Microsoft-Antispam-Message-Info: hpboZpTImorVRIxSN6IhIGZa1xnrZ1Cqi6wxnIXseP+HHlzIDMFYbrNhucAqqhGaphI4s9bnhOphP5/tisT/bB2Ow6z/nrHB2rp6+z3noKFdhVg4DDLIcddyAnrCE0x9LyD4PDtLIzA3f+PKMwtJxftP9Nn2pY6qAw45zJZiiUVa4yGa6fqQ3imbMK8Xm0Gc9yF8qKWKe2E1dPr6/9o9pLi6wQNrsXa4kpc9s9fM5i7mCg65r+FyJbWeo7vBIq0tG26hkhEe8GkRhyLHQ72OVVYPjQ9EQiP7Ks0VYfT1xbVL3TBc3RqGzUUda2E59I45AXmIb5c80sVScGGENXPwd/eN2m416TtEgtoaS3JJb9GU4h9/MlCLc6hLT/A1ig+7AV5RldqJRORgdJ8HwVsR8ybCZI8Q9kTanbh04DcLzRnzowTsFyVNC11Q+nmhQMMxKweR5wKSqPNtAFjzU64MgjDgqzQAxrbbsK5MiL4k6hRvGVi/OAV0tIO2Cudxftp1nnOOej33wx9MgkSiMKrhkoOSiI77H9LT6pW+cLOPk6m7fXDzWexm0j2TdytYgk9ln5i/3R8HqWD83oHW5qcr79u2sJUTeW02M2COJ6TQKHujRZJuY8+bfHX7BZuP5H2FHjPXBc16rIVhLrTVtNxE3enOmPKArbZTR882/CyY8uwBfy3kouFT8ZgV2IRvQkg8twd0Wj7T4ydrGgionX2l7Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(1800799024)(366016)(6133799003)(3023799007)(5023799004)(11063799006)(56012099006)(18002099003)(22082099003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?i04t9tHFvw12WhZM0ha6GyYairdUV60SEwNlzQUOYo0JQrdbBraSMjixqkur?= =?us-ascii?Q?abVJ6jwre5iwBULXo4yNeJrrxSmm+wHxgaWa8ekaj1HGxz1TqfkeDamvhevY?= =?us-ascii?Q?hYPbXWNMhV7L1usf7R2hdpGU3DuFBldSET9uxYEPWvWqoX+9saZJS5Zbj7Ti?= =?us-ascii?Q?PKv1NabkYS35UQnJMOIR5t0B1lQ/pdECBNsJmA9XnpYodxk/QN7WT5l9B38T?= =?us-ascii?Q?1M/5NAs0/+gaIyBQLk2i5HzzXK4hAimk7rPwGVxhNMdL0Xl930YO4o4Eyyb1?= =?us-ascii?Q?6HWgnMlXE9J3bB63pDD0jCFl1HCxymVIZa7jb+6aCkWCmLdt4t1/DzDyUxJ8?= =?us-ascii?Q?Y09aSPK8R6yW54i1PGWZ1GcHqUtfxC+X51ua+wx9hgOxl7IXunpUw6817KE7?= =?us-ascii?Q?nHTgfBx/NXzsMU9sxymankIxWOPjnyrF9mNUzL3aiSZYQAeZ3jteDIN5UnW8?= =?us-ascii?Q?yDtDtvm79wgkHyTjXVOs1jyLlX5wae1P2Z+mdw8JryMpUAA1VFgXzKXHSxYa?= =?us-ascii?Q?r3jiamPDAb2OrsemUc7HFqs5nPsW6lAIUpl2wxRFEd9HUBqdax5yISwyG6bV?= =?us-ascii?Q?E+7rtiuPAky97rzGWh0ROJCqNJtPg5bmZCS1SffKS713oqJHv3zz+01iWkN0?= =?us-ascii?Q?CQ2gn93wtS+rzJERNJMTvUltZ04zTOKBAGSPxPpFUH0PfIj4I/IBeFPf51tq?= =?us-ascii?Q?28iP1A9RLLTtYDKqUQqT4hY9kL4dUw3J3xhePtYDCBj6yNnJDeCuuGWZTf73?= =?us-ascii?Q?2/0gV5uk/fz0BXmFzR9DOtE6o9Sr7CEVx5zbpu64J2crJbzLlvMt+rdKZnS4?= =?us-ascii?Q?MzM13OId2F9AkdwxXfkASVjdswc7us6jHcCpSs8qTcd/Eeb3j1WIlazSNz1B?= =?us-ascii?Q?SsLSbapNH8c2ujqiIJVIbeEOrJ0y7zvmabnSq43oNJf1RYABqJgrg/+YTsh2?= =?us-ascii?Q?cgH5Fr3Dy3v6/quzO5cHQqoeCj9IRV1Js17xcGbh77qNVT3gYlwjKWyqIFuW?= =?us-ascii?Q?Ta06WytsrE4sG5v9ftoJoS6XK9STdAkvANP7xEbkwohuD+Ga6mUly1EH/QFF?= =?us-ascii?Q?P6O2SEn3qUeOGmXRBKOTkkAuu8BR+AY0fNV025HTtZw2OJarpcV5NzsGntOm?= =?us-ascii?Q?h8yin2K+LDUktej7xe7XKJCdqBzyUhX3cxUyK3kHwSdOnMiFh0oYEEaW8IsS?= =?us-ascii?Q?47T3UprCYZobf1T9tkma0MbXPRabRBjdQS5CtC7I/LR8jK2WSUzWyKOPIwBQ?= =?us-ascii?Q?TyXnLVhHDFtKu88rdCGTMt23pFmNWEsy0r0S2SjVPWzg1/V9oQ0ovA6G9Fnh?= =?us-ascii?Q?hN9nnRtqfMgOG7WMavrjkVSjfNsohJTaPAcjNJkgYI9QDIUhqmY/hEWGaKFM?= =?us-ascii?Q?M+lOwho/EqxoRk4eShfKxBJOx7gyqvzUtuW191eh/6+oYUwWSjN6h/nN5GKw?= =?us-ascii?Q?F0bpq5gOz/NHs4x00pEynNLD0AEpZYX336KBV398X/QCQlYiUjb4qZDOvUGR?= =?us-ascii?Q?i6PfAyAA2nmc3hBGuMoXqCiQZQCUPcWOfBdiF76Cccsq3ufs1xZzRVBXM890?= =?us-ascii?Q?+/zKwHgxfIr49E7ReCwQ37PNFM93ufoSkwW94aiAPbntUt1BQywH86z7fovf?= =?us-ascii?Q?ch1DWZDhfGfhVlP6bSRLqlQ9rDFcHsmP5duV2y5v4TUkUfTHMN0YxtMrRCIq?= =?us-ascii?Q?sf+pIPglq8/VnEdmNyRK7lukG/dsBlWkWPCXWpawPPBbIxb39ZZsj7I5b7LC?= =?us-ascii?Q?6BuZZNqHag=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6ecbfdb8-30f9-4f0f-624d-08dee37db65c X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:40.5388 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: s0SOv9HiwnOojwDy80XeXsXGmbcvbyh68LG3q3vOH4LczvuXtxD2WxHizaosOJydtC+VIsjfCkQE+kXpRtUbPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB8081 Content-Type: text/plain; charset="utf-8" Describe the generic resctrl mechanism that lets a native control emulate the legacy MB control so the MB: schemata line keeps working for existing tools when the default MB control has no hardware of its own. Document the info//resource_schemata directory, its per-control status file, and the writable legacy/native mode file, independent of any particular architecture. Architecture-specific examples are added separately. Signed-off-by: Fenghua Yu --- Documentation/filesystems/resctrl.rst | 93 +++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesyst= ems/resctrl.rst index e4b66af55ffb..0de86d00c0a6 100644 --- a/Documentation/filesystems/resctrl.rst +++ b/Documentation/filesystems/resctrl.rst @@ -81,6 +81,28 @@ to modify those settings. Each subdirectory contains the following files with respect to allocation: =20 +"resource_schemata": + Directory describing the controls exposed for each alloc-capable + resource (for example L3, L2, and MB). Each control has its own + subdirectory. Control names are formed from the resource name and + an optional suffix when a resource exposes more than one control + (for example ``MB`` and ``MB_NODE`` on MBA resources). + + Each control subdirectory is read-only and contains ``scope`` + and ``type`` files. Bandwidth (scalar) controls also expose a + ``status`` file that reads ``enabled`` when the control is backed + by bandwidth-control hardware and ``disabled`` otherwise. + + On resources that support control emulation (see "MBA control + emulation" below), this directory also contains a writable + ``mode`` file that selects the active control mode (``legacy`` + or ``native``). This is not the same as the per-resource-group + ``mode`` file described below under "Resource Groups", which + selects shareable/exclusive cache allocation. Switching emulation + modes only changes observable behaviour when the default control + is disabled and emulated by another control. On resources that do + not support control emulation, no ``mode`` file is created. + Cache resource(L3/L2) subdirectory contains the following files related to allocation: =20 @@ -617,6 +639,10 @@ When control is enabled all CTRL_MON groups will also = contain: file. On successful pseudo-locked region creation the mode will automatically change to "pseudo-locked". =20 + This is not the ``mode`` file under ``info//resource_schemata/`= `, + which selects MBA control emulation mode (``legacy`` or ``native``); see + "MBA control emulation" below. + "ctrl_hw_id": Available only with debug option. The identifier used by hardware for the control group. On x86 this is the CLOSID. @@ -966,6 +992,73 @@ Memory b/w domain is L3 cache. =20 MB:=3Dbandwidth0;=3Dbandwidth1;... =20 +MBA control emulation +--------------------- +Some platforms expose memory bandwidth allocation through a native control +(for example a node-scoped control) rather than the legacy ``MB`` control +that existing tools expect. To preserve backward compatibility, legacy mode +(the default) keeps the ``MB:`` entry in ``schemata`` when the default +``MB`` control has no hardware of its own. A native control emulates ``MB`` +behind the scenes so user tools that read or write only the ``MB:`` line +continue to work. In native mode the disabled ``MB`` control has no +``schemata`` line; tools use the native control's line instead. + +Nesting under ``resource_schemata`` and schemata mirroring take effect +only when an architecture driver configures which control emulates which +(for example by setting the ``emulated_by`` relationship described in the +kernel API). + +When the default ``MB`` control has no MBW hardware of its own +(``status`` reads ``disabled``), it is emulated by a native control in +legacy mode. In that case: + +- The native control is nested under ``MB`` in + ``info/MB/resource_schemata/``. +- Schemata reads and writes for the ``MB:`` line are mirrored through + the native control so both lines show and update the same values. + +When ``MB`` is enabled, the native control is a sibling of ``MB`` in +``info/MB/resource_schemata/``, and the two controls operate +independently. + +Emulation mode +~~~~~~~~~~~~~~ +Whether a disabled control is emulated is selected by the writable +``mode`` file in ``info/MB/resource_schemata/``. This is not the same +as the per-resource-group ``mode`` file under each ``/`` directory, +which selects shareable/exclusive cache allocation; see "Resource Groups" +above. Reading it shows the available modes with the active one in bracket= s, +for example:: + + # cat /sys/fs/resctrl/info/MB/resource_schemata/mode + [legacy] native + +``legacy`` (default): + A disabled ``MB`` control is emulated by a native control. The + native control is nested under ``MB`` in + ``info/MB/resource_schemata/`` and schemata reads and writes for + the ``MB:`` line are mirrored through it. This keeps the ``MB:`` + entry working for existing tools. + +``native``: + No emulation is performed. A disabled ``MB`` control has no ``MB:`` + schemata line, the native control is a sibling of ``MB`` directly + under ``info/MB/resource_schemata/``, and each visible schemata line + only reflects its own hardware. + +The mode is changed by writing to the file:: + + # echo native > /sys/fs/resctrl/info/MB/resource_schemata/mode + +Switching mode rebuilds the ``info/MB/resource_schemata/`` control +subdirectories so their nesting matches the new mode. + +While a mode write is being processed the control subdirectories are torn +down and recreated, so a concurrent reader may briefly observe +``resource_schemata/`` containing only the ``mode`` file. This is expected: +the control subdirectories are informational only and the actual bandwidth +configuration in each group's ``schemata`` file is unaffected. + Memory bandwidth Allocation specified in MiBps ---------------------------------------------- =20 --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011012.outbound.protection.outlook.com [40.107.208.12]) (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 55BD33BCD2C for ; Thu, 16 Jul 2026 21:03:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.12 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235840; cv=fail; b=Ue8kUAHrhS84paBzzQ27iHDtLcM73a8nFjSUQn3I9WMpYcm0aANRsD3glamvjNLW21qJFY2qNRPBEr+BiPwvmEoz7qsHVzZGh3fOA1vywFhlCj9vdileZ9hDtwXwcCBY8TSUS/rJAvn757wGWKDdEk4EMgValpZd71mpQ7D7Qvk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235840; c=relaxed/simple; bh=LV7xg479QkBirIrU74YbO6CSw1bgrGikcsaFpbfijy8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WP7yiOz/sEKxTuagpI5ZHUAfEn4jqxleyuhpIE/J3foN6TY7y49D/LBoSrju116vAMZpbwmj+MBuqqCgx5Ej5hZ/9/27FGu5+sxKTkEkZjTh+Ka+G4x8zjpPiPw8FxmLvpP9z3C8NjLt0XAAQWW13U7wqwFf4ru9FizjeqnsnYc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=dP1svzBu; arc=fail smtp.client-ip=40.107.208.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="dP1svzBu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nUMJZgAw17rRayDJlUo+p2Qtb1T+VJ/qzqAqNwpGLUEovbAco1ndye/6Gbp8iPZ9jNczUOwGQJiCJ3/cwofCs5iU2IBHLYWQLL48D1UeWfJ+P5ayF3rsMizr2i6yFYD3ly6P/JpYY0cH4upoVPgXdeEPUcu5Rb3unNaR5BmbDZjUbcrcokt7woDhpMT1gIx39oti0eEjUbjlEzo954pL/C3Zk4eiUctCvjdf2f4qN/gBPfBISOTA7FO05SMyI2QCXPTLLaKGK0RsGiv9++gcqcZiuiwpzwvrgBfzI16rtncEjEKgjuW7V9AmrOe+VmuI/Sc1pCTisA7pIO8Ot+MKeQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jo5xBFpIowb+NubplwX521jmHQMExZ1+U6cJ/MQ+k1k=; b=UTd6YtMm/uHEFxNQDLH0zWIWR9y4n0zY5yjYTuW2Y8O81EXJpoSvsFU4ETwmiNiq/4VcihXhTidmzn1rC6yARHCVAHSHeAg207ervJowLdOzqWOXCIpWTj6ygWae3Mvy0y+tsjg9UCO5Gp0C/PolThu3Ww6BUCykmyTN/uWe94lVaEF16kWcCWpRBRnL7qeRk/WVBFojmEeXzgNuxs/5HMjRl1EFp8JrRyhaLkA8+VoAMH5mOZPc0Y4Ctf+8hLC2VfYFuXOXtyc9FtJc0Nxj7GcvP+Qe+a1XpgDH9C0L+fEY7byNY1b9I/9ncD+koc16bG/OqAkyIjhkv5Wl6xhJCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jo5xBFpIowb+NubplwX521jmHQMExZ1+U6cJ/MQ+k1k=; b=dP1svzBuiq4IaKvnCRQg5iVct41uwlgk80SvoXvQqVAelKgOE6rq0loDvp9kw5pNsqEX+QOC2D1g7rNfh74IgTJjK6Ryw/jG5TQLwlIe6yBi+1cWqS88Re2uZ1Ys6qIabk0p4YCNvkkiFHV0NWFUFaa1TpoWWMrOxmWM9f5LNKT8nnSG/zfcTSeiqqMTiKNsi1sqa4iIkjo8TyBpzC7KA7yJxqQ+hadkLji+FrPieof6vA14qcE0dl8CNuvEE4sDsruOzF/WoC1XEdTkSaIjgcCoXIkRe+D0a7LpNOjvF+h2nbnt/XiOKqCHZtjc4AjJBHajEyfBM8xwvRGkbk5kfw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by DS7PR12MB8081.namprd12.prod.outlook.com (2603:10b6:8:e6::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:42 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:41 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 09/23] resctrl: De-hardcode L3 monitor infrastructure Date: Thu, 16 Jul 2026 14:02:59 -0700 Message-ID: <20260716210329.2914625-9-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0168.namprd03.prod.outlook.com (2603:10b6:a03:338::23) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|DS7PR12MB8081:EE_ X-MS-Office365-Filtering-Correlation-Id: fab65cb8-0f2a-40d8-8517-08dee37db730 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|1800799024|366016|6133799003|5023799004|11063799006|56012099006|18002099003|22082099003|10067099003|921020; X-Microsoft-Antispam-Message-Info: rfgfjtdI/WPkrJyTl998y2NyncHHMPpUdwNLf6agSPVMxbG6P7gKhq/7j3GcwPM8yFd9VsoViW+BYwifQDF3/vj3eW88FpUgVcIZ7cNZFxFY01ZmePtgqHJA0KjFHp4PY/7mHOlj/5QJP0Ali3J+3S5pmSnl6uJsbXQGh4xv/I/RoEEVdmc6qCCJDjJO6vpLVTF8K+gajF5h8xsUXBx2NjlfaOjR+9eKc/SixwAjWV8uze4CFFYlpoE2zatNV9yXDv14YYg7FAtaOKDHY4TNokZd+kbAPIjwzMeLiHpl37opInRcs1dCTMz2EGQZ3BVOAnFOKzCyXFBXi6Klp+3tbuaXUmMsbtwL+4Qeb59Ro4YbvMo8vSdT6apDa6X20Fszh0el5A0NF5hWvQq8jjY3Iddsnwn7/b1KiW5U3P8joz/TVsHaNoerL5g9rNEN2jH9nClnm7YKW7uj1Vh6xBb+ReFZIZVg5yOvTFIFxkpJ6jDI++WodPOK7OKi8JmNDSz4MvEHlf3QZWldheVNFvE43RBO3dqrPorzfmbcGbqOFFL9yZHyMYT1XEp7u+SLnlW5LQgVAj4FOVH1U0qNT2W9pUIEcOCzewhA9ckvG+4iZkjdJ0Nku3YJPQIVjcW4GMU9WfOYS5RdQYJvKhVt/AI5iRpr8k7toyMmJGiAwgTzvcOtkOaT4v35wd9Pjj6ZzRv8+lmEI21qyNlEyaZFzBYyZw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(1800799024)(366016)(6133799003)(5023799004)(11063799006)(56012099006)(18002099003)(22082099003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5uLDg+Za4smxopI4X79NE9cppGZjJmdXpDA0aJQTfZtINLuOoh9WYbzzLAjl?= =?us-ascii?Q?dLEzcNa/+9o081Aqxotoh04VAxOBh2yNiQye3P4LgR5EaT5jpSakU+FTtbOo?= =?us-ascii?Q?05Zn5ZqrHN0iqz2bIRYFs3sw5JvNhNXayfkxQvMLYqt0+8hyG+jSJryKBDxx?= =?us-ascii?Q?6y2LuZzngRri9NzDfUZmI8BAv+1RqX3DwW9Lb7qGvbN9T/1kfllggDg5KPHm?= =?us-ascii?Q?meKRXy73MKf8nkhy7QhrU51ZUZFBFwmVUJaJW1Z0O25l6/veuXxu9W/sNI+X?= =?us-ascii?Q?E+VkNkdorkCETXZERhDT7qGnuaBCS5A8moe6FN+pkZ2A10Gc2o8NpLiPF1Su?= =?us-ascii?Q?gekrLUFICNNhKRyTtnYdU1ul2+gnyJ8Hd3YuWpdk0D8LisBcY+FHNMsefo/j?= =?us-ascii?Q?B1mOJCboGMfSYNoWtuwZifVgv0UwcV44gTceMaGvJxWchl9NDmafTuZEYpUQ?= =?us-ascii?Q?laTYunjOYax3UZAtn+xzPzw2IJGzZt+IjE+L2oi+huJGPdG9ulcQHRCOHq7P?= =?us-ascii?Q?Foj4cfpGAe0fdCTzx6LQuj9wJFEF/9I/72fGxK+yCQI8Tk+iW5DNcWvMSxkA?= =?us-ascii?Q?567f/A7+mvT+zFcjZ405nQqmMlJ/lBwUeJK6YJjjyB6NESZy2CaFzAAc0CHb?= =?us-ascii?Q?zFnGWGvprMy7RBNTAxEQnVRT6yvg4t4der3y6eu+vV5kIhRyc/VFegDuUAzZ?= =?us-ascii?Q?vEgT5G0rbpdvzKrp66zQ0y7tqTAMzpuakMefbCPbTPphEvPyL1IhrdLmyiFb?= =?us-ascii?Q?pE4eoJegAjc5aEsn266Uj+mYDG+5c8ikvb09LsPC4jNs1MtKQvM3fOnnAHjH?= =?us-ascii?Q?660MK2Wx+vvkpe5EtaykMqqajrJPbBBKpN+ximYUP3h/ZcN6H3SamvH1NLCb?= =?us-ascii?Q?hmhOmX+/aL1l1gSxN6Imsg0DDpQoyGVOl+4qGLfKAcrxuC32idF4fENWbopt?= =?us-ascii?Q?xzK85IvI37YpWqO0ALC572PA5ocUpoci9+dsguxeHG7d0mpoX54BRLONowlR?= =?us-ascii?Q?Lx+StzMxbMkBAPky44AzgXXqCV2utsrNM4jdkeUmyTcRgYJBkWK9ydEPyRR1?= =?us-ascii?Q?YIeD8xhiD/0+r0bXdMVk0qSoLgX17I54grSKPpqQyutCRU5TYSsg9liQMMVy?= =?us-ascii?Q?4YWqozHWaXF3DF+pis3v0qFhQYKJ6QBggKK+zgSs/DxY8iWNjoxkbKdTRJmN?= =?us-ascii?Q?54GXsBHHNx7qxFU4tN4SYZbIp7WK2VnsfXC4zJiWW4lRSI3wYQSN2fPQ5onT?= =?us-ascii?Q?DesQOcj2zGLadv2+84m6wx3k3UahMjFEvlHrRRFJnT9x+YqmaZv7szF5Tdaj?= =?us-ascii?Q?WUfvMSRNiwN5RVsgoFspAVHnFRNW/3EtZ6Y5OhmhkZXtQqHwAfhoUwuHCt3t?= =?us-ascii?Q?YpSXOCec9/r6r/0OEeOu8iJVAR1KrL1w0RZT6dxIOcgN1MAbsnUy+OJOBX17?= =?us-ascii?Q?G6JOs5ib5gmSW98qdW5ru8LG/G3SgBDEjXY3QamNghKVzujj70z7OHtuKfcL?= =?us-ascii?Q?Sy+/nDD8Xy9jTAOExLvJAo5KjPpJQvq/pFeiGivDv5XWK56akebmCuoIkgSc?= =?us-ascii?Q?BNbL8yxT/lIQRTQ37Qvv8pXQHPBtPVkqTFXy+2EVs0Xx2eVbDCL7Z43/5bc/?= =?us-ascii?Q?droMEDBjK3BNfdmSWPMo9NnGH0Siyex4CL23OIjZQrroySjheToT/c3qW0Yo?= =?us-ascii?Q?KLK8+bedlPJfeajpwS96W7H337slfMTiJ35OfI8eRhFnL7h2WhuXzTfL4Qya?= =?us-ascii?Q?ux2BE8YEjg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fab65cb8-0f2a-40d8-8517-08dee37db730 X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:41.8567 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8zEKkahxGGGcYvH4xtw/obAl8hdiaXOqjYnZNxqrnsnkLgh+shbHG3Z0d6hObFGBI02mCU3athYlxQ87N0YEYg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB8081 Content-Type: text/plain; charset="utf-8" ARM MPAM can expose MBM counters on an MBA (memory-level MSC) resource as well as on L3, but the resctrl monitor core hardcodes RDT_RESOURCE_L3 in domain validation, online/offline, and assignment paths. That prevents reusing the same monitor infrastructure for MBA without copying large chunks of code. Generalise the monitor layer to operate on any resource ID while keeping existing L3 userspace behaviour unchanged: - Rename resctrl_l3_mon_resource_init/exit to resctrl_mon_init/exit - Factor MBM counter assignment show/write helpers for reuse - Validate monitor domains using r->rid instead of hardcoding L3 - Allow monitor domain online/offline for any resource ID Signed-off-by: Shanker Donthineni Signed-off-by: Fenghua Yu --- fs/resctrl/internal.h | 4 +- fs/resctrl/monitor.c | 94 +++++++++++++++++++++++++++---------------- fs/resctrl/rdtgroup.c | 35 +++++++++++----- 3 files changed, 86 insertions(+), 47 deletions(-) diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h index 4da54d2d816b..1cca9b147fdb 100644 --- a/fs/resctrl/internal.h +++ b/fs/resctrl/internal.h @@ -380,9 +380,9 @@ int alloc_rmid(u32 closid); =20 void free_rmid(u32 closid, u32 rmid); =20 -int resctrl_l3_mon_resource_init(void); +int resctrl_mon_init(void); =20 -void resctrl_l3_mon_resource_exit(void); +void resctrl_mon_exit(void); =20 void mon_event_count(void *info); =20 diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c index 8dfc54f8a1f2..742429e18b8a 100644 --- a/fs/resctrl/monitor.c +++ b/fs/resctrl/monitor.c @@ -427,7 +427,7 @@ static int __l3_mon_event_count(struct rdtgroup *rdtgrp= , struct rmid_read *rr) struct mbm_state *m; u64 tval =3D 0; =20 - if (!domain_header_is_valid(rr->hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3)= ) { + if (!domain_header_is_valid(rr->hdr, RESCTRL_MON_DOMAIN, rr->r->rid)) { rr->err =3D -EIO; return -EINVAL; } @@ -573,7 +573,7 @@ static void mbm_bw_count(struct rdtgroup *rdtgrp, struc= t rmid_read *rr) struct rdt_l3_mon_domain *d; struct mbm_state *m; =20 - if (!domain_header_is_valid(rr->hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3)) + if (!domain_header_is_valid(rr->hdr, RESCTRL_MON_DOMAIN, rr->r->rid)) return; d =3D container_of(rr->hdr, struct rdt_l3_mon_domain, hdr); m =3D get_mbm_state(d, closid, rmid, rr->evt->evtid); @@ -1638,9 +1638,9 @@ int resctrl_available_mbm_cntrs_show(struct kernfs_op= en_file *of, return ret; } =20 -int mbm_L3_assignments_show(struct kernfs_open_file *of, struct seq_file *= s, void *v) +static int mbm_assignments_show(struct kernfs_open_file *of, struct seq_fi= le *s, + void *v, struct rdt_resource *r) { - struct rdt_resource *r =3D resctrl_arch_get_resource(RDT_RESOURCE_L3); struct rdt_l3_mon_domain *d; struct rdtgroup *rdtgrp; struct mon_evt *mevt; @@ -1685,6 +1685,12 @@ int mbm_L3_assignments_show(struct kernfs_open_file = *of, struct seq_file *s, voi return ret; } =20 +int mbm_L3_assignments_show(struct kernfs_open_file *of, struct seq_file *= s, void *v) +{ + return mbm_assignments_show(of, s, v, + resctrl_arch_get_resource(RDT_RESOURCE_L3)); +} + /* * mbm_get_mon_event_by_name() - Return the mon_evt entry for the matching * event name. @@ -1779,10 +1785,10 @@ static int resctrl_parse_mbm_assignment(struct rdt_= resource *r, struct rdtgroup return -EINVAL; } =20 -ssize_t mbm_L3_assignments_write(struct kernfs_open_file *of, char *buf, - size_t nbytes, loff_t off) +static ssize_t mbm_assignments_write(struct kernfs_open_file *of, char *bu= f, + size_t nbytes, loff_t off, + struct rdt_resource *r) { - struct rdt_resource *r =3D resctrl_arch_get_resource(RDT_RESOURCE_L3); struct rdtgroup *rdtgrp; char *token, *event; int ret =3D 0; @@ -1827,6 +1833,13 @@ ssize_t mbm_L3_assignments_write(struct kernfs_open_= file *of, char *buf, return ret ?: nbytes; } =20 +ssize_t mbm_L3_assignments_write(struct kernfs_open_file *of, char *buf, + size_t nbytes, loff_t off) +{ + return mbm_assignments_write(of, buf, nbytes, off, + resctrl_arch_get_resource(RDT_RESOURCE_L3)); +} + static int closid_num_dirty_rmid_alloc(struct rdt_resource *r) { if (IS_ENABLED(CONFIG_RESCTRL_RMID_DEPENDS_ON_CLOSID)) { @@ -1866,40 +1879,21 @@ static void closid_num_dirty_rmid_free(void) } } =20 -/** - * resctrl_l3_mon_resource_init() - Initialise global monitoring structure= s. - * - * Allocate and initialise global monitor resources that do not belong to a - * specific domain. i.e. the closid_num_dirty_rmid[] used to find the CLOS= ID - * with the cleanest set of RMIDs. - * Called once during boot after the struct rdt_resource's have been confi= gured - * but before the filesystem is mounted. - * Resctrl's cpuhp callbacks may be called before this point to bring a do= main - * online. - * - * Return: 0 for success, or -ENOMEM. - */ -int resctrl_l3_mon_resource_init(void) +static void resctrl_mon_resource_init(struct rdt_resource *r) { - struct rdt_resource *r =3D resctrl_arch_get_resource(RDT_RESOURCE_L3); - int ret; + unsigned long fflags; =20 - if (!r->mon_capable) - return 0; - - ret =3D closid_num_dirty_rmid_alloc(r); - if (ret) - return ret; + fflags =3D RFTYPE_RES_CACHE; =20 if (resctrl_arch_is_evt_configurable(QOS_L3_MBM_TOTAL_EVENT_ID)) { mon_event_all[QOS_L3_MBM_TOTAL_EVENT_ID].configurable =3D true; resctrl_file_fflags_init("mbm_total_bytes_config", - RFTYPE_MON_INFO | RFTYPE_RES_CACHE); + RFTYPE_MON_INFO | fflags); } if (resctrl_arch_is_evt_configurable(QOS_L3_MBM_LOCAL_EVENT_ID)) { mon_event_all[QOS_L3_MBM_LOCAL_EVENT_ID].configurable =3D true; resctrl_file_fflags_init("mbm_local_bytes_config", - RFTYPE_MON_INFO | RFTYPE_RES_CACHE); + RFTYPE_MON_INFO | fflags); } =20 if (resctrl_is_mon_event_enabled(QOS_L3_MBM_LOCAL_EVENT_ID)) @@ -1917,21 +1911,51 @@ int resctrl_l3_mon_resource_init(void) NON_TEMP_WRITE_TO_LOCAL_MEM); r->mon.mbm_assign_on_mkdir =3D true; resctrl_file_fflags_init("num_mbm_cntrs", - RFTYPE_MON_INFO | RFTYPE_RES_CACHE); + RFTYPE_MON_INFO | fflags); resctrl_file_fflags_init("available_mbm_cntrs", - RFTYPE_MON_INFO | RFTYPE_RES_CACHE); + RFTYPE_MON_INFO | fflags); resctrl_file_fflags_init("event_filter", RFTYPE_ASSIGN_CONFIG); if (r->mon.mbm_cntr_configurable) resctrl_file_mode_init("event_filter", 0644); resctrl_file_fflags_init("mbm_assign_on_mkdir", RFTYPE_MON_INFO | - RFTYPE_RES_CACHE); + fflags); resctrl_file_fflags_init("mbm_L3_assignments", RFTYPE_MON_BASE); + resctrl_file_fflags_init("mbm_assign_mode", RFTYPE_MON_INFO | + fflags); } +} + +/** + * resctrl_mon_init() - Initialise global monitoring structures. + * + * Allocate and initialise global monitor resources that do not belong to a + * specific domain. i.e. the closid_num_dirty_rmid[] used to find the CLOS= ID + * with the cleanest set of RMIDs. + * Called once during boot after the struct rdt_resource's have been confi= gured + * but before the filesystem is mounted. + * Resctrl's cpuhp callbacks may be called before this point to bring a do= main + * online. + * + * Return: 0 for success, or -ENOMEM. + */ +int resctrl_mon_init(void) +{ + struct rdt_resource *r =3D resctrl_arch_get_resource(RDT_RESOURCE_L3); + int ret; + + if (!r->mon_capable) + return 0; + + ret =3D closid_num_dirty_rmid_alloc(r); + if (ret) + return ret; + + resctrl_mon_resource_init(r); =20 return 0; } =20 -void resctrl_l3_mon_resource_exit(void) +void resctrl_mon_exit(void) { struct rdt_resource *r =3D resctrl_arch_get_resource(RDT_RESOURCE_L3); =20 diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index d81877a5cd72..d9876bbc6365 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -5032,10 +5032,17 @@ void resctrl_offline_mon_domain(struct rdt_resource= *r, struct rdt_domain_hdr *h if (resctrl_mounted && resctrl_arch_mon_capable()) rmdir_mondata_subdir_allrdtgrp(r, hdr); =20 - if (r->rid !=3D RDT_RESOURCE_L3) + /* + * The remaining teardown operates on struct rdt_l3_mon_domain, which + * only backs the L3 and memory bandwidth monitor resources. Other + * mon_capable resources (e.g. the package-scoped RDT_RESOURCE_PERF_PKG) + * embed a smaller domain struct, so casting their header here would read + * past the allocation. + */ + if (r->rid !=3D RDT_RESOURCE_L3 && r->rid !=3D RDT_RESOURCE_MBA) goto out_unlock; =20 - if (!domain_header_is_valid(hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3)) + if (!domain_header_is_valid(hdr, RESCTRL_MON_DOMAIN, r->rid)) goto out_unlock; =20 d =3D container_of(hdr, struct rdt_l3_mon_domain, hdr); @@ -5068,7 +5075,7 @@ void resctrl_offline_mon_domain(struct rdt_resource *= r, struct rdt_domain_hdr *h * Called when the first CPU of a domain comes online, regardless of wheth= er * the filesystem is mounted. * During boot this may be called before global allocations have been made= by - * resctrl_l3_mon_resource_init(). + * resctrl_mon_init(). * * Called during CPU online that may run as soon as CPU online callbacks * are set up during resctrl initialization. The number of supported RMIDs @@ -5142,10 +5149,18 @@ int resctrl_online_mon_domain(struct rdt_resource *= r, struct rdt_domain_hdr *hdr =20 mutex_lock(&rdtgroup_mutex); =20 - if (r->rid !=3D RDT_RESOURCE_L3) + /* + * domain_setup_l3_mon_state() and the workers below operate on struct + * rdt_l3_mon_domain, which only backs the L3 and memory bandwidth + * monitor resources. Other mon_capable resources (e.g. the + * package-scoped RDT_RESOURCE_PERF_PKG) embed a smaller domain struct, + * so skip the per-RMID setup for them and only create their filesystem + * directories. + */ + if (r->rid !=3D RDT_RESOURCE_L3 && r->rid !=3D RDT_RESOURCE_MBA) goto mkdir; =20 - if (!domain_header_is_valid(hdr, RESCTRL_MON_DOMAIN, RDT_RESOURCE_L3)) + if (!domain_header_is_valid(hdr, RESCTRL_MON_DOMAIN, r->rid)) goto out_unlock; =20 d =3D container_of(hdr, struct rdt_l3_mon_domain, hdr); @@ -5268,13 +5283,13 @@ int resctrl_init(void) =20 io_alloc_init(); =20 - ret =3D resctrl_l3_mon_resource_init(); + ret =3D resctrl_mon_init(); if (ret) return ret; =20 ret =3D sysfs_create_mount_point(fs_kobj, "resctrl"); if (ret) { - resctrl_l3_mon_resource_exit(); + resctrl_mon_exit(); return ret; } =20 @@ -5309,7 +5324,7 @@ int resctrl_init(void) =20 cleanup_mountpoint: sysfs_remove_mount_point(fs_kobj, "resctrl"); - resctrl_l3_mon_resource_exit(); + resctrl_mon_exit(); =20 return ret; } @@ -5348,7 +5363,7 @@ static bool resctrl_online_domains_exist(void) * When called by the architecture code, all CPUs and resctrl domains must= be * offline. This ensures the limbo and overflow handlers are not scheduled= to * run, meaning the data structures they access can be freed by - * resctrl_l3_mon_resource_exit(). + * resctrl_mon_exit(). * * After resctrl_exit() returns, the architecture code should return an * error from all resctrl_arch_ functions that can do this. @@ -5375,6 +5390,6 @@ void resctrl_exit(void) * it can be used to umount resctrl. */ =20 - resctrl_l3_mon_resource_exit(); + resctrl_mon_exit(); free_rmid_lru_list(); } --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011021.outbound.protection.outlook.com [40.107.208.21]) (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 2A4CD3C09FA for ; Thu, 16 Jul 2026 21:04:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235843; cv=fail; b=gUk7Q41hMsfrg9z5uNSIEjLcYloyAv9qk8kKwN1GVj+xsEd2P3lyJ0Yn/Rqd/ZCqoXxCQm7nmYrbSEMOCbS+fbHPqP6mgSGy7n8vGy1h3AOdTfFNkYzYNaZWPPNs5DHx/sN+Ai3aKIcaXt1JCYUDHl/9e15e7xxn3QgLocY4Smw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235843; c=relaxed/simple; bh=Di1hED7umc+jw8yurifwYXmelrzqobmv3SZrBw2r4XI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=U+/d2QVNayGzpNzJtJd5ImABHKoB7hMC7ahwyGNIj3GadAOKACzPe2BahQV2mn1Gy3BUq5zlo297LA03ABGWLZ87zC0QfqEsa/J3qpI8Fx50wWk0ODRK20DqKCc16a6tFfOWlQAqjdObD7gDPSoPbcVeXCXgIM96/HkvEULmAJc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=T5W6vieF; arc=fail smtp.client-ip=40.107.208.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="T5W6vieF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kQkeY7ZWqk1BIm/9doWzrgC76ijCErta9Ds7NDhpMUXoVag+73dQw+rIOqBnYeNYLQL69S4jt+O9jqv/pxmRrLxtobA/Rkq34dTsXjOuF32QhdxRjZWNmx70ONaIAFNpEMbIX16xy/bCW6n113G3Uocdv2swrubHkoOoGJL+2pSVP+dfnoP7TQ2IeHqDUnRm8/V5JFwcsGYGvfwCPIzBQgGCg/RRPZY3SQ+7fyF0g/FVXzxUZKn5wHyjrf/PjRnKzmPK83yQ3dNTeWLIsFUSR30RvD0xsfCfLkMm8k1vb7BVXWDvphJoOF8lGJDI1t77dXjiv2Ua8Rdq6QhFvwwYkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hDCoD9gopMkw6squa+UCEijXUtZb8e4n69AggqiNbiE=; b=XnDDk2F6fxZ8DBYocZ8P8HqvEZrypWX9zJ7V2XX6dAow1XEqn0KUYjRGWsnGy35hL+y2D+X/+1GIy0HCTvAysZVR1qqBlhnHl6lD5rHaiAjrajSCR2MiDqANJwcI9fUPI0BFnMyoyL9inl4YdlNZpyMhl4Ag7xKnPCO4b0+QLeVB2mxvJXtuKhrplCP8cDA7PKMo4OJSZh6LJ/pFdLOcaYUR1etDnVD73UFtLUrQCe7+J1mATxmN72lOI0r2xJCekCtPw/hsRIkxvei2i+VLW+U6pXjFMK4zjelPmPlLX/9LSFP3GdQedvLhyQINTY8tyZ959D8bdcuLnbsNGGv3dA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hDCoD9gopMkw6squa+UCEijXUtZb8e4n69AggqiNbiE=; b=T5W6vieFhBB2XUsdwAETUcTX7KaB5ofV5UPG71XeNyXB30gLc85MsGr1ZyyWl4uL1YFoKlH/65CIoEww+P80z7apOA3q4K4kjC6O1dEs4/fRosWfxzkVzOkYU2P2ubzXS1MsJx16JbndwmL0Po+6zBcU5JASRVIY9dlWAwXHy5BvjWRouikz8IMtp4a2e02KM586Z71n/5lRNMlCUjAvqxnNxXyVLUcmRv46Tq1ihQOuQiuhC7igUqALFiM62xvQ47ou/RhURVApSwrIlp00gdb9kfVfPOdie4N/cjGwiBgny1GG63/+BKgVY5aELv8IAqgd5InUnI03XkLSQjm9VQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by DS7PR12MB8081.namprd12.prod.outlook.com (2603:10b6:8:e6::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:43 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:43 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 10/23] resctrl: Expose MBA MBM counter assignment sysfs Date: Thu, 16 Jul 2026 14:03:00 -0700 Message-ID: <20260716210329.2914625-10-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ0PR03CA0071.namprd03.prod.outlook.com (2603:10b6:a03:331::16) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|DS7PR12MB8081:EE_ X-MS-Office365-Filtering-Correlation-Id: 0b9accd6-7d46-4062-e73c-08dee37db7f2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|1800799024|366016|6133799003|5023799004|11063799006|56012099006|18002099003|22082099003|10067099003|921020; X-Microsoft-Antispam-Message-Info: c4k3lKxPM6+ZS1frROxptPlpKGu3/3oUlHOWi3+qizRM2YKmo5SFQl/asN5Gfgygyi7DvHK2K0f34XDhmui1pN26z4gQTrtVv1odYJxiKyjSLu4Vrp3/rSyEXN30ukk4/r0qLGfEc8Kd22GPBsZghuuxampHeo3yTOvKHcyQSMS7IaudfB4J1YkC4v3R2tJWCnEzT7JtGp1ajJ+mZ3AxCxkuksniWx48ID0zWgu2rh6c3aSTbpyr4Xp5p5obz1EW/OAqsTSJmR8U1xy8+urpxhFBGaR2Mg07e7OzhaFt3PcR9jV1VPi/2Gkg7KDdhtfuHHCvoBieeXszjjnbBgrM2RaREGC9Ri1//Gyj01ykc9BPsh2EOmIvfQB98lAXPsTzSVoanVATvYSVRjaflfP9Q1YELY0sgLL/cIJ9OQ1Utb+sTTBGW5ssyy1OhEjfn4L56qoLbLhGPMAg/Xp6HeblYwXZWcQ0tXv+PcJSpuT/epPMx9ig+vwAEU05k5rneue//zWWZzmTUY/OoFWFIcf4R/LTgJiVBLPnolqemPGbHFzi0UVLmoD4f4Pt9Fu27Bxu+U290eIIA++W/cPn/1S4PzsoRxjbgT0ddzNs6y/UDeBErSasM/oS0B+jDWwWtHD5gi0vAsFiYrBuZ8TsHgYUAq7LYl27nmzzeUIPsyQFrbZz2B9t+yQSOV3uRMToTQMwZbj3+LfbshYArklP/k6nZA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(1800799024)(366016)(6133799003)(5023799004)(11063799006)(56012099006)(18002099003)(22082099003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?bfDWt5rGG2TYhtEWUCt9JXO6xW2fuW8EiI2o51GMJGQeGdkD9U7aBk5j1/Bo?= =?us-ascii?Q?Vtw4AkJqcltdB7mXqPH+TUDqB+KLTaNBM2nc9x2e8dg9DAtjYddFFYzB88DP?= =?us-ascii?Q?giBBzS5Kn00JUHF+pnYLEpSa3MLuB2K8m3QFVK06K9mwqoekh6tqoTLoV165?= =?us-ascii?Q?cN2K6Vmi6FsCwT5elEGBifxE6PlT+aqSX3EXp1v+RogQ6L3j0mwURjz0YKx+?= =?us-ascii?Q?HpbhqtfjfXI6U+1hVBCUajGiuEhto3TBhoQGaFM9GRhAG0D1Cchttzh+miES?= =?us-ascii?Q?iiME+DcO4TC7k4VpXZlKx796HNaM09KUFZQSOlsPP97sF8E8fEmM/RKtXTwR?= =?us-ascii?Q?luPW6MVFuBKCs3Q7PxOKykfi6Q7E6G5/+M/kyrdmj8zLclAxXPuv2FPe+/VD?= =?us-ascii?Q?Jl7jdqtGHzif7VlawoVAndKCtxBKUwXPd3gOrsuKmp3plMkSIn+kant7Lhan?= =?us-ascii?Q?67TKGUc/VVi7CV0ylydXWsRWQeALrsG7ERUD3AkHDSQ4emzlpxRyaaknbkQd?= =?us-ascii?Q?MlBBea7IdtiqCijzCgrE1V6LwDChle8fuUR1U9stnd32y076f4U3enh1y2mT?= =?us-ascii?Q?mvS3ZmEAyKmBdYm3zWNv9Toixb93wHuiXnvMFbwHtCcfoheXd89Fa8gGs2+5?= =?us-ascii?Q?mMhqLP3OgQ81PsQaD0Yq5YpmQA+x/QbuDTr0h0wHjlVdsxWSLxGPEpyPP2zA?= =?us-ascii?Q?+obxfXlKRGZ39D01NYjrCDGBRyCB41emmWv53pNPBl9Vx5GTHE3LVYca5lTn?= =?us-ascii?Q?SS1+TRHmp9HhP5F6yIhtKXRP5P14h+dcrX0m7P8Klq7RdzpnMtSJBGxC/p0F?= =?us-ascii?Q?tv9yD0OQf//4RkHMB36m/04gbwsJXqOnTBzDsrjG107cV3IR5C3Zg3pXV5Wm?= =?us-ascii?Q?CZzAFUL2xCFQH4l7ASA0LnLmj8jQPqCovJ8CSLZ6d31h3rS+UGEM+b34cL2Q?= =?us-ascii?Q?BgDFAb6FfxPNP9o3bS1pa/MeVB9W1g30ZdM7oWv3d+uzmFnDCaTx+8quPsgu?= =?us-ascii?Q?xSEScDmwR9ocb7pQUNxp9Oe1RLMQxrYzUK80ZA7UNxBUlEVLz5xiv7DDG8hk?= =?us-ascii?Q?vmKfLN5UqOsKeq6KwC1nvVB6bA3lug2n2h8H/T4eoXLyUCwAxEMcAXKMavEs?= =?us-ascii?Q?u6yDSG0HI2Gg/FvULkALjz9EgBIwQYb7KQJGII8DRKVdK5oFzMaYb52XsAUH?= =?us-ascii?Q?fpClysUk0ubyRqJJoR/avoDgOm8Qd+NDKUQqg47HMa0CByzipGrncswO87Jp?= =?us-ascii?Q?fmunDh0lcuIxdZzFfXen0M2gxXhGasSWH98/mmJHLmfm4CM3D5FQT19Byz2v?= =?us-ascii?Q?838vrd3WthnqaHIgg4+ly0eegrlku0OKJ/7vZlcvp8wTl3iHRiUWI1uRT6vA?= =?us-ascii?Q?1dcr4J7g/EuHUBgey/h8njQNj0GvfHyJDnEFVfnUjnVEvoUDL1/hRBlh4zdC?= =?us-ascii?Q?AY4THs875urC6sXHDhOdC4W98EEyRprmrteN1uartPGJa5b6VMj6wagGcbCE?= =?us-ascii?Q?5xqoRLS+CvngQklEJ1JcVqsM90P/wxaMSV8WOK/fww8K8AstOktosJPfNbdN?= =?us-ascii?Q?yHmTIxcLQmmFB3BIKbm/T+fvy+a4FA4I4CY6luKnLAeU/T7CeReqJrSgaVNA?= =?us-ascii?Q?eaV+uUl/Cqb5Jbt1LR9wYO1v7HNNh62AunYyHJoeDhUgYDUGJt7H/Fog8gg4?= =?us-ascii?Q?wLrHhKnlJeHXncLi0RiCjfJSZbsv7mvpqpOZigg+9plnMUx9BuCzX8pTScwS?= =?us-ascii?Q?PcbouZ8rcg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0b9accd6-7d46-4062-e73c-08dee37db7f2 X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:43.1142 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: suNH5iwle+EnDxZFu4Te25lcNJnYPK+QZOdTNw+PcCB+t3L3O/xmUQpjW0g0W6VRtW3x3XXr0RSb7vxyL03QWQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB8081 Content-Type: text/plain; charset="utf-8" When MBWU monitoring is backed by an MBA resource, userspace still needs the same counter-assignment interface as on L3, but keyed to MBA domains and exposed as mbm_MB_assignments rather than mbm_L3_assignments. Add the MBA-side sysfs hooks and initialise MBA monitor metadata during resctrl_mon_init() so mbm_* file visibility follows the resource being configured. Signed-off-by: Shanker Donthineni Signed-off-by: Fenghua Yu --- fs/resctrl/internal.h | 5 +++++ fs/resctrl/monitor.c | 27 +++++++++++++++++++++++++-- fs/resctrl/rdtgroup.c | 11 ++++++++--- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h index 1cca9b147fdb..3bf512bf2d9f 100644 --- a/fs/resctrl/internal.h +++ b/fs/resctrl/internal.h @@ -478,6 +478,11 @@ struct resctrl_ctrl *resctrl_resource_ctrl_get_default= (struct rdt_resource *r); const char *resctrl_ctrl_name_str(enum resctrl_ctrl_name name); bool resctrl_ctrl_is_default(struct resctrl_ctrl *ctrl); =20 +int mbm_MB_assignments_show(struct kernfs_open_file *of, struct seq_file *= s, void *v); + +ssize_t mbm_MB_assignments_write(struct kernfs_open_file *of, char *buf, s= ize_t nbytes, + loff_t off); + #ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK int rdtgroup_locksetup_enter(struct rdtgroup *rdtgrp); =20 diff --git a/fs/resctrl/monitor.c b/fs/resctrl/monitor.c index 742429e18b8a..db19e5eac1f9 100644 --- a/fs/resctrl/monitor.c +++ b/fs/resctrl/monitor.c @@ -528,6 +528,7 @@ static int __mon_event_count(struct rdtgroup *rdtgrp, s= truct rmid_read *rr) { switch (rr->r->rid) { case RDT_RESOURCE_L3: + case RDT_RESOURCE_MBA: WARN_ON_ONCE(rr->evt->any_cpu); if (rr->hdr) return __l3_mon_event_count(rdtgrp, rr); @@ -1691,6 +1692,12 @@ int mbm_L3_assignments_show(struct kernfs_open_file = *of, struct seq_file *s, voi resctrl_arch_get_resource(RDT_RESOURCE_L3)); } =20 +int mbm_MB_assignments_show(struct kernfs_open_file *of, struct seq_file *= s, void *v) +{ + return mbm_assignments_show(of, s, v, + resctrl_arch_get_resource(RDT_RESOURCE_MBA)); +} + /* * mbm_get_mon_event_by_name() - Return the mon_evt entry for the matching * event name. @@ -1840,6 +1847,13 @@ ssize_t mbm_L3_assignments_write(struct kernfs_open_= file *of, char *buf, resctrl_arch_get_resource(RDT_RESOURCE_L3)); } =20 +ssize_t mbm_MB_assignments_write(struct kernfs_open_file *of, char *buf, + size_t nbytes, loff_t off) +{ + return mbm_assignments_write(of, buf, nbytes, off, + resctrl_arch_get_resource(RDT_RESOURCE_MBA)); +} + static int closid_num_dirty_rmid_alloc(struct rdt_resource *r) { if (IS_ENABLED(CONFIG_RESCTRL_RMID_DEPENDS_ON_CLOSID)) { @@ -1883,7 +1897,7 @@ static void resctrl_mon_resource_init(struct rdt_reso= urce *r) { unsigned long fflags; =20 - fflags =3D RFTYPE_RES_CACHE; + fflags =3D (r->rid =3D=3D RDT_RESOURCE_MBA) ? RFTYPE_RES_MB : RFTYPE_RES_= CACHE; =20 if (resctrl_arch_is_evt_configurable(QOS_L3_MBM_TOTAL_EVENT_ID)) { mon_event_all[QOS_L3_MBM_TOTAL_EVENT_ID].configurable =3D true; @@ -1919,7 +1933,10 @@ static void resctrl_mon_resource_init(struct rdt_res= ource *r) resctrl_file_mode_init("event_filter", 0644); resctrl_file_fflags_init("mbm_assign_on_mkdir", RFTYPE_MON_INFO | fflags); - resctrl_file_fflags_init("mbm_L3_assignments", RFTYPE_MON_BASE); + if (r->rid =3D=3D RDT_RESOURCE_MBA) + resctrl_file_fflags_init("mbm_MB_assignments", RFTYPE_MON_BASE); + else + resctrl_file_fflags_init("mbm_L3_assignments", RFTYPE_MON_BASE); resctrl_file_fflags_init("mbm_assign_mode", RFTYPE_MON_INFO | fflags); } @@ -1952,6 +1969,12 @@ int resctrl_mon_init(void) =20 resctrl_mon_resource_init(r); =20 + r =3D resctrl_arch_get_resource(RDT_RESOURCE_MBA); + if (!r->mon_capable) + return 0; + + resctrl_mon_resource_init(r); + return 0; } =20 diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index d9876bbc6365..0bdcf6dd935c 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -2133,6 +2133,13 @@ static struct rftype res_common_files[] =3D { .seq_show =3D mbm_L3_assignments_show, .write =3D mbm_L3_assignments_write, }, + { + .name =3D "mbm_MB_assignments", + .mode =3D 0644, + .kf_ops =3D &rdtgroup_kf_single_ops, + .seq_show =3D mbm_MB_assignments_show, + .write =3D mbm_MB_assignments_write, + }, { .name =3D "mbm_assign_mode", .mode =3D 0644, @@ -5132,10 +5139,8 @@ int resctrl_online_ctrl_domain(struct rdt_resource *= r, struct resctrl_ctrl *ctrl =20 mutex_lock(&rdtgroup_mutex); =20 - if (supports_mba_mbps(ctrl) && r->rid =3D=3D RDT_RESOURCE_MBA) { - /* RDT_RESOURCE_MBA is never mon_capable */ + if (supports_mba_mbps(ctrl) && r->rid =3D=3D RDT_RESOURCE_MBA) err =3D mba_sc_domain_allocate(r, d); - } =20 mutex_unlock(&rdtgroup_mutex); =20 --=20 2.43.0 From nobody Sat Jul 25 15:24:49 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011012.outbound.protection.outlook.com [40.107.208.12]) (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 5262A3C0A17 for ; Thu, 16 Jul 2026 21:04:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.12 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235847; cv=fail; b=sSqzOLQWmgYAKXVbGVxbSTsaoJIam6VEdYPTQiivQ0iecPg4qOMmREEiBqLHDBV2ik66EluJsTESuBx1/IODfXM4tzlelLD4ok1vfz+c1FHBZ+RF5qderhP5R6YHlEXl++EX5ic0NXR4JPSzdUlxvLjLvL3wLJKQDqfJWpDI8+I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784235847; c=relaxed/simple; bh=xtvOn9vCEZmwrV4xzTV0bxDdP9JUD4R5EUGjlN6TW50=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=BkUEyKY71BkMIOvIx5mEaDVs32NiGMLKaijnvIt+0esChqHKHJzM+0tKxhLC2P/M5SqyckUTt4WZPLAdqzIO6oLbMbM3SgUyn7tzj2Lzdg+3pRFzX3IagjjbzOeMRYMsQDfw4Ruy4gj+Pt04n/zJDZrgSmr1tiJb2SLD9BfzNjo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=bQxNPT18; arc=fail smtp.client-ip=40.107.208.12 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="bQxNPT18" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Hnv/J0+LsS4bvuDhmPOLbNEEtPUuzxHgcjFztbWZoElBmq3XcX5SEq7GXePXq6PzTdJbAWEsrwo1xQv+0a6JT+db2ckP11hqzqRU7uQ1NtsFbYyqMTLsLGKDC8pl6VJP5eAhAYZSMxGqnS0iiAJKOFhOG7e8Por2amAbR8OB/iqeyHneiLpUclmBo+i3trynWf+vYjKyFvuWJlDF7OkMTZwnHAFYTQAyCm1lmLXo2Rq1X9kXGY2eWmmAOh7Yw44K4jFTkjETCoJ3TnmZu1P8gvREBxmXwGndJUwz9jAkmjU+XCws4m8GjBMEocLywlOVG2K30jBIWdEUEMoxXR1WnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=P5jJNRqp4zHRBgEPqw5fFP85ovozwiKDxZXNCw4hc4I=; b=J0JCV8LIRDifTK8/X+SRvP2VFd7ZEmbjCkB8z5OhjkYywmLfyImpEG+JEf5q+uPgZ+jCzVdJmyQ8Egd4+SxFqcu9fjEjJBYykqydm3R1XOEpNDoni6MA89VYmeb5H+yAmuGbuMXZumQ0aEmD+d44GY1Bj+7uL3CUb++UE5T2E/48m708/JGWNi6Yp40ctSJ5ZOzc2b89rWZw2UrqWl8mXJsf1FS4IOSMBI3kGFVnVd4JRorHBRp+xIeXeyTuyNMieKJGEeSIBZwr3A5HlpwMtodh2VF9hET970/lVbUC62inzXteh+7cJWoMB5BctMisOn4ZCYbrVDLHtMsDALczHQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=P5jJNRqp4zHRBgEPqw5fFP85ovozwiKDxZXNCw4hc4I=; b=bQxNPT186OUKlST/3gIrx5aSt7itZLYjC6Y21bEtCXS/U0NAXgi30qrG+6fjBE6JQ7jBP1MO8prY3jcM4wqCzDWX1/vzP7Z2F0f8B9047ZO06Pbr2k06OMu2XcRDaxUoIchUS5vI8yRfMCmxN6fDCnE9qBD3GTE6175krWEOpw1aPFDuxdSxJZDgRQQwb/YeUM6qnWxtExKZbGMYHaLHH4VhZL2+5rnS4W/Xl08gZ+fK6HIjLrp5SKLryskaf5NVBC4+BlKpwk1avfL00ttMHYfaAdsMkKc72Y0N9rNT+vYNaprdVSNJA2fRNSlDKn2bDr/44oHvTqcdq56jZqVxfg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) by DS7PR12MB8081.namprd12.prod.outlook.com (2603:10b6:8:e6::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Thu, 16 Jul 2026 21:03:44 +0000 Received: from DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73]) by DM4PR12MB5230.namprd12.prod.outlook.com ([fe80::6e87:1bde:1853:3b73%5]) with mapi id 15.21.0223.011; Thu, 16 Jul 2026 21:03:44 +0000 From: Fenghua Yu To: Reinette Chatre , Tony Luck , Ben Horgan , James Morse , Dave Martin , Shaopeng Tan , Chen Yu , Babu Moger , Drew Fustini , Vikram Sethi , Shanker Donthineni , Newton Liu , Gavin Shan Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Fenghua Yu Subject: [PATCH 11/23] resctrl: name node-scoped monitor domains mon_NODE_ Date: Thu, 16 Jul 2026 14:03:01 -0700 Message-ID: <20260716210329.2914625-11-fenghuay@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SJ2P221CA0005.NAMP221.PROD.OUTLOOK.COM (2603:10b6:a03:5db::17) To DM4PR12MB5230.namprd12.prod.outlook.com (2603:10b6:5:399::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5230:EE_|DS7PR12MB8081:EE_ X-MS-Office365-Filtering-Correlation-Id: eeb34500-103c-4ac4-99c8-08dee37db8b3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|1800799024|366016|11063799006|56012099006|18002099003|22082099003|10067099003|921020; X-Microsoft-Antispam-Message-Info: rs5hpaSuUuEQWqmbbCEG1BrrHLcAbLExN+UydK4zWWBGOmiShqAiBO4iB7d14BAeDxPrTM5DYiWhuz8UKJ8XhuhoU/Su1KFPUyPJHJ3fCw7bdGCLmUpkFPI5/K7iChme9OunAmPaqMSXl08J0NkKv3yIJi3SjGP02BCOK0bvQR6kxaqMZRlqlSVDPiIE5tO+zFrf4dcR8/EEBlDm6LVMaNNWn8wb/OYBAMa5bKvwPXNWqJjbHkhIGrwCeoJKxD1m6zkDoF6+QFaJi1P06scqEqMwSApKX1Ef2mFUolXRu77olagc4VxPP9SVhANiyij0fmHNEVXK0GpTIL5HtnORJdZsxbJL9CYWmnIK5QLoQM9ijzfOEzdnI8a1xkJ8pivPGiN8hhA1DYtJLaNJxh0qY+6+RbRajIVTDdInGasy/701tH27W2eD5QSYW/JxUy6Vl6KC/vBQOYksvYbFttQX93L/z7jIv2xvdTN8xOpBsJapfJrbKk/iDokmjrd5Bcf5E83PEPHqel2emaM0KnGKtHub+GPVf7GYTQ5Po5A5u18nGYIY7gkJVOhjiXr+kYId3pV5Z+VOalqWCjRpl09U/AMv70T3CKclWeCucF3FsoKrxEPhdC1nTruBTjkxWL/f9IrSGq2xfkC6lPHzdEaWZw10Ry8S0oYiUDMVv6GvAcV2Q0fJ4s7+fw97vVoMmkUtJ3INEVaeIfk39AlFuphP7g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5230.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(1800799024)(366016)(11063799006)(56012099006)(18002099003)(22082099003)(10067099003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dsxB3WBtg7pHBUSOf0wmkQV5ZYogWJwTydIE3inh40R37UT1IYCvRqgxp/hB?= =?us-ascii?Q?/+WfQQQ/HXcLJ1BNSPcl9OwDDXp31v0YuJSz2GSLbwx5NynN5xT241b6Tv2h?= =?us-ascii?Q?LzvjQmxcL9CzIqUTKPItAd5U7MBh0mQ558llTTb1uPfX20kKQnLjrHfZciSN?= =?us-ascii?Q?acFi0zcELtl+LKRSLDxU0xaLBq0wVlc5FRpDLDy1hBBj9bTApDx9Lza5lO+h?= =?us-ascii?Q?qJUcZVryNnMcEeEfNM/X85bLAmAiilW21TY+Cbu9q4fjcnPcBKLVqE8YcO5w?= =?us-ascii?Q?dIsZD2JlW1mV4NuiKkwqHsJaRydMG1ZVbY2Kkt57CVTxhKlCasegg4TF6Y5x?= =?us-ascii?Q?PCS/7vk4r2PiisWb2zsL2Bfn2W4VUAO2n7km6sksV9LOvBjgY4HvpSsaV5zk?= =?us-ascii?Q?YMnFfkJ2+xTh/VN9YUkF+4r0sloGogcegn0J+eg8660o7wioXP67TodxRcnq?= =?us-ascii?Q?VQN9ogg320GKbDFzrq94DkMUMRztXiLMckRAjV25eRC38nzfbc96DIFE38QD?= =?us-ascii?Q?GhGSj+8Af6nQ4mB4HSLXjcoOaYGPkX6RhxDh99DphgtrHkz/z/RVpONh4wxE?= =?us-ascii?Q?xCxbppHqP8MR2w4rSfKXZSRhui4sXS0p4lhGhq8xVgIInqMhd8v7qEhmex0X?= =?us-ascii?Q?ijadIxnoveZ4lfzVUPpl2CxEwzKmcoqgv2XzPkfXPbEEvxqygZrsS0TxXxMa?= =?us-ascii?Q?7ENgd3cSTcw6SJUx7n7g187itst4BTjql3gbw2NGIUK1NVyj+KqHkmzwtWSj?= =?us-ascii?Q?WgXhtemgvaBVZLTV1ahgTWkw8UM48igzRiH8W4rf3p+Tf56JXuTeXMJxGtdv?= =?us-ascii?Q?aEYXxnYgodYAIjpY9ySxv6ii/+atwZa/DdRxh0YsmWcoLoaxEDCpnsuviKCE?= =?us-ascii?Q?cqeo+WBeKoZhDaQXi7YY9+aBT6m/s0pVb2Cz2PbUxi8gzYu31t5NKbM0pRSc?= =?us-ascii?Q?AqKmzl34ByDnwofTyLPR3AuIOhLMkSoLS0Vk5Se9KuTbl5quWTn85y9dtpsy?= =?us-ascii?Q?eDoMCkG+HfIbLr2k5XipkU9xbQ9mCRT2+k1239Tp3If1uYiHwT+FAAD6DFhF?= =?us-ascii?Q?O0xDYp+dnhL1+/CY+b7rZLZGjN/6hxE9N7anSy7QP08KdVOUE2vHbJOYQNX6?= =?us-ascii?Q?gfKqzphC0h3a+kLPtdP27XJGOTLHzjuAWHDKeDX1yUhGaTogIfATM21oVFEL?= =?us-ascii?Q?5SWBNbupG/c/AG7DlF5C25ebkX2/hFgTBQQtGF4ZccySKP4inO3oTDd0wHrR?= =?us-ascii?Q?GDO9MsWsk4SIzpWdSqFX0Ij9LlUpVCS+8KZd718I3Y8kkx9AZZTsoQgDe1YW?= =?us-ascii?Q?tMonEmBJJfDL0wLYf3WrAuhLv6z9Kmmm9o9naB1SuRbVageKleMNJlHjCu/H?= =?us-ascii?Q?i3QQWVOYoWt1hEysJ8IaxzqCiL2Oua4Hm3S7zlEv3cMp5/Erf4UatcIMDJAr?= =?us-ascii?Q?tEl05v0EUiWaw5yiVrehRTEZwzDdd+shLseJhbvYx9qGmfIVC2D8a+xhJZvw?= =?us-ascii?Q?ylMCNTB2qRauaxHL+h9HYztsoyplLVBZzwRa7iBJ0H1OPUnbcby2QLcrm0+R?= =?us-ascii?Q?VKMj84b9P3hz9tMeFDa+txiVUwD0qOohhiG4Eo9ghhM5o8NDNDxHiKok6+FB?= =?us-ascii?Q?1zzb54Wh2iRdYGIJFaHn6CqJZh5NlZyaZRBjviRYjMK/MTtqe/AxVICCtugY?= =?us-ascii?Q?afeBi6Va35wPA4IQMDLBWq1IAh/Wuoe0O0dLvJusez41X5+zZCyEEhy95U4y?= =?us-ascii?Q?RGqCfebQ0g=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: eeb34500-103c-4ac4-99c8-08dee37db8b3 X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5230.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jul 2026 21:03:44.3718 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: a3Nz9yvtfWHREDWbhBFGHhGx0cX7bUmc7++uvBzoZR1BDUXOaOLki0ZnECeW3NSOFdXODkkixmmJAGdbVcNl8w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB8081 Content-Type: text/plain; charset="utf-8" Monitor domain directories under mon_data are named mon__, using the resource name as the label. For memory bandwidth monitoring on a memory-side MSC the domain id is a NUMA node id, so labelling those directories with the resource name ("MB") is misleading about what the id means. Add the RESCTRL_NODE monitor scope and a mon_domain_name() helper that returns "NODE" for node-scoped resources (and the resource name for all other scopes), then use it when building and removing monitor domain directories. Node-scoped monitor domains are now named mon_NODE_, making it clear the id is a NUMA node id. L3 and telemetry naming (mon_L3_, mon_PERF_PKG_) is unchanged. Signed-off-by: Fenghua Yu --- fs/resctrl/rdtgroup.c | 25 +++++++++++++++++++++---- include/linux/resctrl.h | 1 + 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c index 0bdcf6dd935c..db0255951f0e 100644 --- a/fs/resctrl/rdtgroup.c +++ b/fs/resctrl/rdtgroup.c @@ -3947,6 +3947,20 @@ static void mon_rmdir_one_subdir(struct kernfs_node = *pkn, char *name, char *subn kernfs_remove_by_name(kn, subname); } =20 +/* + * Label used in the mon_