From patchwork Thu Sep 3 03:46:13 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 2297223 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=hotmail.com header.i=@hotmail.com header.a=rsa-sha256 header.s=selector1 header.b=GH7Qcf+4; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2600:3c15:e001:75::12fc:5321; helo=sin.lore.kernel.org; envelope-from=linux-pci+bounces-65261-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sin.lore.kernel.org (sin.lore.kernel.org [IPv6:2600:3c15:e001:75::12fc:5321]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4hb5ZM6GSfz1xwZ for ; Thu, 03 Sep 2026 14:04:11 +1000 (AEST) Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sin.lore.kernel.org (Postfix) with ESMTP id ACD3B36373 for ; Thu, 3 Sep 2026 03:47:32 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 602383839B7; Thu, 3 Sep 2026 03:46:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b="GH7Qcf+4" X-Original-To: linux-pci@vger.kernel.org Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazolkn19012050.outbound.protection.outlook.com [52.103.66.50]) (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 76E12378D9A; Thu, 3 Sep 2026 03:46:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.103.66.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407207; cv=fail; b=iCChP1qu+aS6LXWM1cv1DnuCerwk6Kg5tl5HyWPiVyo1NOkwvb4+cEBIaR+hzaRdSwQ1tvgm1wm1SoMTPthaLUyK6EWFypFyIsCJGt6UyJtrqPAWuis+DCBQ/s9r1xTkOCc0uZgwY85cOLsz2aSvi2KNxVMbpmCNkVACdG018ik= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407207; c=relaxed/simple; bh=JDDFczWJp8fbnXznPIN1e/zAMpoVUHPbsrIcwqPl+kU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=MTqgnnMggRRfFELwNyzy0NT8HwrZzBueH72kJjvgQuSeClpXp5Y1uYtVB1Cmk0hVbs+gvj67EptawhekqRJzLTw6kHH+6Eus5YbHgrgPt7uKvpIA2/fhXxFuJ/sPpuACg5PffDx7uMxkm3cVd5pT3aCLEm/FGYde+knyrEGVF7M= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com; spf=pass smtp.mailfrom=hotmail.com; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b=GH7Qcf+4; arc=fail smtp.client-ip=52.103.66.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hotmail.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=msmHL0kvIO028v+spR1ZyFNCZ54lsB64k4TAspZLbVmJE3V+f7LuyhbD2yOD+g+LRfEkWnNjTHzalL8jnvlCIGzo9sUZOuFtYbuEjny3YyzM+2BLt6wDdrc9GkthrNPD2Y3wz7v4OfIPubvXlbR9KRiZ7nOxb6hejgQk0Gv07NCPL9iN2dImwoNSO82UdqzyMdM2J0bJffoUTev0QoCwzwanla0WoFEMJveIURYFWYtFy3BCUN23Vn4PFSgFPLp/fJgerKTh4JgTe+4XNIm+yC8mbVqirHlL3eUXmxEalQApl70ylhJ9MUOIJ3gg/glg69PlAepKJPuXFyh+V9/Miw== 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=eDbQ/BvaT2PEnHisP8URCkNlCYTW+I11iByFkNTKVWo=; b=C4iLTO9LCikX6zR7JF4pk3om3mRDg2WFqW2mpajqlRXMmHUT6srTKHCtKPe1ZHmjqdNSPWLZOA16uiXnPREur+qWggBkfIQipJRQVFsjcWEG/8bd24i8oj+JmaEuxHga+MPe845FnkAEp9aT1REdsVZMswDKElCCtC7AOLBy27S8Q+NjHxjq08D3H+xTD6MS4CxBL/DOBhA6gaE5zhRlZsBdyqDdCn70T4MgYsT5jnAO8qQJiMzDQo0IrJedFD0CdTB2k9bpv5huVp0DAqhpkRXaoIAmrMCi/lzFLHjdXTCub9tRqgTdW/2SCvZUtMCYcXcTnVfkBZLQcSqcNYUF3Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=eDbQ/BvaT2PEnHisP8URCkNlCYTW+I11iByFkNTKVWo=; b=GH7Qcf+4DL3gXSd4ZlV/vHnTmfMyF/D52aKuf+ThKv4tbW/Y3zA46gNRaAqOhSwlJf1lGeHTuihQIkmXr7UX9Z3nPjJwRC966dWkVBCXz1UluA5m488sV/45b4YyViOXnKCfRpKcWcAcpxast/8wkzsmMXAXhtdnDUl1xG2ZeC7/J36C73zA8FA8QFmvvZyxfsMQJIopxxCD+6NE2Z1vyJe19Ol3XeCq5/z7JgN1B72ap9GUGpq3WLkfA0n5K+Afdu2MrEdyCmODrAZFf7Te2YHTW0SBz5fjiAAEaoiVm7JboOk8+96x7ixwO2B/AHlAesjJPfgIH9Vf2IBPzVOy1Q== Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) by SEZPR01MB4733.apcprd01.prod.exchangelabs.com (2603:1096:101:a0::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 03:46:40 +0000 Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c]) by SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c%4]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 03:46:39 +0000 From: Wei Wang To: bhelgaas@google.com, jgg@nvidia.com, jic23@kernel.org, error27@gmail.com, kwilczynski@kernel.org, rdunlap@infradead.org Cc: akpm@linux-foundation.org, bp@alien8.de, alex@shazbot.org, kevin.tian@intel.com, manivannan.sadhasivam@oss.qualcomm.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, wei.w.wang@hotmail.com Subject: [PATCH v9 1/6] PCI: Validate ACS control bits against device-specific ACS capabilities Date: Thu, 3 Sep 2026 11:46:13 +0800 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: X-ClientProxiedBy: SL2P216CA0092.KORP216.PROD.OUTLOOK.COM (2603:1096:101:3::7) To SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) X-Microsoft-Original-Message-ID: <20260903034618.1100387-2-wei.w.wang@hotmail.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SI2PR01MB4393:EE_|SEZPR01MB4733:EE_ X-MS-Office365-Filtering-Correlation-Id: b78fa96c-6562-4f99-e0ce-08df096df5c3 X-MS-Exchange-SLBlob-MailProps: Vs63Iqe4sQkGaLwEdeYxLY7yqos8lGqVCgqhJdHRvWEQLxVWzvFE6oneVu+wfb+G77HKluBt+vggnmnNknUknQ70MbuSPvdcRxFlww0+ybCbz4h5u1jV0DgeAT8sSL+SmtO6N77+UR7OG0yWAGtpX7XXn+wRSPBMkwaL/pktZ0tx1oNEAUSH3otvwIaYRYmTCnUnkQ3de2us8JkU7t81EKfSn9U3GQWJGXT3Lgw0zfN8EN7a1M71WxucY2ik2SxUWyFcfyfl2QIR1E4IjKbW4MGV7nts6KSxlyFO2kp3i4UzYjlABiUDRyTHaaMmILmP2e5+DnGy+QAxMVViwnv4Mf8yEfzIIEVWYd7TZneoFrVeLw0rooO/YmpqhfBoljDgbYA/czd71Bt2BnNNpZdcpGvMrUa3fbWNz/V6Dv85Ch/iuED1GMz+0G4Gp7In9Ee1vTAqsJU90OPrkgJBb/tbA9O4j2etIKlRSweRRrBnkjkkWaSdgw4nYFi8L+0/kB8vM82mM26SxuQfhBwBJ3ArZQ/4Y0G9WMaPAKtaprvF6iX+UartJKcevr0e9CWnSvbq73Eai2RQTzxV5i5sZoyBB/tFRXrdL9Wkma1T0mGKbOJ+ncUPZt3yL8q+YkYTl3S42xgdY6cpc1l+370BKLhbm4c5eRjUGjIzVwhG9+UB/nwNh55QOhV7bzzBN6ZXlRdPsRBW/DsIEfvhtPvxWMRUI/xB6MEMtZ73M8goZJPL7tI= X-Microsoft-Antispam: BCL:0;ARA:14566002|12121999013|41001999006|5072599009|19110799012|25010399006|23021999003|8060799015|37011999003|45011099003|15080799012|51005399006|440099028|3412199025|40105399003|2607281247196008|1710799026; X-Microsoft-Antispam-Message-Info: IiN60/NkYQdRfOjlun0VMR5NPyZC0fMI3Hf/VY1yxLfTTE24xT5sKbOozYgnR4Aqg6ltLDLhmJEZBUplA+gfvGmvSuHaNgPHu/WzlJEPduIznzJk6lh5kSbI+Qmhl+NjRRrNcXHrtSYb9wXz8rsxEFaOGtYc2xMtld5HhFz5+Eycy9QX1xSg2mV+E3xNUXQ8I/QwCMAdEEhVJZdUefUiVUypcTakqua+zwyEJobRa5ki+tpZheBHtUbnrEmT0nV8V3de43VVvWacgHdZGyMnK3Gwk6MF52SvANw8LDT/90kpv5Nk677yCcTl3XH/2ncW2ujt0VbQMfs5k/LSLafZFEeSB9YMEdoUjDBaza/pP04d568u8IXiX4UWLyoDFunGZsx/ICGbvSYQA1DhIAfvmtNGEmAaWFYc7Q07FSm4ig6Zx8wtrA/6QUSt2LCUrE3zF+QVmwwg+7tgxqScJqVj41SuF9uQo/E9VPsetnnRH34QVLLAPG/cetHtJTu+fVGHPZnq99f1AZUGmZt0tbzBzwIHGTkewFakgmLuJ2EmIbZlS+EBPmGT2gx48UvjUR4Yz7NZIeZsQ+nCbmEM/0HJpry6fTcFfyltgyo4/Y87B87qPbSvZEQM/Qow71JmO7+xEhRqv2GlIy5J+l25ZSEeqpNrzpvYDoVM6cbhX1W3MFvlKwxDLamxDViXOfzFw2mOyR5RKVWewCW1RHnYE6R8Un0JmMMdmUQZ2KApBGgjgshkQM+n2GjEy5uDXoOhITS2I9rT7J+10RIHR8eqAhcIuaE0ivSJlClmYP11keJiCl/lNJEr1D911/9KpnBrDuup4x/nkoAjW3rpBDgO9OvIJy12qz6wai6R/a20o1SrkfjehDQvx2tX/eE9+xllFNBkiY3v2GYiOreNo0o+EWHNwN6746sGh3hf1a99Rz1z7kYYZ1Wghm3sOdqQn9GP/uCkfukSnr0kGRzyb+FRa+LXFCnS8ZgbJoH8h/N1l6IAgCGeLH0e+jwrQZW0FWS9eXohAJAFZgi7aqhOVbvXxczkRCtvNWUHazTv4V2CzD31AbNBTOSjilyaP6xbUmvveBq2 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: fXgB7de/cy3UYh/WCEjJF+wEi8g8YGiXnpfNCv9P6UeM1BZVbh0EWr+3WKzCxpCNV33qgn8qJ00UHv27Qo2/if8vj1qhb2ACYcLEz9vajRUsj6GmMFw0Zl91D5Dy07aQ63FrcU3I3ypkaOJozbrlm6xi7rca4g4n8lkUyqxiuAdTEQhm3HlSdluGCsfYuX0kgZlPKHGXeE0PnMbY1x3nlKJMNUbhwji1K4K9aYtZ00f1DePzaijjeDKktuChnE+/1YPMkJc+hHAYCKB6V9Pj9t/8w722CrRJS+X77AYe26obXr3mPB6u8S4SxLqGZux/xxnvDrsOrkpUaCvsp5Wo0yAdlLxyB7bzGwKOwFFcKGCpHDIGqDsCwKAKOiPZQHhP/M0pny31VmpDsi1axRdTu64pbdZtvbgy8VYr8WFbOldJmmH6GRx6iHpc/dn7kZo1ZiQg51cwcGJrhoMeCOgDZJEWp4TrG7wsuX0WkouNLa2fLl2pQz6B1JXhDPteJMZIU4/NnYziXMcLDe8DL6nxRiDWgT9zTpI0y+LfWLDw5gLkbL3v5+riv17WDqujdXOiswCFBDqNjW07yBzFkbTUenMP6/Mk1AxlQ7W57o0QKHS5INrpTvtrhVJKA2KYViXazTwaCjh2PFU1B0tiFljmFKp3TniavwOJRjENvtHSlCNEIGvzeKy/8f4JAq02JVEA677sDPXjLFbJ1NOiZsCT6ayrecmW6oXtL7qEYegcljvihgmMPKVkzDT4p8N8oP8JQB1gK43FM41rpY2CeWxYcIu9llcttPHxy66993UIH7/U0WX1D4aw8gRLp7DDdQnrRovwkfgl6fpoFAqZyRdCzg2f9nEwAYZvMcTANbTQJbUSEcLAsOUTeDd4hrIYLN86njbBXwQIfeLCt5huSpr3Ao9fwD0CQL/EB/UQY8Cr5nmsAfqBl8/sRfjqyxcUXLJKZRtlNx8Z3lKCDsRbIiRWWMbxU6APiyGEUHhZPqP5qLyTpt9BrFBeObpjxAQLXZpyO/NuFXSXB2f71UzArrarq0rAFWGkDjB7ukldQTe56dItCuaoMIsOGyb0chJqH3VRBWWSpWwN11SpBZ6KPsjmzKbBC4j/hcEyNALWMnemd+ZTsHmqEDM3TVyAbasugCmQF9yxo7PE2531kM7zghhX/8gzxC2d0ByuofPqNiIqT3iOMqWCaVZRMVEqJ4vB3n2GAmQ1dzBuELDx28PZn+YlPssN4OlWyJSiymPBiyWVi/zcfKsghrYMuIMGO8q2M8LV1+FAHFGXpLI29jgxK13SVtx9pgm15PY0SqVVHJeAEoiI7tavs7IbMVOypxDilQCmk7UaIp0KXziLVLTXpvx4KzitEqJpijbxt6BryHxSUEA4D1so2EjPJiNb7YW7dnQi X-OriginatorOrg: sct-15-20-9412-4-msonline-outlook-3e488.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: b78fa96c-6562-4f99-e0ce-08df096df5c3 X-MS-Exchange-CrossTenant-AuthSource: SI2PR01MB4393.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2026 03:46:39.6783 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR01MB4733 The ACS control validation used the kernel's full set of ACS control bits, which allowed users to request ACS features that the device does not support. Because hardware silently ignores these unsupported bits, users have no indication that their config_acs= request was partially ineffective. Validate the requested ACS control bits against dev->acs_capabilities so that only device-supported ACS controls are accepted. Mask the capability with GENMASK_U16(6, 0) to select only the currently defined ACS control bits (0-6). Higher bits in the capability structure (e.g. the egress control vector size in bits 8-15) do not correspond to control bits in the ACS control register. Add a debug message to report which unsupported bits were ignored. __pci_config_acs() is also called from disable_acs_redir_param(), which passes a hardcoded acs_mask (PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC) that does not need validation. Gate the new check on !acs_mask so it only fires for the config_acs_param path, which always invokes __pci_config_acs() with acs_mask == 0 and builds the actual mask from user input. Also move the check after the device is matched, since the ctrl bits apply only to the matched device. Signed-off-by: Wei Wang Reviewed-by: Jason Gunthorpe --- drivers/pci/pci.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index b2879a6be5f8..2af679111a9b 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -910,6 +910,7 @@ struct pci_acs { static void __pci_config_acs(struct pci_dev *dev, struct pci_acs *caps, const char *p, const u16 acs_mask, const u16 acs_flags) { + u16 valid_ctrl = dev->acs_capabilities & GENMASK_U16(6, 0); u16 flags = acs_flags; u16 mask = acs_mask; char *delimit; @@ -955,12 +956,6 @@ static void __pci_config_acs(struct pci_dev *dev, struct pci_acs *caps, } } - if (mask & ~(PCI_ACS_SV | PCI_ACS_TB | PCI_ACS_RR | PCI_ACS_CR | - PCI_ACS_UF | PCI_ACS_EC | PCI_ACS_DT)) { - pci_err(dev, "Invalid ACS flags specified\n"); - return; - } - ret = pci_dev_str_match(dev, p, &p); if (ret < 0) { pr_warn_once("PCI: Can't parse ACS command line parameter\n"); @@ -983,6 +978,13 @@ static void __pci_config_acs(struct pci_dev *dev, struct pci_acs *caps, if (!pci_dev_specific_disable_acs_redir(dev)) return; + if (!acs_mask && (mask & ~valid_ctrl)) { + pci_dbg(dev, "Ignoring unsupported ACS bits: %#06x\n", + mask & ~valid_ctrl); + mask &= valid_ctrl; + flags &= valid_ctrl; + } + pci_dbg(dev, "ACS mask = %#06x\n", mask); pci_dbg(dev, "ACS flags = %#06x\n", flags); pci_dbg(dev, "ACS control = %#06x\n", caps->ctrl); From patchwork Thu Sep 3 03:46:14 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 2297226 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=hotmail.com header.i=@hotmail.com header.a=rsa-sha256 header.s=selector1 header.b=GgyTEJxO; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=104.64.211.4; helo=sin.lore.kernel.org; envelope-from=linux-pci+bounces-65262-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4hb5cH5wG2z1xy9 for ; Thu, 03 Sep 2026 14:05:51 +1000 (AEST) Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sin.lore.kernel.org (Postfix) with ESMTP id B51BF3675C for ; Thu, 3 Sep 2026 03:47:47 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 69DCB38399C; Thu, 3 Sep 2026 03:46:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b="GgyTEJxO" X-Original-To: linux-pci@vger.kernel.org Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazolkn19012050.outbound.protection.outlook.com [52.103.66.50]) (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 4E1BA382F08; Thu, 3 Sep 2026 03:46:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.103.66.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407212; cv=fail; b=V2ZoLfQKK37sd+i4HMwmP3Guw4XebDr1tlmweoSbrwmDqpYutQp56PwLNzph0Lit+IsNLH1NuFYjA4VvfPmjjKN3PQOXONY3yctGdHac4VPFP/KSqxq0dCVnSeY8PBKjBIt2xGW7pFiFMl4POEJ5F0BYYnQcrU8AXK2PfQgg5K8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407212; c=relaxed/simple; bh=gOB2hlgGiC9YV7SkB7N6wuV+p4TniHHae7xUAZjwFOM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XOFB6SOkuShCRZCMdFNxO6y1EJwKNfhD8qDhg50gIfCnazCcsJqmlrqbM+JLtxY/q12a0ZucpfSn8kvpbiGTB2D4G7xjEWdvmIC7TRnQhtO2HlCO4HQJD5R+uSG0Q/jP5Rnl7WB4dOfc64d7F1637ZgZ4dqHqCEw082Nmxs3D1A= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com; spf=pass smtp.mailfrom=hotmail.com; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b=GgyTEJxO; arc=fail smtp.client-ip=52.103.66.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hotmail.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=woJCobOmkJ11gDdw/d2DR5IBEOgi2XyEPV6qk1bobWQDccy8nJENIpA5IZkekZN8X0FvAMBPauokdImaYwm10GGBo963u+BhscwCKSBQ7eM2O9esUyv+YGI03dcDvlg5LPcM3OGmuKxMnZRNmG8Lgt4krT5Vhs0J0IoRnf7FW5sgkpopuMfFX/ArnbQmHSfVV3B7HLd8+2fSKBKy//84xj7waUfrAJKxwAuJrwW2EakRajMZd8FsVGVy00Y1OxGMFpTv3wp6v4Np+Xq5Wd9i12gptSw3V9madjSntqPUcVkwDrPIoO1vDEHifEEe9HovzKCGZzGd+5sOQHX9H+nN8w== 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=uzEt2RtPYD3TvvDC/E42PvyXIU4V4kp0oGpqT5CamPY=; b=geuTlmFkAsRa3DcKTHnR/j6Ac0GTyWz0RVE9evKfHQmB17eTMhZRr2dQ1+vApXhqV24MdAI/EIyIHGk4pZy1Z9vd1Um1tsU49oSOSSl+QuPhhw8O+Rm3YwZKnBxbZdCR81WVijE9DH5xtQBTiF+AT1auEMt2qCm6LZ3FxvDmztt+glkhtC4hf/jR7YGr9b/m0yiTH5Zn+MGN1q+bZAbiZbiUZUk22+1gccUHg9pcrvQwFBdfBBD/Dk8yarfAKVmlUKw+CKqRu3xKZ9AUd1GGjd1sJmigo+69S03B6JpKwnrjYf7cIF0dO4qphIE7FWr2jw4i4VRNlI/Dhj5IgvmB1w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uzEt2RtPYD3TvvDC/E42PvyXIU4V4kp0oGpqT5CamPY=; b=GgyTEJxOOIqb/M8Kqackz3ix4XtyiuVH6pHnZ7yr7StzcsKdHHutQlCt7N78IcugTfmufNt20ECUOsvfm7Msdmel1H/TuUHKCryTR3E9TtNxy/pyzFrAxu1ADsGLEgRTT8QC7WNBAftzWCGoUSXrqasP1m5RpIlk4g2SleXXkfSvtJvir5NgTYeBrDF4/y4e6pM+/ISmoeMonEiS2yvZJETeOOlOuUrAM3DHkCfSYXPOsXrfbCKL2IxLnlYEViQPUVO7nduTFqbpl5fhNfu4aIecPfTICwLcqXt8Vov0Nbat0Ct8GBdken5RB8aqz6lAjyuItiTNtOYkdmPYXUO8TQ== Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) by SEZPR01MB4733.apcprd01.prod.exchangelabs.com (2603:1096:101:a0::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 03:46:43 +0000 Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c]) by SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c%4]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 03:46:43 +0000 From: Wei Wang To: bhelgaas@google.com, jgg@nvidia.com, jic23@kernel.org, error27@gmail.com, kwilczynski@kernel.org, rdunlap@infradead.org Cc: akpm@linux-foundation.org, bp@alien8.de, alex@shazbot.org, kevin.tian@intel.com, manivannan.sadhasivam@oss.qualcomm.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, wei.w.wang@hotmail.com Subject: [PATCH v9 2/6] Documentation/kernel-parameters: Add multi-device config_acs example Date: Thu, 3 Sep 2026 11:46:14 +0800 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: X-ClientProxiedBy: SL2P216CA0092.KORP216.PROD.OUTLOOK.COM (2603:1096:101:3::7) To SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) X-Microsoft-Original-Message-ID: <20260903034618.1100387-3-wei.w.wang@hotmail.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SI2PR01MB4393:EE_|SEZPR01MB4733:EE_ X-MS-Office365-Filtering-Correlation-Id: 4fc8d4d6-2198-4f71-e3c8-08df096df837 X-MS-Exchange-SLBlob-MailProps: znQPCv1HvwUXBahuwteIkQeW30lJPuxOIGbsM2YkM/0KWVoI7OPJch97BO9k14RMvIiBD7YF8Og4YAr+0GvbCBWR90Tv7thZZGKtXBoZDvYYrvDKaH1G5+KJcQQiYgqmR85v+51cKRvyWPIjdnDDm5P3Xm0YgUk2xhHMQfNlY525GpkOijhvdz6JZWSk2A+RXCu8VjX7OJmAmwJx5u92KGsW8DD+a5awDd+yvo9iVi4y10XYC64s6RCUwVZlmZL6VEbmXdGzp6sy+RtZDpDk+M0JaOBMBP/aybL3+5fBbuzuOTiqOOZ+R+0lHhrN8uIVEPiozfzuaAGG1YAIWP5dCqLfPtG3uoGsjSUZdeo6ckSYjCZCtznLHS6eW9kxr54pEey8VoByIvfKXpslpA6Uye4oyVkvkBxYuas/HYVijl1CUTNB3a7Ux0UnYBGHQ08ZlqQUDbo6MxHDkvLyYeWWKdO5WzpT7ZQBHdtYVHPj4TuTVZGAO2oahUkNRNykmyfdjkSExW76vbWuBMFCBpnh6ARr6Tc7oV0ZF+qFRSj11L3fnHtDZaQDbgM+o7W0+m9qzUcpj/Ds6fSBSBzaY2mLiqe6NQKkJeC8BBp0pxaefaMfSdowYoc6SICccBjQ3G5sGBmsU+5lTxOwG782hm2LuyppDvmfUzpCqaTBqkCnrjceXMXdpnvZkr2pREOs+TQ7uvt5nuiAO0kM2XpeyGa7t8YesGc1zRHvsEV4cvEs1lw9hiTkrVcL7kjs/BCSXOOoytJj+N3nr10= X-Microsoft-Antispam: BCL:0;ARA:14566002|5072599009|19110799012|25010399006|23021999003|8060799015|37011999003|45011099003|15080799012|51005399006|440099028|3412199025|40105399003|2607281247196008|1710799026; X-Microsoft-Antispam-Message-Info: KtxnHZ3r4a3gNJFNJlIcuQ/OEMxpUfKCBP1mzxz2Fno+R8oP34+2OJ0kGqA1jh135f8L139g2GjChiYg4VxlmJjHPHp4DU2VBvgHR7NIxE5XEJst9QYTbKQVnXfsVt+2uXvGnJqBv/HizQn4sn4zb48GQTQaM0wY0vQA7odLp749Z2BUNx56Rbwu+v0op2U4inDLVI9H/nE1iCjcEwnRAF3ztEy2AdqjBBcGd1UPU8rDpZSEwUmtTEggLAJcKOnx2MWTX2JNe2Pvbpugz5Hbm28awOBxo/2mSyFVGtoPLsczL6bajfp+KrvVrefY1NWPOCtGMdD7KSFOrazL7auWziLhlWZx+qZSS8AqDeiklLSCv+xyXlY1VhADYyGOCtxRnT+UOzs4wg0KXTlwecVGOfjOgDRzSuM/CdY8AV5sZMqd0mIw/JpliwvtvlEJVImFxYxeuNtKT6gyOIjr8Q5i6wVrbRAdfi2s4dyLKkp9WTbvMHOOY5MiJmUagsMYAnO0SJORMnTTZLYywWGoeon5ud7nR28assgcnLCOfAlEPBGoLldBjTwmtG/Gh2vtRS1NJEb8ap7kPYLwz8MBU1zhlnz7wGn7IZK6iEl3Ojsywz2U8R25s8nGVJUx93smNyJFNgTTiyi7clBwvFMgaHWIAfX4ZWfAarASPptzkYsoKhSjs9+w30NL8PKgMWQw7XQ3WLWNF3mhUtIwmACflYoYsH1ZVzlvYXy4OYeKxhKZq6nykl7DRUVVMSh+NxHhR04GQdH3fJKEJpEV+taDY0GOc0X1vj4CjjNVrxZhXctLQf0HTPDIRlqo1gseM1ZYqpm4R4U3u+89WT8HlcEu7XT2ItmRK8RlDkBwD/ywfQm39k7hYQYBsa5LghM37cxijXpv6k68GqZ9quZytAwZIrmpBUJdI+Y9mUuLKs6YCeftomGPAIYmdWYNr8xUW9UiQcZPDxXxHSnzNSU/ALlI8B6X0TgGxLEoCllbX/4qZ+bF4TK8h2m6QK2u+fcMICavIIx8 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8bXGxYwnba+mvdlpRohUf64dYanKCReKeV0HMG4CKPteBbnp2mDzJV992fvh2DsZLPQ069H+Km9zjWpflkgujCB1BmtqW4SBjKoHrZFEcTukkrAOPc3UyzHS60uE18b6iegu2PbULUuMxGUCThDD8Y5ue/EJ0zjpHj/3/phJ6d6fJRqRXh0eOUjP146f0OFSrtWpllobwLSBXfPx+pGQIqdlADjobwGuUzmAvOe5rAJZ/I37O/82FpB/kgaIu5N1Uvm9df4INhDKxjscyjCzqqH86wcBpNgkFXt0ZYOLrv6vn9hKakUo6nB0T4Cjm4wqjulwHVchT6UyDt3QAzyZz/m7dJGRtWPXV8/4pmxQqwD9+FOjw9iZbq5nMknhopNSDu5i3xoJvErdQKaucjnHjvkw2oEBApaO4KDAYfs9kl7ys4qRfMxMZqDcESs3W5H9t+rI0ScU3yJCQghsihbSVnhxGhC2nWQUMv3tBAjVK326BGeZaPiMqx312jBblciJQICQThNP9jLWpGh1JDVCF0cAKTLkSTpFbt4mvMNNQ8177QSmG6c4LjdHjXSzNp1ipL/bbu4pJVhsJCUsrBgXlF+hHkyfvrP1S2p6Tf59ds7kslVk1H7kXUPSLIqoeNEsor5geEl5v7CA15vOXRSnsaY9a8cYJpWGPNDfUEWq4nPkt+8Tf0gg8IbDCRwJg/YjZNtOUh5XTt50A2VPXcxEOLUTqjTqmBo3YVOIhV8nzGi0V/FTAw9T2xOl+G/S8IMKO65XeE+M7hKxBE0CmdtsQR5N1FCZJmxFxJqeWfPLqdhY58HzLXCN4sTVahX+vpGENfXiIubjml30wk0vZpY7DW9FQ0lHfb7ZMsrlm1geWqTzMNSyExQJCdT9bn7HyqsNwzqTXoTb+8BS8N83P+hDZusXfGXBOJTrnFtKBxYCMVUo4U++TyUK0cwT2bp8+s01uidIA151ITdkg0gwp6JzZCWNHUyEIM2htZgkll5KraRv4efXN11CUzoKLfmOpx2kVfz2KiHJXsm3xu8B/64ui2RFhkyQkxn5YdAMGU9+9nKrUHIncilRA8BFHsX5KIodN0oi67c7hRUGhHZd1tjJO5TK4T3wuABzDqrU441KMr+K+HH7bLw1GrzvRHg9WbxMbIuKbLrVgc1DtprurWVrJhLGRFlP0uYH+NI22eQM/I1bM1cIWxz5SVaateZsIzdX9vANm106AIYEN7N1t70DEa2fcSE+V4uBVz9JF/IAuvu77bDq1cFjQYY21WQiuluSDYp+ukrgZftdv4auwXkEkJtGTVRn5gQf9cdN9oOvdc8duW/lDSevm/TLw50tQ4XLi2Q8120btmknyVTAuiBS+Jjl+vNoTAe+C3QdfeOzdfLxvOGM2ydA42Ymki5NVCPx X-OriginatorOrg: sct-15-20-9412-4-msonline-outlook-3e488.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 4fc8d4d6-2198-4f71-e3c8-08df096df837 X-MS-Exchange-CrossTenant-AuthSource: SI2PR01MB4393.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2026 03:46:43.7173 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR01MB4733 The config_acs parameter allows configuring ACS settings for multiple PCI devices by separating entries with semicolons. The current documentation only illustrates applying one configuration pattern to all devices, but does not show how to specify multiple devices with different ACS settings in a single parameter. Add an example demonstrating multi-device usage with distinct ACS configurations. Some bootloaders interpret ';' as a command separator, which can cause the parameter to be split as multiple commands. Document that the entire parameter may need to be quoted to avoid bootloader parsing issues. This avoids confusing bootloader errors such as "can't find command " when passing multiple device entries. Signed-off-by: Wei Wang Reviewed-by: Jason Gunthorpe --- Documentation/admin-guide/kernel-parameters.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 63f0c66c9123..a2563ff69f51 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -5345,6 +5345,13 @@ Kernel parameters Note: this may remove isolation between devices and may put more devices in an IOMMU group. + + "pci=config_acs=10x@0000:04:00.0;1x101@0000:84:00.0" + configures two devices with different ACS settings. + Note: Some bootloaders interpret ';' as a command + separator. If so, quote the entire parameter to + ensure it is passed to the kernel unchanged. + force_floating [S390] Force usage of floating interrupts. nomio [S390] Do not use MIO instructions. norid [S390] ignore the RID field and force use of From patchwork Thu Sep 3 03:46:15 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 2297204 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=hotmail.com header.i=@hotmail.com header.a=rsa-sha256 header.s=selector1 header.b=S4a7v968; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org; envelope-from=linux-pci+bounces-65263-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from tor.lore.kernel.org (tor.lore.kernel.org [IPv6:2600:3c04:e001:36c::12fc:5321]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4hb5Mb6WVbz1xy9 for ; Thu, 03 Sep 2026 13:54:51 +1000 (AEST) Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by tor.lore.kernel.org (Postfix) with ESMTP id 0CF0261090 for ; Thu, 3 Sep 2026 03:47:57 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 40CFD38B7D4; Thu, 3 Sep 2026 03:46:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b="S4a7v968" X-Original-To: linux-pci@vger.kernel.org Received: from OS8PR02CU002.outbound.protection.outlook.com (mail-japanwestazolkn19012050.outbound.protection.outlook.com [52.103.66.50]) (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 D4356381E9D; Thu, 3 Sep 2026 03:46:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.103.66.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407215; cv=fail; b=MwVAvU9jBzbGZ1Ck6lei94DOc9PD+214kLy6wKa5VBJclH/D4SerBnFnVGEO9y0jIQFXYSHWHo9pKw8fTQnrUfc2rHf9gjjmrwJY1buDvWea3xZhS5TqDdN1GOaghNo8LVPKBH/sL5XAVxUH6wGLO3LsjF8tez6q82F91x+LX6Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407215; c=relaxed/simple; bh=FvEUpCbmTDvOIlEgFyH1cfFr9w2WJlzUvIm4DydJ6E0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nRN5mdx//u6tLhcVMKXRXJgFAqX7DH6hg8Qq5c/YsMYnkJ7JvhIL0bxC4viWiHzKvgRJk1yjplsdnjxQvNTNCF9XETuUq/awbsarS6L228drEmabyg3mXB4b/Od4k3gq7US1M0ngSqDErfpo9LjWCFWpMN5IICWEU0jY7utAMR4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com; spf=pass smtp.mailfrom=hotmail.com; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b=S4a7v968; arc=fail smtp.client-ip=52.103.66.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hotmail.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fCpQs/npjhdX9TuwWR2aFmvyhg/eSzsm/cq9tvfzZNgw0T2G18MFUQb5fCLs9tCMiy6QIyqU5G4SSfyarkuldOGSps/Xb2U0GypgVNCTULJjhPycNIx4WTAORJL6qSmHeRNewl8ZCR+O0XNPi8KQpx5v3QmnHqFqKytjz+XY/4KECWFDFqE1EUjeHBJFsAqsn+tKfjxxII3/1O6nXt7JbxbR94sSpwgFUUHK2nK4o/f7qL1HiriLnh/JRKYDWm6/HEtkvfu4no5IfQq/IEFciWJUtzjIlD8xY375prT7WxlW3oKldkLg4vt64qsVJs3RADW18lDLrobNHOaJ28RGmg== 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=a2BZtCaOezEGvubs9RJbnZCs/TAj7++TLtMimHIae88=; b=gnHasQgfPq1CtlXuHUs564YBVYDdqqHYMWJlI7ApzmAl7XDY9YZNQd93BQFL67qPmS3xq22S/lPh+3ez1jba+agWN6yIdw3vJcz9V1dJy+xEqmWTTlvEiKiUTNMfH8TSd+OOOCKgNc79XXIGNK2C/VCDYaonHuGb8gaZ133UZ5kj7OSxTKKyKU33d/nStKFjxALQc5NfN9Kou0HzZKFfyVsEwUCEy7kgA4ECXJxa7bnEZ+6JHYPchSiQ+ZWNDSeVLYmh4XAX+DdRVnYu1Yck0BBiTotTPncMOMBFCuPO5x1vowAfaa+/d9SSNXQCps1Jn+aDL68gJKBN+VBkLlvfgg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=a2BZtCaOezEGvubs9RJbnZCs/TAj7++TLtMimHIae88=; b=S4a7v968+lhr2RNzNMRwzVoKK4UvHSyB8WIEJyKWB7vXs1LArcoeg2dsyvUaO6Hdo6X8CR8cZOBT+qIf0QnjA2SbSHpjR+tmXFeMmjC6A5ePwx6n/yvPtuF6YFWEBYartJWIwCDfked0TL6NQoKqQh047D0saffSwMtvUgMUhNmlntT4W3rt11f8wRFKfajaJAN/fJpP8v2TnJiX21PEsb0DRy4LCkEuJkmRCpX+2/QXL97Y5VLl8yhsdA7Ea2u6UL8J0oc5z69g26Hnhq7Jvto1Hv3BEeXQNftUPRBP/o1us6K0b8U9UfWmoDNCNBGfuQTM50YfSqlq0Tz/VCU+0A== Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) by SEZPR01MB4733.apcprd01.prod.exchangelabs.com (2603:1096:101:a0::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Thu, 3 Sep 2026 03:46:47 +0000 Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c]) by SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c%4]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 03:46:47 +0000 From: Wei Wang To: bhelgaas@google.com, jgg@nvidia.com, jic23@kernel.org, error27@gmail.com, kwilczynski@kernel.org, rdunlap@infradead.org Cc: akpm@linux-foundation.org, bp@alien8.de, alex@shazbot.org, kevin.tian@intel.com, manivannan.sadhasivam@oss.qualcomm.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, wei.w.wang@hotmail.com Subject: [PATCH v9 3/6] PCI: Consolidate delimiter handling into pci_dev_str_match() Date: Thu, 3 Sep 2026 11:46:15 +0800 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: X-ClientProxiedBy: SL2P216CA0092.KORP216.PROD.OUTLOOK.COM (2603:1096:101:3::7) To SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) X-Microsoft-Original-Message-ID: <20260903034618.1100387-4-wei.w.wang@hotmail.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SI2PR01MB4393:EE_|SEZPR01MB4733:EE_ X-MS-Office365-Filtering-Correlation-Id: b08c3a55-91d7-4ba7-6420-08df096dfa9c X-MS-Exchange-SLBlob-MailProps: znQPCv1HvwUXBahuwteIkQeW30lJPuxOKJoN5/65oG8pHy8XKfr/71GPfyb+PVrQjgdyvvmWv3hVV8PdNkCMqqUQd1Ivfhhuvve+WXMrYa67AXOJjA3SxJzE158E4VCh4bSvwmUc1c83dInZ8cAh6q17tBlE1gPaEFBpBErz4pKtKJs49cn+iiRdbA0G4NIBPdUZWgmIDuSSdNaJSUlQ8D4Q49imMAbHllPTDeA9cPuXTQ2zbHAFpU9gVbyPv3FVWWLmnFWyXhwZOgLWq3Td1Q47ZoDk0TCrKOF+0DMgned6QbHdPnQoCtsMtYeBB5RbYKZpwxWgXmtJFPmQqt2BO2YI64CJ1wVEe/qOLW5ipi/V6bdgYNvfy4bEGTgoPTT4jnPFkXmpAQXrH5vkQY5O63BXeMYy+xUwcgoH8dettCGwPMaSNNK5I0qaZ5np0BQ4a9Px6Ucp6up3J8TfIkQWWGi4vLhNKfv6Sq2KDlaktXBlVOlLFKNaC46zx6uq8iolm08ou96q+ziTbnVtPUsDcdVldAOaBMtf19fWpg1dNcgSdTGhYQEcdZaGxgPcWSHEnSnPQnZnNl42S2tEI6wMkWoJYfAlz8ClrQaGw3M5S7a0W29g5dVi8QRCiIxjQ2t+A+bd9mQ9Vc5QPcFf1GgP0D8o/hN3DXvlDab3Yp/N65Rhb5a8AXX+KfW4IXxnEfdra4RNG0wLoDbpKcVf1Dx2hTRRyrQvBwu934rx0ThfHm4lI5JBP/jrJQgHpYmZTs6Q+UPVGmXSn+w= X-Microsoft-Antispam: BCL:0;ARA:14566002|41001999006|5072599009|19110799012|25010399006|23021999003|8060799015|37011999003|45011099003|15080799012|51005399006|440099028|3412199025|40105399003|2607281247196008|1710799026; X-Microsoft-Antispam-Message-Info: KWhbVeVYK8vDPHiMhNUrhHyl+IeJHCEw9XwagycPfVC+5CjBG4WvDNWyTJw1RGXcLQiRZON0MFIUE5iYmgOYSbO5z+Wt96tbm3p6D1BTPXLt4SdSqueDHFFigZOkostrkvJXg0dL2Y+InmhR+5VzaVpAOra7X5hW8uq6zYE1EUAHahC1vwqBgIJI6Eon7/QdmgeePFrCMFP6fO2bvb/3w4PC81HW2kFFVeW+QsETbsnHWIddavduIc4Q/zg+QXj+iYM3VT5PKP3IZzBLEu1vciAm9wvhWrjSxSorP91t2AAjHBjbcwYGMG0Nndypq3MGSbr8cKMV5ZajNjP/0ETqOXoGkjoInaRcmgW95apm1Rtc0SHHFqmNcGWBb6SQ9m32fGlTdB9E0+8AIBb14IkcKR1OY1mhW6GgaFXEc5Ok47BmzwkZBWsvPdAVsSliDZDo+tFmDW1tPj+lBb7I0ZJtb9Nv2gbVGgajZz/v2qmy+W1oh0UZpf8+kYKCEd1IMMtzKNIsNGl8YH37WkEPPYolY9gK7ciblSNZzvHuynOSj03sUsCsKbBXIZjBwtk8gqlZ6J7z153k6SDe9QIg33m9ZC6nc2udP8kENVjniyQS3wzB54GD8Flr3FAprvGpln9a6sfwQAnlNI7bn4DmZBCyniCnWsxsdbJzsg5uvkPpgPz6Iy3G1baX1lJ3J8xslCyRPlMHd1TvEV0h1hW2PZWQHKOZRc75c9bzMRA0PxsU1tPXX0eQIRO0+LqicHDbz0EL+tHZqUAuKrsDD0dHsBmaohcGq45VFyr+UFS1eu8mQzHe2XLxKrG7w/eOqtB2eP5OANb7BOHnHImpMCP9/h7bqyJogPTjKSQ1cEwzL+baIcnbByMW1LIA8WaPLuwrHzsxeMsntEV3+C88MqGG6UEh8Jd/H2cQrcpdROPWNNlwY5MlWlU1Pqa6S+bYbWzoXwXSpwOWTshU8k4FvMYlf6rF1IOz6cAtAOVAXJk2oGb7FqKkKRdy05ToEeM5kTIzfT6gWQD/eIleKARekMWU+hnULA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: mdqzdm+y6ZeOlJ9pKUb+IhuDyVtaKjCZZAr0C22O6lDfzdgCndqTIjGJj9ag66ZLdCB+/T7+1YeGLbllLHWK1Au4SAENYuiBMFbpbKIjeuViCiypsgpy9sebPMwGoNgrctLXs3TlnBjQRqplYsQmPEsDUDFVz6VXgR3A6+iwm0+YbxYD9hmHd/pk4XkB5KBHAFh9Kk6IzH2BKoCD6O4H8xfC9LZ2PAwV5CEOVF3hdPP3klWwd/UWajzFsguGYp3HZ2zbCfzqILMizcYW0xhYnrf84dH8o5oyZ6kMWLWMo895QhGJDO2RcBrcyl9z4YgGU9/vsLOZH8djtUVhIKKHRcjObvFSRp/D83+0ebVVb6gJFRLzVzCDsOcjOJvY1W4U7yXfDevnIUYasvd2RoCZkVxBhEBYzRANg8z0ZSZJPJf9Akoh7srYhWbaYnx1ZGmyj/EdCmQmcZefPpG0tk/vkBN3FQp6QaXPxhNPM72Y/4IwBbK4r8FtJuppHVFgXnBfr6b5TZsBPABYr8ikO/GWYsTIW7DqBg2fiK+aUYa7OLLjJqahvu1JSZBC9DMFmI92RDJ0W9so5UkE5BNu55vPK1da9+OS5ltddtSRH3xUo8mK8aV+Zt1ZeAUbZjpZmz128kYfK7Tuw/MRa99kZoqxFJ3aOlruOmoIrDjJ4Kqq+/zd7ldSCx1mhia3TDaDaSJqamLyNxKXCHZ996Z85tpbpjsOLw7cwUTd9iK+RrEuxpfqGzFiTbXxvosQgjOLfHBh0HLy+FgfjMoVvKkI4dchE/Q0VEixu+59ozR9wWuowyWaAGi+1AyHLc/JFsZ5FX772E98641L6tvyzvzZIaQxd49lSS+y1fpQ3/9Mqou2vNXxt44mUsTjENDL3Y7KfoMLlc5+DrP6zFUcurFjpEm1DZz99+jCOMdGECr3sYWW+gB6KSJBnPpLkyETyzQonmotSDbc4ybzayKeu2HraWC/w40h6Z80v1Q9SqiEdB+LIlEh2z+3M80U1PFFdtNERfWjeV7Yc3ToTLqwQ3pZDA+VmDpV4bHc8rAS9vTmhF3LPtU87HcsnaFOnokvOhKz8TsyB69M+cjx+x5fJ30w7NmmmB4w0f3qgJxQMbp9LBP1TbpXXL8GeaqwoL59XjsYUUAM6cQi4uEStHY07wlykRJcBp2lJ1jWxjpJzLGSn8UGp5nz9PsmSflF+VGW41iJW5d+X27p3lpGxML21ECJfaitLPrngDvrNrf0uy5SNZ99yZDDNeGQMo2CMxPRFk21HFSSSPTCAGckldAtkyhfPnCmu6IARUkKs8fz5VRc3Dv3a64iCWkcUMJ7iXMLB9kzMLRKw2gmBqYZKre3IECz6v+kNzZznF5L8hFK/kis2L2LLUUPmzGLQwb28NDlPxNiwbCG X-OriginatorOrg: sct-15-20-9412-4-msonline-outlook-3e488.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: b08c3a55-91d7-4ba7-6420-08df096dfa9c X-MS-Exchange-CrossTenant-AuthSource: SI2PR01MB4393.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2026 03:46:47.6351 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR01MB4733 Callers of pci_dev_str_match() manually checked for the ';' or ',' delimiter and advanced the parameter pointer past it. Move this common logic into pci_dev_str_match() so callers no longer need to duplicate it. As a side effect of this consolidation, pci_dev_str_match() now enforces stricter boundary checks on successful matches. Previously, if a user provided a malformed parameter with garbage characters appended to a valid BDF (e.g., "pci=config_acs=110x@0000:04:00.0foo"), the callers would silently accept the prefix match and ignore the trailing garbage. Now, pci_dev_str_match() strictly verifies that the matched token is immediately followed by a valid delimiter (';', ',') or the null terminator ('\0'), returning -EINVAL if it encounters invalid trailing characters. Signed-off-by: Wei Wang Reviewed-by: Jason Gunthorpe --- drivers/pci/pci.c | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 2af679111a9b..587c013f04db 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -336,7 +336,7 @@ static int pci_dev_str_match_path(struct pci_dev *dev, const char *path, * pci_dev_str_match - test if a string matches a device * @dev: the PCI device to test * @p: string to match the device against - * @endptr: pointer to the string after the match + * @endptr: pointer to the string after the match, with the delimiter skipped * * Test if a string (typically from a kernel parameter) matches a specified * PCI device. The string may be of one of the following formats: @@ -390,8 +390,13 @@ static int pci_dev_str_match(struct pci_dev *dev, const char *p, (!subsystem_vendor || subsystem_vendor == dev->subsystem_vendor) && (!subsystem_device || - subsystem_device == dev->subsystem_device)) - goto found; + subsystem_device == dev->subsystem_device)) { + ret = 1; + goto out; + } + + /* No matching string found */ + ret = 0; } else { /* * PCI Bus, Device, Function IDs are specified @@ -401,15 +406,18 @@ static int pci_dev_str_match(struct pci_dev *dev, const char *p, if (ret < 0) return ret; else if (ret) - goto found; + goto out; } +out: + /* + * Whether we matched (ret == 1) or didn't (ret == 0), + * ensure the token ends with a valid boundary. + */ + if (*p != '\0' && *p != ';' && *p != ',') + return -EINVAL; - *endptr = p; - return 0; - -found: - *endptr = p; - return 1; + *endptr = *p == '\0' ? p : p + 1; + return ret; } static u8 __pci_find_next_cap(struct pci_bus *bus, unsigned int devfn, @@ -964,12 +972,6 @@ static void __pci_config_acs(struct pci_dev *dev, struct pci_acs *caps, /* Found a match */ break; } - - if (*p != ';' && *p != ',') { - /* End of param or invalid format */ - break; - } - p++; } if (ret != 1) @@ -6488,12 +6490,6 @@ static resource_size_t pci_specified_resource_alignment(struct pci_dev *dev, p); break; } - - if (*p != ';' && *p != ',') { - /* End of param or invalid format */ - break; - } - p++; } out: spin_unlock(&resource_alignment_lock); From patchwork Thu Sep 3 03:46:16 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 2297228 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=hotmail.com header.i=@hotmail.com header.a=rsa-sha256 header.s=selector1 header.b=rpotDOFg; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=104.64.211.4; helo=sin.lore.kernel.org; envelope-from=linux-pci+bounces-65264-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4hb5jb06Ydz1xvg for ; Thu, 03 Sep 2026 14:10:27 +1000 (AEST) Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sin.lore.kernel.org (Postfix) with ESMTP id BD6AE2C521 for ; Thu, 3 Sep 2026 03:48:17 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 07ACD392C24; Thu, 3 Sep 2026 03:47:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b="rpotDOFg" X-Original-To: linux-pci@vger.kernel.org Received: from TYPPR03CU001.outbound.protection.outlook.com (mail-japaneastazolkn19012061.outbound.protection.outlook.com [52.103.43.61]) (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 550F238332F; Thu, 3 Sep 2026 03:46:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.103.43.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407222; cv=fail; b=R70ZQfFwohlipW4rPfKaSWaHzNuGez/ae4CLptaJrGCbp5HLw09qfb0e+QV2WVlRbH9sexJUHss2z2f3sB9nINP0K2KFJYbIThIPErq8AKGsOj3l7IM6vEb+n6Bb5glBINcRvj/E9YCNEtLEUao48egzgni0tI2WWLZWsWxdhrM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407222; c=relaxed/simple; bh=yRDbJyeefe7/iD93mtDXQHAW3lA+eNtPFhIM991Q2to=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ev0HWlMg2MgNnr6aSI5hHnuINMwK9G6MtJb2ImaV2o1r48CtJRLtLBITeU/LDOgJucHEJ2cEjlVTqubC0V0Vl4L0Ncq9hRnyh8RgwhJ1ocNcFx6IYZcHTdi1f6FgXBCwolDz5OH9oh+HB03dyFmrv0iXiGV7hWovARyLn79HZHY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com; spf=pass smtp.mailfrom=hotmail.com; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b=rpotDOFg; arc=fail smtp.client-ip=52.103.43.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hotmail.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EWUdpExLGW4hs5hzMTtH85h/eAZW0gwaeo1C1AO/Va04EgvhX/w/fdWuquSTnoPZsU0l86hbo6WbwgKmCisnm/brxjvQ7G8UKLA81rsNLMC1+ZfCUv40DQhK4bUEu3iG77vrIaucjlU3nrgBjDIkqeuDZpO8B/2yE72DyOM9VQnr7nOd4AxdF0sVBrk/OprGAPeNmYEHco0gL0bK6L5iwmZn3eDHHbOQrEtAd/VIftwOftdAZWBj1yPtT07PTP+HQE4ja2WD/RKORG/b6vwOrNgtgopR9oy/d4ZrLBMKilXZq04Vfvz9hJKoyPd8wfSLlNoon4kEU6RmIe62SLOrZw== 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=1gUtCQ7d5UcLEqnoI16Ce0rpCLOkPubzeHp2iexvqFE=; b=Ym80lvcrVbFESSmUS5Mmk0aI+sX/go80A7oQCwYwvfKt15vDaMJftSMK4TGn0azpBXuyA93Ax7XfiYjV+e+GeRtt/ycSaFQxc+8MjsPQTTFFatpj0v3ng8+Tcc924/jUBJnhCaKlwVz7U9mPK+n8MZuMjY6lJ0RF8eLoS3tJSXrhSSKFG805RCMlRiQ51H34s7K3jo9fljVDBMLkSaez8nANaU0dtEOzse18WG4BsqGF+U+AsVodQVlUPAxEtde8m4ZnKgkRTUH4BVRQSyZuYyrnJFFZXmO1qvMv76LkX4YI29t0J+KM366tI/90dn1VuUc4jWjLDPwOjHVWDJC02g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1gUtCQ7d5UcLEqnoI16Ce0rpCLOkPubzeHp2iexvqFE=; b=rpotDOFgSpbdnoFox28kO/u+YxnsvoK+d2+u1Q8kGaXOdggcgfHUGlButbZCxSgE10ZoLJGomK2L4zS3WH28uqvw4EyhiKXiJ+KRcUuhU8iOO13d3gXMAQ/zb4HsKGOH57vZHQ8x02AcpxJJ7wBX5PioIkobfsYvGro6A1g5YFDuajDZ0EwbZ6LfcQhDe98g9SqTm74hXebsRLd5vsR1nVhkWW3V2W8ypWfwfLr9KGsidaPyaMlxXhnxwOsymZAmImhvyh088zRVQmXqv4246uhdrZ5fHzXnVRYJ0CLvHPtX+1h4dYo45k3RZ3KOHwJ+RdFwSEtZZqHohbDPlIAGSQ== Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) by SEZPR01MB4278.apcprd01.prod.exchangelabs.com (2603:1096:101:41::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Thu, 3 Sep 2026 03:46:52 +0000 Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c]) by SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c%4]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 03:46:51 +0000 From: Wei Wang To: bhelgaas@google.com, jgg@nvidia.com, jic23@kernel.org, error27@gmail.com, kwilczynski@kernel.org, rdunlap@infradead.org Cc: akpm@linux-foundation.org, bp@alien8.de, alex@shazbot.org, kevin.tian@intel.com, manivannan.sadhasivam@oss.qualcomm.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, wei.w.wang@hotmail.com Subject: [PATCH v9 4/6] PCI: Refactor disable_acs_redir and config_acs param handling Date: Thu, 3 Sep 2026 11:46:16 +0800 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: X-ClientProxiedBy: SL2P216CA0092.KORP216.PROD.OUTLOOK.COM (2603:1096:101:3::7) To SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) X-Microsoft-Original-Message-ID: <20260903034618.1100387-5-wei.w.wang@hotmail.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SI2PR01MB4393:EE_|SEZPR01MB4278:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a96ba09-7e46-4050-01ad-08df096dfcf4 X-Microsoft-Antispam: BCL:0;ARA:14566002|12121999013|37011999003|23021999003|15080799012|16051099003|45011099003|41001999006|51005399006|25010399006|19110799012|8060799015|5072599009|2607281247196008|40105399003|3412199025|440099028|1710799026; X-Microsoft-Antispam-Message-Info: 6/pIKYnTbtWmh5tQhO4Gkl0j/bG02xgoFbZ3bSy8A4bHmSdOqo5YutVqoUYk3fKhjIaon9GZ68Sh82PNETN4a4Wt1bgf+vG5jhnMjVCt3A/hYFgcnUblJHUdV9ACcuNKla7OFrxyVU7UxOlOez3d3vjXIk4fjIwabkdpDsEjjeJ7n6KIB4YhKVxkpikHJUE6Kgj1jPGD1hVgQ1a0mZW2tz+DxOeb5LtMGaofnCdR91wPAqggmBoKbaa1LNvLZrMHUFhvKhKHfFkUKNLKY428OUG4rWh+cJRSBVojZeW6GxsfORlvuO02mDS3aAgjmylMIBzVWukz/FXW6tCro44XoTzlBmsxSojPTg4ou+WNJfQwd11JXOZG71AYuomRq/5JzGdcB4iA4b6NUXuv7GN2ja3C1iiF31kKmMrnVhW6FyJyLRISbCvQHKfBp/9x7B2rP3lPKyupWnvbM/VjHa9YLuW0DpRLXfc/lvMF/tLUuXZQ7eA7nJZGGb+yfdHOeyk3Gsjz1H80Wq7NBARLQyJWNWeA5DBEmZicDpR6BnYdKxRzHOrK5LhmdU1DOFNFpdSu2z5JzN5ezSjyNS+oq+rlrI1vUxsY9hWgh97fi7/NLRelAPNnGLXiwEyuMYq89pKfCnY/PFSBPHHPLrhAMANc6dyePkvRpYtS1wF5KoOXbwIEpoPDSxO/vWsI1tQDHSNlEdLpd/SCQ0adbk3gIXCfv/vdWWq3aJpTNH6QLqeJCcK2xbuh+Bo3wQZjyFGlxUbU61kyr1zjdF/7mffCR8StspflXtqTmAlTZkW+2kgF9kostUOKY8ddv1cqPWZLYo41b8L0IolVJuX5KGUSa5oZoJLnSxofydlwKgeZGrjtRtyyaobgzTE7g9S751KHK9z4smmgMS0LAkLFBmPH22MMl34FML/eMCMRCU9TaKz/c6suuwsbOiKe8HCgiypuMs2D1uKQrd2VAIp9dv1aWhGiVsL5N7TDPjxGyrx28u5P9Erms0QkrDtS1mah+kJvAWa+GYfZXM5S41ivc4ZiN8mMYE0khD6IDs9thxrs9czhQUfoTWCxKzf1xvcxcMsxyXUjrB0Hg5ETITIpXuBYJFxWhg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 8zab3USVzivmH7ApZ23JrWA1dwIeoctsgd4m15k13AjqJH48Z9ed61iwPRLqC0yAdgehYrlelHDnCLT+z+K2aqYVTfydzMAFX0mGzO8wpqCcebgCleGUXEK/NlCAFlKo3dzTR8YhSUN8AyJljvDpWw4RPdJor8lFJkwhmcfiL7osXDmNadZmk+KexKLh+pvHnMNXT2C+wLHJYAXh461QS9RFLwN7wgBfMctG977raqRYEgohcSiMQEz0vnZKi0z9dL1IjUXNQXpZS6FMjNa9BQWnciMADgA/dkcYPcZVUK2++vtTwfT8MpTMXYCPWR3yJH7wnOd8HeEm9FaFyyP3Ofesk5dyAc2aZFmnwQ7OGWDDBBWxyVV8imYzaf/8QF6cdmLH+EvS3knifBjgTNiobxu39yWcASkLgtpZw5ceLirk5I0Rz7zNhz1VnfowYFb4a9ucXy1JegfQWSV8iv5G4uhTmCo1oZtVsvW7cUeKH9Sz3t/i04mMAng3BgQa4K7HrFBPAtViX+LhXj4dfsTjLFcHNoYdm+lj8D9wcBbRXp0QtxxNXNHgkhh9OwXayXtzihQNIxSVcvXUQBBa7idXbtBx39UaTiEU3tzLr4+KZGfLn7GuOi7/jh4cBCCUHAu67arYnja72hK+mUcyQK2qjbRQVXKLwVvr0HQtEgH+c9i22DWoYus+rNnYqHNni8mGzeEV3s/sEfTFRdRwtC/r9UztLfCyOlc/O9lwqF3tlUfVLGxPN8a41vX8O4K0PbctNZROQNYd77qojfM++FRa2EoV3pExFjXp/HUBL5lQJrskUFPlOUul6zjyRtWRyjENDZ4plWrs+V06W8dCn/gnJQDamMgyRO0HxyCugUmwVU1DNv8fjI9OKdi1/EeNzEWA9GM8+/ijlai/PwNc1fsDf6kDbJrWlX3cgAvI9KBqzuHI6wAs1jA+DeZMICvLsoU4LgMsdoCfeB3g0acx4InXQoiVigKu9iKoGphn8lE9ZMVQlRes1S366M/M0iXpttnjG99RyE22YGsPVTWeWks6eorN1zC+4UlZnvqN600SVEV/YkmWCUJFt5wFdHLbDl2I+ddn4+PgAkdsBkWmuyGbqZZiA6Ga6xOTFWA3mYdwCWvyidrTewBX7LdkrrGpffxpY0SKHSHdV/5yit/Oanulc1UJLyhRwOWqo8W01JLl/CWEqllPevHkIK2hYdNekkVtoad4o68ljuNfIoW86ChvfQ9AT3c7jp/drUeOHoufyXmd88h+4Sux/hOU67gFg1hiMWW0GVfHm6nUXvNQssZGs5IsDYGSiI0kEYEUeTUmiz4P0Qhj6ykPnJbQl+vyNMv2rMzkERISgsSoyTt7RAmHyoHGFCE6ksR/h8EhrRtUKJWxLfsdAomSYZ6Q85rBoodp X-OriginatorOrg: sct-15-20-9412-4-msonline-outlook-3e488.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 2a96ba09-7e46-4050-01ad-08df096dfcf4 X-MS-Exchange-CrossTenant-AuthSource: SI2PR01MB4393.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2026 03:46:51.5183 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR01MB4278 The current implementation mixes disable_acs_redir and config_acs param processing inside __pci_config_acs(), using acs_mask==0 as an implicit signal to switch into config_acs_param mode. The intertwined logic is hard to follow and easy to break: - The acs_mask==0 special case is non-obvious and obscures which code paths apply to which parameter. - The interleaved logic is fragile; changes intended for one parameter can unintentionally affect the other. For example, pci_dev_specific_disable_acs_redir() is invoked on the common path even though it should apply only to disable_acs_redir. Split the two behaviors into dedicated functions, pci_param_disable_acs_redir() and pci_param_config_acs(), making the control flow explicit and easier to maintain. The new pci_param_config_acs() implementation also improves on the original logic: - It searches for the matching device first and parses ACS flags only for the matched device, avoiding unnecessary work. - A switch statement replaces multiple if/else blocks, improving readability. - Variable names (enabled_bits, disabled_bits) more clearly express their roles compared to the previous mask/flags pair. - Error messages are clearer. This refactor separates concerns, improves robustness, and makes future extensions to ACS parameter handling safer and easier to review. Signed-off-by: Wei Wang --- drivers/pci/pci.c | 180 +++++++++++++++++++++++++++------------------- 1 file changed, 108 insertions(+), 72 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 587c013f04db..6cffdbba99d3 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -915,90 +915,121 @@ struct pci_acs { u16 fw_ctrl; }; -static void __pci_config_acs(struct pci_dev *dev, struct pci_acs *caps, - const char *p, const u16 acs_mask, const u16 acs_flags) +static bool pci_dev_match_disable_acs_redir(struct pci_dev *dev, const char *p) { - u16 valid_ctrl = dev->acs_capabilities & GENMASK_U16(6, 0); - u16 flags = acs_flags; - u16 mask = acs_mask; - char *delimit; int ret = 0; - if (!p) - return; - while (*p) { - if (!acs_mask) { - /* Check for ACS flags */ - delimit = strstr(p, "@"); - if (delimit) { - int end; - u32 shift = 0; - - end = delimit - p - 1; - mask = 0; - flags = 0; - - while (end > -1) { - if (*(p + end) == '0') { - mask |= 1 << shift; - shift++; - end--; - } else if (*(p + end) == '1') { - mask |= 1 << shift; - flags |= 1 << shift; - shift++; - end--; - } else if ((*(p + end) == 'x') || (*(p + end) == 'X')) { - shift++; - end--; - } else { - pci_err(dev, "Invalid ACS flags... Ignoring\n"); - return; - } - } - p = delimit + 1; - } else { - pci_err(dev, "ACS Flags missing\n"); - return; - } - } - ret = pci_dev_str_match(dev, p, &p); - if (ret < 0) { - pr_warn_once("PCI: Can't parse ACS command line parameter\n"); - break; - } else if (ret == 1) { - /* Found a match */ + if (ret == 1) { + return true; + } else if (ret < 0) { + pr_warn_once("PCI: Can't parse disable_acs_redir param\n"); break; } } - if (ret != 1) + return false; +} + +static void pci_param_disable_acs_redir(struct pci_dev *dev, + struct pci_acs *caps) +{ + const u16 acs_redir_mask = PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC; + + if (!disable_acs_redir_param || + !pci_dev_match_disable_acs_redir(dev, disable_acs_redir_param) || + !pci_dev_specific_disable_acs_redir(dev)) return; - if (!pci_dev_specific_disable_acs_redir(dev)) - return; + caps->ctrl = caps->fw_ctrl & ~acs_redir_mask; +} - if (!acs_mask && (mask & ~valid_ctrl)) { - pci_dbg(dev, "Ignoring unsupported ACS bits: %#06x\n", - mask & ~valid_ctrl); - mask &= valid_ctrl; - flags &= valid_ctrl; - } - - pci_dbg(dev, "ACS mask = %#06x\n", mask); - pci_dbg(dev, "ACS flags = %#06x\n", flags); - pci_dbg(dev, "ACS control = %#06x\n", caps->ctrl); - pci_dbg(dev, "ACS fw_ctrl = %#06x\n", caps->fw_ctrl); +static const char *pci_dev_match_config_acs(struct pci_dev *dev, const char *p) +{ + const char *seg; + int ret; /* - * For mask bits that are 0, copy them from the firmware setting - * and apply flags for all the mask bits that are 1. + * Example: 11101010x@0000:01:00.0;101x@0000:02:00.0;1@0000:03:00.0 + * Three segments delimited via ';'. @seg always points to the start + * of a segment and p advances to the start of the device id (BDF) + * after '@'. Upon match, return the start of the matching segment. */ - caps->ctrl = (caps->fw_ctrl & ~mask) | (flags & mask); + while (*p) { + seg = p; + p = strchr(seg, '@'); + /* If malformed string, stop parsing. */ + if (!p) { + pci_err(dev, "ACS Flags missing\n"); + break; + } - pci_info(dev, "Configured ACS to %#06x\n", caps->ctrl); + p++; + /* pci_dev_str_match() updates p to the next segment. */ + ret = pci_dev_str_match(dev, p, &p); + if (ret == 1) + return seg; + + if (ret < 0) { + pr_warn_once("PCI: Can't parse config_acs param\n"); + break; + } + } + + return NULL; +} + +static void pci_param_config_acs(struct pci_dev *dev, struct pci_acs *caps) +{ + u16 shift = 0, valid_ctrl = dev->acs_capabilities & GENMASK_U16(6, 0); + u16 invalid_bits, enabled_bits = 0, disabled_bits = 0; + const char *p, *seg; + + if (!config_acs_param || !valid_ctrl) + return; + + seg = pci_dev_match_config_acs(dev, config_acs_param); + if (!seg) + return; + + p = strchr(seg, '@'); + /* Parse bitstring backwards from '@' */ + while (p > seg) { + if (shift >= 16) { + pci_err(dev, "ACS bitstring exceeds 16 bits\n"); + return; + } + switch (*--p) { + case '1': + enabled_bits |= BIT(shift); + break; + case '0': + disabled_bits |= BIT(shift); + break; + case 'x': + case 'X': + /* Skip this bit */ + break; + default: + pci_err(dev, "Invalid ACS flag character '%c'\n", *p); + return; + } + shift++; + } + + invalid_bits = (enabled_bits | disabled_bits) & ~valid_ctrl; + if (invalid_bits) { + pci_dbg(dev, "Ignoring unsupported ACS bits: %#06x\n", + invalid_bits); + enabled_bits &= valid_ctrl; + disabled_bits &= valid_ctrl; + } + + pci_dbg(dev, "ACS enabled: %#06x, disabled: %#06x\n", + enabled_bits, disabled_bits); + + caps->ctrl = (caps->fw_ctrl | enabled_bits) & ~disabled_bits; } /** @@ -1033,6 +1064,7 @@ void pci_enable_acs(struct pci_dev *dev) { struct pci_acs caps; bool enable_acs = false; + u16 kernel_default_ctrl; int pos; /* If an iommu is present we start with kernel default caps */ @@ -1051,14 +1083,18 @@ void pci_enable_acs(struct pci_dev *dev) if (enable_acs) pci_std_enable_acs(dev, &caps); + kernel_default_ctrl = caps.ctrl; + /* * Always apply caps from the command line, even if there is no iommu. * Trust that the admin has a reason to change the ACS settings. */ - __pci_config_acs(dev, &caps, disable_acs_redir_param, - PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC, - ~(PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC)); - __pci_config_acs(dev, &caps, config_acs_param, 0, 0); + pci_param_disable_acs_redir(dev, &caps); + pci_param_config_acs(dev, &caps); + + if (caps.ctrl != kernel_default_ctrl) + pci_info(dev, "User configured ACS to %#06x (default: %#06x)\n", + caps.ctrl, kernel_default_ctrl); pci_write_config_word(dev, pos + PCI_ACS_CTRL, caps.ctrl); } From patchwork Thu Sep 3 03:46:17 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 2297211 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=hotmail.com header.i=@hotmail.com header.a=rsa-sha256 header.s=selector1 header.b=KKh6Zu1X; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org; envelope-from=linux-pci+bounces-65265-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from tor.lore.kernel.org (tor.lore.kernel.org [IPv6:2600:3c04:e001:36c::12fc:5321]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4hb5S70xThz1xvg for ; Thu, 03 Sep 2026 13:58:47 +1000 (AEST) Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by tor.lore.kernel.org (Postfix) with ESMTP id 91AD561F82 for ; Thu, 3 Sep 2026 03:48:30 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 782D23750BC; Thu, 3 Sep 2026 03:47:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b="KKh6Zu1X" X-Original-To: linux-pci@vger.kernel.org Received: from TYPPR03CU001.outbound.protection.outlook.com (mail-japaneastazolkn19012061.outbound.protection.outlook.com [52.103.43.61]) (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 E53AA392820; Thu, 3 Sep 2026 03:47:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.103.43.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407226; cv=fail; b=tyBMEb44P2jQuqoYxMm3qYTceJzJA7leqnd/knvgjKgkm8272p1DzqcGrFDmLlA2g0UGQsWPXWIJv1AtsQ2owQwvoCg59aWYZ9jSVaWQbZ6N8kq/y1LrNNKqybjfeIoI+fL9i79xAE3OH0nyudUFn3jj2z5m4J3lokiw1onGmVo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407226; c=relaxed/simple; bh=1COkft2QkEHvSZG4jONo33lvgZ9CAv7/H2XxI2jVkJo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Nx8ovYlthknmleh8ScWZPaPGttB+eSRToz3HSSSlfabHPjw6ll1cohknf4tOoNrUUYEYQomfUF3OAO3vggq1UAoj7NAUMc2S0yormYi1m61VXTc/lWvtFU/42h/gUbLNdSV7ALTRstyfKrc7YY2zGiehUvjJRBUu6wPVxHmGbso= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com; spf=pass smtp.mailfrom=hotmail.com; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b=KKh6Zu1X; arc=fail smtp.client-ip=52.103.43.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hotmail.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yD0UPRK0J3FZpYG1hdrq00fnFw8EOrb/DuUZ5K3q04pliQqamfHfHIAiHESDjkaPayS8nlkjHCqZGS/2pyWD7k1mDUgL17+HXAqQFSj28e/VkX4mWsbNx7/zSJCN2KkK0rsik7Yj1rIZevI13UtE6CNrC7Z9THGZXdPU77LzL6tJWHEFK/M5mPNQ2wC9hrtnKMtGfswBtNd+lAOROzW04EWDMZkuluBNCE0dgVXlLwqo2ghotIW7P7DLi6cXjhxrbgIBzdLLGSf6SF6cPv9TaOhWOSY6cjPjv3PMUltsC/EW5DJ6b47jp9PZxNu4b4jq+/xPbynCJu5eEiFsFvlgoQ== 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=UmjAr3sLKoJIzbLJaaHc5wAmrtZRgCtM0dH/yQzsXMQ=; b=ewtlN/Ujs1gEgJc3c1DVuToG6QxmML+55HOTAxsJovHgAz1Wp5ZBeJeG9upLDJSx2mLn4gPGrgQKL/TG5T/OQXB2JxGlTNtT8e7ApAFmbw61CMeI4oMJG+trlPHsPSE86rUa52Aw1aGGEhLui9Vu+JW6P8O/iY5Oy4MsGjXeu1YeHF5ukY6UmkZ9a6PGi/j75DH4ohBQl5ruKhzj+m0vYi4bf+5Fd6E/cnS96/xuL16Bth/gVzUtPPfCatmysoG3EKRDIEUYzBogfEBlPr5qnJ+h3Yq+KxSZ9c9fkZ8VU2zIuAetiiYpMnU56B/0+V2iHY9FZboD5clbg9fA4fo2CA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UmjAr3sLKoJIzbLJaaHc5wAmrtZRgCtM0dH/yQzsXMQ=; b=KKh6Zu1Xt50PxUVkx6Bfp0SDJvxE4RvGRK9dLjhwvAalG/wssdUPiIgaWDMmo9XNrtcume/Y1tqzLRbgkpH1Yed4JsdsFFPd0TgAinR00m+UgE0+tVLw880fHSLxFIPB/yFQtYm96551S6fruKYcL7R3Lwhw4mwi3eNQNmGQk9p/mBtAiZy4rfRBCjzF3kt8ctQSiypjJ2BYGV2FXFEi6EeUFn5E23U+hXeMz+vP1KqXrL1bN4KIqx+2hDIXTW00qMXOxcBJzVxyvEZWJEA3OhHZi6GcolPW7Amie2/5L0cx9jY6Y4e2MhMdC6DEM2Ik7eSQxZxJH8YME7fFqPJ8og== Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) by SEZPR01MB4278.apcprd01.prod.exchangelabs.com (2603:1096:101:41::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Thu, 3 Sep 2026 03:46:55 +0000 Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c]) by SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c%4]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 03:46:55 +0000 From: Wei Wang To: bhelgaas@google.com, jgg@nvidia.com, jic23@kernel.org, error27@gmail.com, kwilczynski@kernel.org, rdunlap@infradead.org Cc: akpm@linux-foundation.org, bp@alien8.de, alex@shazbot.org, kevin.tian@intel.com, manivannan.sadhasivam@oss.qualcomm.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, wei.w.wang@hotmail.com Subject: [PATCH v9 5/6] PCI: Enable the enhanced ACS controls introduced by PCI_ACS_ECAP Date: Thu, 3 Sep 2026 11:46:17 +0800 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: X-ClientProxiedBy: SL2P216CA0092.KORP216.PROD.OUTLOOK.COM (2603:1096:101:3::7) To SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) X-Microsoft-Original-Message-ID: <20260903034618.1100387-6-wei.w.wang@hotmail.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SI2PR01MB4393:EE_|SEZPR01MB4278:EE_ X-MS-Office365-Filtering-Correlation-Id: a058587b-6da2-4f56-9859-08df096dff32 X-Microsoft-Antispam: BCL:0;ARA:14566002|12121999013|37011999003|23021999003|15080799012|16051099003|45011099003|41001999006|51005399006|25010399006|19110799012|8060799015|5072599009|6090799003|2607281247196008|40105399003|3412199025|440099028|1710799026; X-Microsoft-Antispam-Message-Info: =?utf-8?q?uNhuvcYQXoWT3bskIBuS4JLWDuX3ghR?= =?utf-8?q?JuaVqlnzjgZY0RTfwPATnOVmeiqofoft88nMgmgMqF65lh9WNXsV7oFmY0jmgcWH6?= =?utf-8?q?ysSo50OrT3bascDGum/1sio0Eju7SEVcQVS7gZCFbCCjPmM8ISmqRqnEQSIb5TJw6?= =?utf-8?q?622JdNQhEjt+3lnGU5CSowypo3oABALmPczkQ0w0Vok4OsAJgirA44rld3Cz532R6?= =?utf-8?q?GX+US7sDu4x/hjZMdg2b9ORGVSWwG4VM+0xD2E+uTXoj9oYWGGE2MtCTMASLAM0hz?= =?utf-8?q?ARDEAd4oaOYhs6Tv4gEqsZUtjfujJNcbzMT+P3tqvhEFdpt08mlb7jhgFRACMq5CR?= =?utf-8?q?og8Wu4w2/2WAsgPRa/pqjkSZSfxbADoVv0PASTafKxlY0UxXRSPlcygskJjjdZTRr?= =?utf-8?q?sUuiUeXKDsh2EfPLO2DmA6S8pdtAR9xtXzq/8J2aultX0Mi44u9oB0hgZGFBGebrn?= =?utf-8?q?eo/hXQ3meSHl72HzMwhZtzaFrWBE8lolTSLnVHEJhIeCCMJKGBYz1R3DRSvomnS/x?= =?utf-8?q?36oDvqf6XCuQn3Yd07TdFbp9SXGcuKyIVbpQbXvo8ICwe67Fp1HW6FwxqYoPhic9N?= =?utf-8?q?dU9q/M9ehJ5Rh0EEq8hO7Mk4VLuEM1v8sRg8+egSO01I0VEgJZOR1xZ65XKE+n3qX?= =?utf-8?q?nlOhUrOFbpat2HIrKprHJUjtJSZWiCiX8Dg/ruFMLq0uDzj0hHAs1RDHvGDJJ5JkC?= =?utf-8?q?Y9gVISMQjUPTZZc6vAwYIqxCkxmxqi/UkhWwE1MtbGoqLsJCz0l2TRJiyEIdy7349?= =?utf-8?q?NFAcvLMTd/Mw6rCmnSNsz2Ty4gJmmbgzKz153vFc4vOWHnBj2vQj04DqMGsP20Wvm?= =?utf-8?q?hShliJy89aSwQleszzC6Vl1+E/PhiECvQ8B8fyjaZEMfHIbkQRxsPIeuwGXIhRMNy?= =?utf-8?q?tOJA6sGbQ4W1aw3KnCIscbrTldKDSuFWt7M7iFUt35FqTwXMi8/R/ad/BoLA3Ei2v?= =?utf-8?q?hBSquTIkSAaS2Gjvl0GVgDTJIrTh47sgTubz4cqzVw2ZzESIyRus0rE2MXGA6gXFB?= =?utf-8?q?cC86eBXaplUBJoNJFb0e3xiuxYMy87+aPH6DT1qbeH0HepzWwNrKewwQVz0cAcPgF?= =?utf-8?q?kcOK1ItJMvZn5Ihr?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?yJVzI2USwZ09m8m2zBMOv/GAf3mP?= =?utf-8?q?7DOR4Myk60AyGaSr+VG7mCk1LrvYcB5f71ObCf4w3+KcEILZlPlmGUbFp6DsKZ439?= =?utf-8?q?B7L+/sYELAmTr82OkX7ydEy+oTBEUrUtlQVFG0JEu3Y+Yj701e67fRa6xUusG4Xe6?= =?utf-8?q?SF2CnO5CyW30OMTnCZVDznCPY6nkqBzHD6PN6fddA1EcFMzniXq8n7xEvSIzj6c+L?= =?utf-8?q?qV2YCiROoGdtJIauaqsDpgtWpeoHReRoKtiIVBc3Es8wnSPoZdboWhHw3fqBOY+/j?= =?utf-8?q?JkfGKR6SAclPx2x2yWc5XQSMdWVF0zUfr17u8EvpRVVixD2rnCIvIEQf35RCZo69+?= =?utf-8?q?qEKlPm97VOBN6WMpc4xOUPLfZYzBRSGt096nl70dXF61tr3ojPNeY0Qe0YFUlGMPC?= =?utf-8?q?ZAVW150v6Jy3lCSDm+7SzBXHEK/+w0+OWtUH3M6cna2SxLq8vjXnhQYYNP0UagpP0?= =?utf-8?q?nO8J9aAhvSPgcEsKXr3So/ZZhNEGkzJ+nTIlWu6H2aznPoYgVramB0e9k6bqCzjk9?= =?utf-8?q?4i8CeVz6PLpJa8fEkHzq7y3eg1su+rr2P3rLTvWxG7Pj0GjmgZ0ZbGMf8MBvS2Dw5?= =?utf-8?q?4M1y9k1J1x/v2VYkFaVwaYay4SYTZfux09Oumc51IK5woRwImfdq/H5sW8yD9D39f?= =?utf-8?q?Az1hGgPH/WUcKIbBvRrrSJCIVRlbbcadKNwc6bcR1qhcxrqJ1v22LQrnOkWN01Opq?= =?utf-8?q?0WJvZig5a+QEGoYwNXr8aUszOAJm8iYCNB6BT5GW8Tt+J3sDXO8ffiQOhrmONTkE0?= =?utf-8?q?KpKOD9z8/j5a9UfIwS1b/xVWltnSyHhjvx1msztr27yxKKHDvLRgEtRjk5KPQvuYc?= =?utf-8?q?bgZqcA+twn99wnE345PAwwG+gwmJid3KzE6ezjHgoBc30l+40k9YDrVfHGYQnIHWv?= =?utf-8?q?mKnZV0liw6v1qB3mMM+UqSoOiNdLvGueO4aTZpDuKEiTuqX4HbC+RG7t2YNQzAiKL?= =?utf-8?q?zv6xioo0nTdThfSZxqZYvjOJ4SSWvlbVZeC8ItLtexSoVFCbnrd5d9io/xUysGWbg?= =?utf-8?q?JQoYD7MT+vOIJKFb0cKZIoBvgsbCUrxDl14x42yagBF1J+nf03lPu/i2ergnOD/mq?= =?utf-8?q?H8yff3WuCqXQ7jr+w67kj/+CnD0L7M1vFH4Qmfzpa4sqgH2dzaLfpAEfkxRBat/wY?= =?utf-8?q?t4UEFL5RMNxVXhPzKG7RaIHADdgnUejPAnk4d11Ax7Lgle6azdemYURqiU3vMbSJ0?= =?utf-8?q?h3x1SLsPXsA08OK2XI/evC06mSQGYAlLZKQb3EqfY13N++y1+8+m6MQebLGcaBlM+?= =?utf-8?q?lbBELofTgK03t+RV3Sx7q4M6fLFdyv448BYr11dOKHhk83XsUBrPrnAhD25R2c4BM?= =?utf-8?q?HDvK3OJezkGCgOu?= X-OriginatorOrg: sct-15-20-9412-4-msonline-outlook-3e488.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: a058587b-6da2-4f56-9859-08df096dff32 X-MS-Exchange-CrossTenant-AuthSource: SI2PR01MB4393.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2026 03:46:55.2983 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR01MB4278 The ACS Enhanced Capability introduces several new access controls to improve device isolation. These new controls are particularly important for device passthrough in virtualization scenarios. For example, a DMA transaction from a device may target a guest physical address that lies within the memory aperture of the switch's upstream port, but not within any memory aperture or BAR space of a downstream port. In such cases, the switch would generate an Unsupported Request (UR) response to the device, which is undesirable. Enabling Unclaimed Request Redirect Control ensures that these DMA requests are forwarded upstream instead of being rejected. The ACS DSP and USP Memory Target Access Control and ACS I/O Request Blocking features similarly enhance device isolation. Device grouping in Linux assumes that devices are properly isolated. Therefore, enable these controls by default if PCI_ACS_ECAP is supported by the hardware. As with other basic ACS access controls, these new controls can be configured via the "config_acs=" boot parameter. Signed-off-by: Wei Wang Reviewed-by: Jason Gunthorpe --- .../admin-guide/kernel-parameters.txt | 23 +++++++++---- drivers/pci/pci.c | 34 +++++++++++++++++-- include/uapi/linux/pci_regs.h | 13 +++++++ 3 files changed, 61 insertions(+), 9 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index a2563ff69f51..9019dac26b17 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -5324,13 +5324,22 @@ Kernel parameters flags. ACS Flags is defined as follows: - bit-0 : ACS Source Validation - bit-1 : ACS Translation Blocking - bit-2 : ACS P2P Request Redirect - bit-3 : ACS P2P Completion Redirect - bit-4 : ACS Upstream Forwarding - bit-5 : ACS P2P Egress Control - bit-6 : ACS Direct Translated P2P + bit-0 : ACS Source Validation + bit-1 : ACS Translation Blocking + bit-2 : ACS P2P Request Redirect + bit-3 : ACS P2P Completion Redirect + bit-4 : ACS Upstream Forwarding + bit-5 : ACS P2P Egress Control + bit-6 : ACS Direct Translated P2P + bit-7 : ACS I/O Request Blocking + bit-9:8 : ACS DSP Memory Target Access Ctrl + 00 : Direct Request access enabled + 01 : Request blocking enabled + 10 : Request redirect enabled + 11 : Reserved + bit-11:10 : ACS USP Memory Target Access Ctrl + Same encoding as bit-9:8 + bit-12 : ACS Unclaimed Request Redirect Ctrl Each bit can be marked as: '0' – force disabled '1' – force enabled diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 6cffdbba99d3..50a3b61f9898 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -983,9 +983,12 @@ static const char *pci_dev_match_config_acs(struct pci_dev *dev, const char *p) static void pci_param_config_acs(struct pci_dev *dev, struct pci_acs *caps) { u16 shift = 0, valid_ctrl = dev->acs_capabilities & GENMASK_U16(6, 0); - u16 invalid_bits, enabled_bits = 0, disabled_bits = 0; + u16 new_ctrl, invalid_bits, enabled_bits = 0, disabled_bits = 0; const char *p, *seg; + if (dev->acs_capabilities & PCI_ACS_ECAP) + valid_ctrl |= GENMASK_U16(12, 7); + if (!config_acs_param || !valid_ctrl) return; @@ -1026,10 +1029,23 @@ static void pci_param_config_acs(struct pci_dev *dev, struct pci_acs *caps) disabled_bits &= valid_ctrl; } + /* + * DMAC/UMAC are 2-bit fields where encoding 0b11 is reserved. The + * final value can land on 0b11 not only when the user enables both + * bits, but also when they enable one bit, e.g. "1x", while fw_ctrl + * already has the other set (e.g. "01"). + */ + new_ctrl = (caps->fw_ctrl | enabled_bits) & ~disabled_bits; + if (FIELD_GET(PCI_ACS_DMAC_MASK, new_ctrl) == PCI_ACS_MAC_RSVD || + FIELD_GET(PCI_ACS_UMAC_MASK, new_ctrl) == PCI_ACS_MAC_RSVD) { + pci_err(dev, "ACS DMAC/UMAC would be set to reserved value\n"); + return; + } + pci_dbg(dev, "ACS enabled: %#06x, disabled: %#06x\n", enabled_bits, disabled_bits); - caps->ctrl = (caps->fw_ctrl | enabled_bits) & ~disabled_bits; + caps->ctrl = new_ctrl; } /** @@ -1051,6 +1067,20 @@ static void pci_std_enable_acs(struct pci_dev *dev, struct pci_acs *caps) /* Upstream Forwarding */ caps->ctrl |= (dev->acs_capabilities & PCI_ACS_UF); + /* + * Enable Unclaimed Request Redirect Control, I/O Request Blocking, + * and Downstream and Upstream Port Memory Target Access Redirect. + */ + if (dev->acs_capabilities & PCI_ACS_ECAP) { + caps->ctrl |= PCI_ACS_IB; + FIELD_MODIFY(PCI_ACS_DMAC_MASK, &caps->ctrl, PCI_ACS_MAC_RR); + if (pci_pcie_type(dev) == PCI_EXP_TYPE_DOWNSTREAM) { + caps->ctrl |= PCI_ACS_URRC; + FIELD_MODIFY(PCI_ACS_UMAC_MASK, + &caps->ctrl, PCI_ACS_MAC_RR); + } + } + /* Enable Translation Blocking for external devices and noats */ if (pci_ats_disabled() || dev->external_facing || dev->untrusted) caps->ctrl |= (dev->acs_capabilities & PCI_ACS_TB); diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h index facaa324bd86..aeab8e5d54da 100644 --- a/include/uapi/linux/pci_regs.h +++ b/include/uapi/linux/pci_regs.h @@ -1016,6 +1016,7 @@ /* Access Control Service */ #define PCI_ACS_CAP 0x04 /* ACS Capability Register */ +#define PCI_ACS_ECAP 0x0080 /* ACS Enhanced Capability (CAP reg) */ #define PCI_ACS_SV 0x0001 /* Source Validation */ #define PCI_ACS_TB 0x0002 /* Translation Blocking */ #define PCI_ACS_RR 0x0004 /* P2P Request Redirect */ @@ -1023,10 +1024,22 @@ #define PCI_ACS_UF 0x0010 /* Upstream Forwarding */ #define PCI_ACS_EC 0x0020 /* P2P Egress Control */ #define PCI_ACS_DT 0x0040 /* Direct Translated P2P */ +#define PCI_ACS_IB 0x0080 /* I/O Request Blocking (CTRL reg) */ +#define PCI_ACS_DMAC_MASK 0x0300 /* DSP Memory Target Access Control */ +#define PCI_ACS_UMAC_MASK 0x0C00 /* USP Memory Target Access Control */ +#define PCI_ACS_URRC 0x1000 /* Unclaimed Request Redirect Ctrl */ #define PCI_ACS_EGRESS_BITS 0x05 /* ACS Egress Control Vector Size */ #define PCI_ACS_CTRL 0x06 /* ACS Control Register */ #define PCI_ACS_EGRESS_CTL_V 0x08 /* ACS Egress Control Vector */ +/* Encodings for DSP and USP Memory Target Access Control */ +enum { + PCI_ACS_MAC_DA = 0x0, /* Direct request access */ + PCI_ACS_MAC_RB = 0x1, /* Request blocking */ + PCI_ACS_MAC_RR = 0x2, /* Request redirect */ + PCI_ACS_MAC_RSVD = 0x3, /* Reserved */ +}; + /* SATA capability */ #define PCI_SATA_REGS 4 /* SATA REGs specifier */ #define PCI_SATA_REGS_MASK 0xF /* location - BAR#/inline */ From patchwork Thu Sep 3 03:46:18 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 2297225 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=hotmail.com header.i=@hotmail.com header.a=rsa-sha256 header.s=selector1 header.b=VfHK0jmp; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2600:3c15:e001:75::12fc:5321; helo=sin.lore.kernel.org; envelope-from=linux-pci+bounces-65266-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sin.lore.kernel.org (sin.lore.kernel.org [IPv6:2600:3c15:e001:75::12fc:5321]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4hb5Zs5THwz1xwZ for ; Thu, 03 Sep 2026 14:04:37 +1000 (AEST) Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sin.lore.kernel.org (Postfix) with ESMTP id AB191372F0 for ; Thu, 3 Sep 2026 03:48:38 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 8679C3890EC; Thu, 3 Sep 2026 03:47:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b="VfHK0jmp" X-Original-To: linux-pci@vger.kernel.org Received: from TYPPR03CU001.outbound.protection.outlook.com (mail-japaneastazolkn19012061.outbound.protection.outlook.com [52.103.43.61]) (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 CCFCA391849; Thu, 3 Sep 2026 03:47:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.103.43.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407229; cv=fail; b=PrqrHhoY/hR9VOQnj0GkvdqdB+MPTrkTAzvfIBh1pTv6Lf0uDgOJTIDQEZQ8mYICaWuBd4WkXDHkPgpMdZtXkpDt7pQmk5pX/Cc9+EVLdisM6ywvm83aZZc4AaGfaU0JReGBk6r0hyc9U8yl5WCdTGlMxAaNzemUjhp80lxdh4U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788407229; c=relaxed/simple; bh=z4l9PiU8l/fGrOfxnAoF0MHQI53d7heccoQYZlHPuy4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ThLZnBs14RItXHNG9g+BI8I1w7LFBrCqcf5SzmpSZUeWqq5Uyudj9fbJ1xhffCI27ZjGWIIlDLfJbkoPQZkEPdE3n7P5Yg6j4few/1QHhWF0GY02gi92TXLATE7Je03fmPItk9BfyQTU3jiXfh4gug4/AnTYYgOp6FMRHYN583Q= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com; spf=pass smtp.mailfrom=hotmail.com; dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com header.b=VfHK0jmp; arc=fail smtp.client-ip=52.103.43.61 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=hotmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=hotmail.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YdVRCObDzF3fdL4qZDj4Ofesswyq8a2rkY/vmg74SnHacFIuF0F47mr3lLb9iHleKZ8EBr2znak4Cj5RtkwRZu8drRRZiWztKfLAMGNc2TLhr+mfG89VJRr1q7kUsIgaV4nibJqOK2+oLfxD8WcgDRlKsGQ9Xec0BJtASIc34I/XvkskLsVWUrasMwkpXoQYLjRpz3HnxWF/Gck+bgUeed2QQmnYDUYooaz4FWAsDH+kWOYLz1GAtl2E8uAIP+JfoLWIuY3Fs4loKZhVx+H0aNj6QV5yTkrNOhKrByN6U2PxSw3HLicV040huoN+C+TqsM+d6MhL30FRQuFRW65pSw== 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=TvbSl6oQHz1dzPOo8tg2jh1DAN22fGuUPEJCGOh9IBQ=; b=oT+GExJXTiOMykZfFlb/d9AcgtJVriAzER/eI0cutvSgyVjFBRbJIwQRiRw5Wihoma2OEDTijQe+luAHf/cfxRE2fqBNpSyuLggqg5otSXM4oZ8GsF1YOekyhyP3DegbHucwlrna27zSM6uDafpO9NE2Hznfc6x5Pr2DpfK6Ke/54P5yTEnlC12TIk2DmH6oClwFkt16O6OkS0QIMNB/zhzbSNq+hUQhDZ/jpWI98Hpkj0Q81t0TPwVWHlA/VsYj5W9WUSbJXA7DdljJwhP8erf/3hViyqpFKlIXfjobEhh8L1Akz6FjDerf3KJYXQ8JNEBITswit7NNjtPwmjEFeQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TvbSl6oQHz1dzPOo8tg2jh1DAN22fGuUPEJCGOh9IBQ=; b=VfHK0jmpox+hOiLlWOXK1t3kRjHvyyOymm60idVflTHg8IXSGOY5tbTKHmoeLnt+q1opwJhfTbTskXTckJGoW8iyQR46MXM2in302HIIppqSiW/Izs3HMAfau2Q4ISV/sRg8CCmw3bkSC6ckfeOKtqJW8orcovNvxad6/fMOe+nD/ABldQS/PoPmUNeXAxTXkHF4XO4DnXw12IsmURke9uuQhQAXFKV4Mi77pPuyNtBtkb5nPKUQXdWOMm2GDlfLLM+66NfFnTTMujpK+4rwypc4rEA+JFNl0pRMMVI0BSwofCMERqmJQvxXbEeixZFip677h5m2daohHD3f3969hg== Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) by SEZPR01MB4278.apcprd01.prod.exchangelabs.com (2603:1096:101:41::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.10; Thu, 3 Sep 2026 03:46:59 +0000 Received: from SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c]) by SI2PR01MB4393.apcprd01.prod.exchangelabs.com ([fe80::c735:fab8:6e3d:6d1c%4]) with mapi id 15.21.0382.007; Thu, 3 Sep 2026 03:46:59 +0000 From: Wei Wang To: bhelgaas@google.com, jgg@nvidia.com, jic23@kernel.org, error27@gmail.com, kwilczynski@kernel.org, rdunlap@infradead.org Cc: akpm@linux-foundation.org, bp@alien8.de, alex@shazbot.org, kevin.tian@intel.com, manivannan.sadhasivam@oss.qualcomm.com, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, wei.w.wang@hotmail.com Subject: [PATCH v9 6/6] PCI: Add the enhanced ACS controls check to pci_acs_flags_enabled() Date: Thu, 3 Sep 2026 11:46:18 +0800 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: X-ClientProxiedBy: SL2P216CA0092.KORP216.PROD.OUTLOOK.COM (2603:1096:101:3::7) To SI2PR01MB4393.apcprd01.prod.exchangelabs.com (2603:1096:4:1b0::7) X-Microsoft-Original-Message-ID: <20260903034618.1100387-7-wei.w.wang@hotmail.com> Precedence: bulk X-Mailing-List: linux-pci@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SI2PR01MB4393:EE_|SEZPR01MB4278:EE_ X-MS-Office365-Filtering-Correlation-Id: 3745ea5c-835e-441b-0e6b-08df096e01d0 X-Microsoft-Antispam: BCL:0;ARA:14566002|12121999013|37011999003|23021999003|15080799012|16051099003|45011099003|41001999006|51005399006|25010399006|19110799012|8060799015|5072599009|2607281247196008|40105399003|3412199025|440099028|1710799026; X-Microsoft-Antispam-Message-Info: GFQA+2ys9DTUdUQuHvd06zJY4Kyq++dEzbUsODY5Oo05/lZ/hel54llNyBCWI5Al0Ia86vG1xca/tAFYXNbMyTmGDmtXWyDhFRVPWFRdiHFLFp9qndbZLS3lpM4EWDNB1+oYcVfOt1lhJ8jt4zVLi+DQqnwGPVv7D/wVj7aE7DeF9WfzkfSAamSpAUmjiTrn3bKtQJD07lrU/cWKSAWLxIBUgvFjwSf6huN0fUBruKDgE1W1kS/LyqW+Ug0l5yKtTTVgLRIVuabPMG4yI7NvS30RAiENd3QhRr1BZlMFQg47B1V+/igLcV6pl0/r89zFrIdPTTXg/AF9ummNjE1n712g5pg+0ACCSTNUd9xvdfDsaXVTj5vCE+B7yj9DnvUmqrKPA1r0P1/vfAv7BPXI8lubbwFHNfOQ3c4CLMc4CVFEcLwyzJTewgH21jkO66BeaF4codAit1ICJbf0hcv8FJQh5LBSXO4e7k8nM11cdY2awfBeMIRI3TCRZXiHnF+qSHqJM8z7nRIjm7Tpmd5IStW0/skHUfC45fQAOgH4CY/nBGKBoQxZBsOOd/54DC+ajPXwO6W3AuCDwyepBy7/H9BnwFKGjzc/uQ6yrh5VVplU+oEINKDn5ywhpVcZkVG1sZaP3cKhoDtoc1b/CW/8ClmuCkW/KHY0JFStBxs+YHWH5fddO1c2SXJ6Zw5hsD/acdemISXo9erczThRS2r2sO3hvAkLSzRRCW3fT5c/3h2JYPb+dkHYUh0b0kkHYftWGF/Q6drn2xpPBFrIQ2aT8B8qxXVXZqatp5ka60EUcVMpVy9tAloP8HqyMkMM+e8Jc/YUeWO/56kZrEMwYpvS9KdjtiMFFeddl6suqLJXb43OD7iAyP4hNt8nlJjonjEESDqAF2PyM/KnqTp6pUdNyS7/19QlaTRzNOkNul+eAdYOuOMlsJkKw7Ed7+cEgipE2miK0zQ1i/Ob6TwwmGgg01ERFLzIqkHheA1xdKhPBEnnvfDY0yx8HxMjrLl3k3+N9gTofaHg7F/hSSG4oDsB033o0PzlQwx4h8yxqm/6t3YiMCH93997JjQ3rZxUjzD6WB3Jc6/PBvddZVuPdcoy7w== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: VdZYmx8j4n/QtfncWGCHowW2wniHTRrKrEznx1qA8CQo8Clj+zjxkIDtI2AaGU4c0xJ71pcqx9Ds6fkRqTK+VB9efALa76BVRwwyi0ZEP6R2PHwZPT0AVUVWAStS8EnclWbSOo7PDs1z80rf3upDr1Vz68bNt6JQEgBhJ3UMlcOsSvR6FUVLYHERkM410moPG2brmuiys9mqFKYy0J0vY5kojHN+Muia7BPpn2a30ksuhqnBqWqYCDgkMQz4s28Mi5nfXaMOmnVfVlW+GOVQAhyRQ5yx7nBXQ0LV1IHwKBb2HYN60tfRVD/cukXvuXERxiNWBV5/5y8N5Y33Hnwz7kLIZqsnfjqWklBY7Qlqy6g4Sp8W3BprHUfsWLPiScCMInbQzvsJTBDqp24XESbwdJMLWk3RP1ajuYSlgxLVMSOWaBmYoHCcccDvhizAttpJ12QSTH1dfYNoU/6YzUwkfOU0KJnxp4EhASRenHOIiijKMpnyNbQANzDdzTvK0TdaQuGTE03N7sl/KPv+pyoVRptXhSmjmn+wDw7JWsuaRC9p1/Y6GMVRVi3e1hGlI4jTtfHjMgirT091nzGL9cOrKyCPt6fm6pk00IJO7RXjVqbp2RbTjkY8JqcW8NrZr6xb2SKTv9xSnp5nqQOe7SmHldjgreLKN46CCwGvaR9ZSkJ7Mh4eMhjg+yxggdRJ2A1EsmYNnyY/c8RgKEsemXob2Xnsh/GmLHfGJ0A7elEoHcs3HgCNkrF2Ve5w7e6xMb6g7nt3PMq+/2Qp77nT4B92cOyzFO/qxXYTVg6v2czAU6POluPbOHuW4jQ35VoQtTIWd8iqi1U1DrOxPsZKJPJcfsOsdXc5Z3Xupe9Y7OmZGNAJ9xVvqBa7Bi8Aa9wFeyhd+QVIj8OlB0WBsyE+mKfDhPoyRnmn3VpqtewR3Mw3T9JyrNlshgKtGRRLcozB4Gx/EgY+Y19xER/Ll43dPfJyi6x+2iphpNGV/Mdfxxy5G4XPNDcabgqG/BiZiVbq0Reix5STDs8h0S0U5a0ATnC8ubw5YAf0SryuEoRv1/k7tc6gZEN6WHdsUhvgYFMZnK9SgxeJgUQf+IMA406yUwkH70zbXDn+RGGvkhET4bh26gYBnb+Qqua+7iRLd6xa84gJPKTP8Qr2Pnm/yts5RLvvMQUduRfgmDkc2hokg+9qnAf161rz5ZzNt2uDlmKTTUX6W+8F9kuxKdB1rxGKD/Rw+tqxQWEEUqHt2v0alZZdFB/aMAHpMGn0hQLkZl4Ww+fdei9M8OjoVnPPYhZhpOlPMooAtuc6wCU19vuOiyEdHxNG5x7uMz/QM9XatlgfT06Jsb3v122SMM4KrO7PbtRnrbKKz5ofYMcf7LEMr/DFxtGVQbp3ATjqY2KIgTEAA6i3 X-OriginatorOrg: sct-15-20-9412-4-msonline-outlook-3e488.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 3745ea5c-835e-441b-0e6b-08df096e01d0 X-MS-Exchange-CrossTenant-AuthSource: SI2PR01MB4393.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Sep 2026 03:46:59.6375 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR01MB4278 The enhanced ACS controls introduced by PCIe Gen 5 ensures better device isolation. On devices that support the PCI_ACS_ECAP capability, the controls are required to be enabled properly: - ACS I/O Request Blocking needs to be enabled to avoid unintended upstream I/O requests. - ACS DSP and USP Memory Target Access Control needs to be set with Request Redirect or Request Blocking to ensure the Downstream and Upstream Port memory resource ranges are not accessed by upstream memory requests. - ACS Unclaimed Request Redirect needs to be enabled to ensure accesses to areas that lies within a Switch's Upstream Port memory apertures but not within any Downstream Port memory apertures get redirected. To maintain compatibility with legacy devices that lack PCI_ACS_ECAP support, pci_acs_enabled() skips checking for the capability. Signed-off-by: Wei Wang Reviewed-by: Jason Gunthorpe --- drivers/pci/pci.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 50a3b61f9898..b951195d5adc 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -3648,6 +3648,57 @@ void pci_configure_ari(struct pci_dev *dev) } } +static bool pci_dev_has_memory_bars(struct pci_dev *pdev) +{ + int i; + + for (i = 0; i <= PCI_ROM_RESOURCE; i++) { + if (pci_resource_flags(pdev, i) & IORESOURCE_MEM) + return true; + } + + return false; +} + +static bool pci_acs_ecap_enabled(struct pci_dev *pdev, u16 ctrl) +{ + struct pci_dev *upstream_pdev; + + /* + * For ACS DSP/USP Memory Target Access Control, either Request + * Redirect or Request Blocking must be enabled to enforce isolation. + * According to PCIe spec 7.0, the DSP Memory Target Access is + * applicable to both Root Ports and Switch Downstream Ports that have + * applicable Memory BAR space to protect. So if the device does not + * have a Memory BAR, it skips the check. + */ + if (pci_dev_has_memory_bars(pdev) && + FIELD_GET(PCI_ACS_DMAC_MASK, ctrl) != PCI_ACS_MAC_RB && + FIELD_GET(PCI_ACS_DMAC_MASK, ctrl) != PCI_ACS_MAC_RR) + return false; + + if (pci_pcie_type(pdev) == PCI_EXP_TYPE_DOWNSTREAM) { + upstream_pdev = pci_upstream_bridge(pdev); + + /* + * The USP Memory Target Access is only applicable to + * downstream ports that have applicable Memory BAR space in + * the Switch Upstream Port to protect. + */ + if (upstream_pdev && pci_dev_has_memory_bars(upstream_pdev) && + FIELD_GET(PCI_ACS_UMAC_MASK, ctrl) != PCI_ACS_MAC_RB && + FIELD_GET(PCI_ACS_UMAC_MASK, ctrl) != PCI_ACS_MAC_RR) + return false; + + /* PCI_ACS_URRC is applicable to Downstream Ports only. */ + if (!(ctrl & PCI_ACS_URRC)) + return false; + } + + /* PCI_ACS_IB is applicable to both Root and Downstream Ports. */ + return !!(ctrl & PCI_ACS_IB); +} + static bool pci_acs_flags_enabled(struct pci_dev *pdev, u16 acs_flags) { int pos; @@ -3665,6 +3716,18 @@ static bool pci_acs_flags_enabled(struct pci_dev *pdev, u16 acs_flags) acs_flags &= (pdev->acs_capabilities | PCI_ACS_EC); pci_read_config_word(pdev, pos + PCI_ACS_CTRL, &ctrl); + + if (acs_flags & PCI_ACS_ECAP) { + if (!pci_acs_ecap_enabled(pdev, ctrl)) + return false; + /* + * The check for the required controls in PCI_ACS_ECAP has + * passed. Clear the ECAP flag and continue to check the + * basic ACS controls. + */ + acs_flags &= ~PCI_ACS_ECAP; + } + return (ctrl & acs_flags) == acs_flags; } @@ -3723,6 +3786,8 @@ bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags) */ case PCI_EXP_TYPE_DOWNSTREAM: case PCI_EXP_TYPE_ROOT_PORT: + /* PCI_ACS_ECAP applies to Root and Downstream Ports only */ + acs_flags |= PCI_ACS_ECAP; return pci_acs_flags_enabled(pdev, acs_flags); /* * PCIe 3.0, 6.12.1.2 specifies ACS capabilities that should be