Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.0/patches/2196679/?format=api
{ "id": 2196679, "url": "http://patchwork.ozlabs.org/api/1.0/patches/2196679/?format=api", "project": { "id": 28, "url": "http://patchwork.ozlabs.org/api/1.0/projects/28/?format=api", "name": "Linux PCI development", "link_name": "linux-pci", "list_id": "linux-pci.vger.kernel.org", "list_email": "linux-pci@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null }, "msgid": "<SI2PR01MB43934E720AED2013EF55B423DC6CA@SI2PR01MB4393.apcprd01.prod.exchangelabs.com>", "date": "2026-02-16T02:26:40", "name": "[v5,4/6] PCI: Refactor disable_acs_redir and config_acs param handling", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "5675e5f95cadf21c75af466cd8db5ba3e847ae9d", "submitter": { "id": 92382, "url": "http://patchwork.ozlabs.org/api/1.0/people/92382/?format=api", "name": "Wei Wang", "email": "wei.w.wang@hotmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/SI2PR01MB43934E720AED2013EF55B423DC6CA@SI2PR01MB4393.apcprd01.prod.exchangelabs.com/mbox/", "series": [ { "id": 492242, "url": "http://patchwork.ozlabs.org/api/1.0/series/492242/?format=api", "date": "2026-02-16T02:26:36", "name": "PCI: Add support for ACS Enhanced Capability", "version": 5, "mbox": "http://patchwork.ozlabs.org/series/492242/mbox/" } ], "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2196679/checks/", "tags": {}, "headers": { "Return-Path": "\n <linux-pci+bounces-47327-incoming=patchwork.ozlabs.org@vger.kernel.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linux-pci@vger.kernel.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=hotmail.com header.i=@hotmail.com header.a=rsa-sha256\n header.s=selector1 header.b=Q/EWBt+Y;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-47327-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com\n header.b=\"Q/EWBt+Y\"", "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.103.66.62", "smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=hotmail.com", "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=hotmail.com" ], "Received": [ "from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fDmsy6029z1xtN\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 16 Feb 2026 13:28:38 +1100 (AEDT)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 8965630263DA\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 16 Feb 2026 02:27:41 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id A51E52D0602;\n\tMon, 16 Feb 2026 02:27:27 +0000 (UTC)", "from OS8PR02CU002.outbound.protection.outlook.com\n (mail-japanwestazolkn19012062.outbound.protection.outlook.com [52.103.66.62])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C9762BE031;\n\tMon, 16 Feb 2026 02:27:25 +0000 (UTC)", "from SI2PR01MB4393.apcprd01.prod.exchangelabs.com\n (2603:1096:4:1b0::7) by SEYPR01MB5340.apcprd01.prod.exchangelabs.com\n (2603:1096:101:d2::14) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.16; Mon, 16 Feb\n 2026 02:27:21 +0000", "from SI2PR01MB4393.apcprd01.prod.exchangelabs.com\n ([fe80::c735:fab8:6e3d:6d1c]) by SI2PR01MB4393.apcprd01.prod.exchangelabs.com\n ([fe80::c735:fab8:6e3d:6d1c%4]) with mapi id 15.20.9611.012; Mon, 16 Feb 2026\n 02:27:21 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771208847; cv=fail;\n b=cAOAPnzic4GfYYYBSC+PbK5wsx8Y7bpUD3nK+xv74aKZtLCHaB1wzdKlpHV1B5IyCphSYv6xHU6KTgoDSocVPU9s9Y5lLrTCtcHC+3HfMehY5bZzybiyqCMJ+X5zsleBmBrlK7aYfvygxEeMnN0UQw+gWRECWWShgptXv8TEOT4=", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=Em5dxMdJwwVu/ZKAr1IWmXyH8okN52GGH/dPk+0MB//OAXnGUwM0JrnzHELqrJ8tLKAHkRufUegCTG6yMv9QFYZ/h0woOSf9XU36ELBePmff2wm00NHhZiCc9f4eY/WL7FgJfkqqX8G06U7CcOOhFoHkckJcvi4rHppBwJ6uatFhIt4xvDMMjZK/KhA4tSURmLvb0q1YZA15KWJnGElVJkwN9R0n1nf8UzHQXSl6JU4hWKlNvZVi8IsGKbGp+n1HFHKzBjVpCChPz46txSAm0+tHLBk2vgBKsZSbKDFqVt1MUyyiCMyOF7mGqnd25SxCA4KnjC+WrOKcxe0vCG2U5Q==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771208847; c=relaxed/simple;\n\tbh=t/1H7w8Z7pw99PEf+rK39GtO5uNurvp6jvbx1TodJV0=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=kBN8Ux5nb57I5e4DoCGUDdU4HLD82kJs8mNRmbLkcVRX9fedIS15xOi/Ex1aa3j3jvAXhegAO9flRuOIxD8zSaO3NVQJQJnggW9L24ILUv8EDVVVPAdTfXrFFzVr6UL4sX3ImkR9bajk5DRbqbhxUZ3NGu1BY5ttn2kSUMPpRZk=", "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=RQgQDje11x4CY1m8FzCEvKIFyyYvnuH1+VQ9TXCRuT8=;\n b=K7i1wcMUBQ+IJLUB/j3WQOfh4QyMq0wlLd8DDA17F5J7VmUJrG2xYYidHoXCMPtcmDcSIKVarEzrTKm0YJkT1X2D3+TaDWDiu65moBPPbMsU+qoWGqDNRlfIFDOnWe/JlM+2fiBXizhSW68yKvEm7qv76w8HmJ8cIQlzGFsgo1tnbrwyT8ofhoctmFfASl23sssFEgqrAMYvPIqT6qTNKjxjNKqAihMH3p+fqklhZnfoKmbhFzwrxiN3RdamljzwOlRW4tTs9JEUKLcuLchfDGNhHLfFAafcyLIol4TWZMqBmFi7rI2Mn9WdpDt8tHBNw9AJ4BzBr0S6JhuHVhRaDw==" ], "ARC-Authentication-Results": [ "i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=hotmail.com;\n spf=pass smtp.mailfrom=hotmail.com;\n dkim=pass (2048-bit key) header.d=hotmail.com header.i=@hotmail.com\n header.b=Q/EWBt+Y; arc=fail smtp.client-ip=52.103.66.62", "i=1; mx.microsoft.com 1; spf=none; dmarc=none;\n dkim=none; arc=none" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=hotmail.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=RQgQDje11x4CY1m8FzCEvKIFyyYvnuH1+VQ9TXCRuT8=;\n b=Q/EWBt+YUsXcy71lPIRApppvtvPqmFajqad54WEBG+EU5IqNJvRdz5RbNYZLIrjyyDvtSwsW/UlISeE+Wk3oXc2zUH22fiGAbmDuijHwJsnDKUgZvAQncH4V2jJXBm4m3BFNLQZBZal33fROlJ7JgekxQ6Z/y48ykXytelrZmfBrCqKGWaMkvaOT4ZDiVIUjvp6qD1cNhTsAgdnyB+5S490OICa5voCuREBIOIi9uvkBWaFH5/ay+mp2TDn3hJCsGy0adyg8mmZ3pvKXzGR/QSTrmY+bWu7ZvwL4DuohbI1XbKnjLjCUiLtGPiL+BrgcXH2Aj364UT8cN0iqn4EECw==", "From": "Wei Wang <wei.w.wang@hotmail.com>", "To": "bhelgaas@google.com,\n\tjgg@nvidia.com,\n\tjonathan.cameron@huawei.com,\n\takpm@linux-foundation.org,\n\tbp@alien8.de,\n\trdunlap@infradead.org,\n\talex@shazbot.org,\n\tkevin.tian@intel.com", "Cc": "linux-kernel@vger.kernel.org,\n\tlinux-pci@vger.kernel.org,\n\twei.w.wang@hotmail.com", "Subject": "[PATCH v5 4/6] PCI: Refactor disable_acs_redir and config_acs param\n handling", "Date": "Mon, 16 Feb 2026 10:26:40 +0800", "Message-ID": "\n <SI2PR01MB43934E720AED2013EF55B423DC6CA@SI2PR01MB4393.apcprd01.prod.exchangelabs.com>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "\n <SI2PR01MB439326AF08A79D1C5661C29BDC6CA@SI2PR01MB4393.apcprd01.prod.exchangelabs.com>", "References": "\n <SI2PR01MB439326AF08A79D1C5661C29BDC6CA@SI2PR01MB4393.apcprd01.prod.exchangelabs.com>", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "X-ClientProxiedBy": "TY4P301CA0029.JPNP301.PROD.OUTLOOK.COM\n (2603:1096:405:2be::12) To SI2PR01MB4393.apcprd01.prod.exchangelabs.com\n (2603:1096:4:1b0::7)", "X-Microsoft-Original-Message-ID": "\n <20260216022642.112923-5-wei.w.wang@hotmail.com>", "Precedence": "bulk", "X-Mailing-List": "linux-pci@vger.kernel.org", "List-Id": "<linux-pci.vger.kernel.org>", "List-Subscribe": "<mailto:linux-pci+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:linux-pci+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "X-MS-Exchange-MessageSentRepresentingType": "1", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "SI2PR01MB4393:EE_|SEYPR01MB5340:EE_", "X-MS-Office365-Filtering-Correlation-Id": "94614ee3-64e4-446e-c5cd-08de6d02e9e3", "X-Microsoft-Antispam": "\n\tBCL:0;ARA:14566002|51005399006|6090799003|5072599009|461199028|41001999006|8060799015|19110799012|37102599003|15080799012|23021999003|12121999013|3412199025|440099028|40105399003|1710799026;", "X-Microsoft-Antispam-Message-Info": "=?utf-8?q?lwsvNgb+mNF2NUVONyLLaJChdOKa7f4?=\n\t=?utf-8?q?aS+v22M8CSvo43luDsTgtqfGUFQVsR8GQU8+/8E1mGCElg7aWDpOLOvG8BRLMtEho?=\n\t=?utf-8?q?xanGBmKHntYvV1O3r+15ZAxCIN6RDVtOA4GcODqwnnjABOrkkQJsW/TyQmpanJgY1?=\n\t=?utf-8?q?p5sMThwwA6mxSx5DNuNIaHXg8emUEKHKdae6rE5Ri5W9RTfDllSM+Em5fQUFoi6Cb?=\n\t=?utf-8?q?2X5YSDMi0hH9LzkmR0b7+w3jaJFGWjTIk8MR6ZUJZ2iuQUOXhDQRYSWGd6GgQWhKw?=\n\t=?utf-8?q?Kxo4eiQu+AilPYPZ2YjpaZRQhmXU/JkQDVzgvPY0XvApxXiLBrCRhtpLn+3HkYMzv?=\n\t=?utf-8?q?Ib7tI36ckggQqLcsrGFActIYtlr6V5iPUBR2MUs5Sm0k6uiGWc2RCeO/T9io1pK+Q?=\n\t=?utf-8?q?QCrdCkpKi4jFkKgEEcccpGdPSv1zOFOlkY6CHMvwhwthd/V3eRrs1Qt2/LwAH0P+E?=\n\t=?utf-8?q?rDWJUgvAzJ+3D9MIgjSUqTb3FVNUSL38qz81OvuVf9lXCLCBSPNsFxnvMtlipJN9I?=\n\t=?utf-8?q?tdXp6DB6oqOmL1A44OYxkjhjyEcJuCmGiUHEYTbR7AZYP+4NBJ/VgAk4tQ6xur18e?=\n\t=?utf-8?q?LewT1puJFANm+HhxY82/u9LTulrFP50YfzJN/akRPptaPEjkCbd2my9lFsnmWh5rr?=\n\t=?utf-8?q?fmCOwgObje4wFmTTrqsA12zkk6exAFgKrRw5AYA2xEoPygb3LKGR51Ef+1ZciLCWr?=\n\t=?utf-8?q?Asj5s16YBvp+YsEk0UhsSTbmRG86BdldneCrRuSbjY5hzvwMuTtIlSJSie5mT8Tz8?=\n\t=?utf-8?q?ofMzLOqRj4L/8N/ma+1sDPkruKkhfJNjFdnULDFYS7pUUyvE5tLdzgZp4poQ9yLwy?=\n\t=?utf-8?q?cvKamgx+PSYFwRnXfpKv+2EdqwnQ+34/+sHjPFipUAsnS5F24ZkTyN9HCwPvUOeXn?=\n\t=?utf-8?q?3QfMkoj/gaYSyOQMd4aYsNJMU2tUNhwn+oA8mpUOOl9YnlBmJvb0VN9iWZBFAJb4N?=\n\t=?utf-8?q?N9mJdXgqOAfW28TF9jsaHvOpbcSIuz8XvlU1Q/+xX0Ge2p9mFoMpPOwBN6Qjgmn9Z?=\n\t=?utf-8?q?PKM8G0XQCX4rpux+fz1fA1nk/mYWEkw7liAvejjprsn8mcBrgGW55mjRLo8UZ5+9U?=\n\t=?utf-8?q?OiATFZ9c1c9G1PS26oZYz9cfLiWBRwUI7zZ9vxii582STRY/yXMR3z62maT4TM6/t?=\n\t=?utf-8?q?qLnwvOjKCXK0EnZsAsXsBgmilkTjJTCmGg3vtJATG7fqZJQCkOI6uVr9mlCbhirNk?=\n\t=?utf-8?q?9ix7kwFZNh+tFLi7CDstHAajNk1MVclh+eVb3H0WS3Rv7Lznw4a8yrR979OrD4zTK?=\n\t=?utf-8?q?UWU3v993ducLdBXjNAwscnHz18Sk120qrqg=3D=3D?=", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?CQgyTMbMEDinq1AZOmeBb6tNGRuB?=\n\t=?utf-8?q?ROh7jqkvymnzl29k5uR+5nh4INX4p/XkmPi2i5T9qlVoZ/xRAc9BVS7HsRf5eRYgi?=\n\t=?utf-8?q?1bJV08WtzZgyuyo1f7vDrCKOPAsxk6FfasrJQZZR1Fh5xopL8Ih1LX2IKjRlj75p3?=\n\t=?utf-8?q?dp7ZhmDhDtRm1SUL16rxc7uhtjKQdWPAB+4dKk0Jbz9NoqGhqTWNIwU51j8AA5Zhh?=\n\t=?utf-8?q?x46woEvbk+O5Z00Sq9b2ZXVtgGHSwXC+EKvPc7wEsb4pEfwUJcJQ9k8Hwx3QLbM5K?=\n\t=?utf-8?q?fwYgZbRJC+8cItE3MyfHFUanvqsyavCnGsLajKpikALNkwFmjRvLRQ+WdPdZs3TNI?=\n\t=?utf-8?q?ns9wJmT9Q2WS5Lb3y8a8K6Ygb+B01zLDn0EQUicLn9CWy5lWJU/QnFZ0IKSdL3mAB?=\n\t=?utf-8?q?Cj0nsA4FMeY5bYWGGKd76O5+bLvqK5uCziNbU90w59/fs8GGPRLA2sadJU15ReQfE?=\n\t=?utf-8?q?2BEbfBJ3KWEhyXu9iM0/BN3D3tC5mQbVpu8dqAnxPubE+fWgoRMxWjWNxqliIlX5j?=\n\t=?utf-8?q?G0fBflKlsRKKNzPZdC/bBdbkm9Tz/oEf9MWW2FDWKJD5awVR3nFMhXFAPbfv1X0s3?=\n\t=?utf-8?q?fNbeXEYeoal1vjKTXFalob2knrAh88U0/hxAHaybrPi2rYPEyeY3O8lwMBoRvoiWV?=\n\t=?utf-8?q?gmlh2TpyGxde4bl8URMfXRlPY3znnA+YXJVFpM8tjMQG0COHMlm6IiDpXmSw+EOp5?=\n\t=?utf-8?q?TRWRlHKlsj3GwFjtNN2GHK2uREe6heexNHoI9iWrFaZScN3pGEDnxrXUuojTQL1zi?=\n\t=?utf-8?q?+60pljxG9TbXDeoj0GuxropLOU45aWgvqGyT5VTI/MYZv1G3hlz0up7+iN7qMsXM3?=\n\t=?utf-8?q?gNO1q7hzgwPSiL5NKXmRBRc+hF+1dB1Z44ouwQVgKnsv6j2muFtG44/PLsqrbsWPo?=\n\t=?utf-8?q?lnHoL4ezg5PUjQCE9yOebo10qPZyLMRXFiaoId8qFL5FN8x28uOJMzBkdFpzzHGko?=\n\t=?utf-8?q?PZ2kDxkQcn1qqhjba0dB5HpVztQ8a+Ps5NerE1iy3VEafPRhQNQbM9HPWt4sOUc/6?=\n\t=?utf-8?q?wPjdv+ckBjLcAPm5Nu3WePUS1hhmfv/oHUW4yEM1y59lxhONqckmKFYJIDs8Z0g/b?=\n\t=?utf-8?q?98i6CuVeelp6cT9KhnQiD3Ol4x6OCwFOenaUWrgGC6/mG9qFaX9QzqKC30BSFrsDy?=\n\t=?utf-8?q?/XmiTpkkZDIeXuhJwt2bvjN+O5Y6yIC2RRzuujxw18YFdQ5pd/CFa3aoTdaoJxAXa?=\n\t=?utf-8?q?DLia29RNCRJAhzdk7xuSbcnr7Ie5vgCLQXW2raqbMoxYmTC+jrvqr9GpF7qwOAhz8?=\n\t=?utf-8?q?OajR36xr7ZUaFjyZuT9snSmCzuklRcmwKc5k2Gz1XqbSC1OdbndnoTDstuDtS50fG?=\n\t=?utf-8?q?9qfdKY2/NHNZCJy?=", "X-OriginatorOrg": "sct-15-20-9412-4-msonline-outlook-5f51e.templateTenant", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 94614ee3-64e4-446e-c5cd-08de6d02e9e3", "X-MS-Exchange-CrossTenant-AuthSource": "\n SI2PR01MB4393.apcprd01.prod.exchangelabs.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "16 Feb 2026 02:27:21.8268\n (UTC)", "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted", "X-MS-Exchange-CrossTenant-Id": "84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa", "X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg": "\n\t00000000-0000-0000-0000-000000000000", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SEYPR01MB5340" }, "content": "The current implementation mixes disable_acs_redir and config_acs param\nprocessing inside __pci_config_acs(), using acs_mask==0 as an implicit\nsignal to switch into config_acs_param mode. The intertwined logic is\nhard to follow and easy to break:\n\n - The acs_mask==0 special case is non-obvious and obscures which code\n paths apply to which parameter.\n - The interleaved logic is fragile; changes intended for one parameter\n can unintentionally affect the other. For example,\n pci_dev_specific_disable_acs_redir() is invoked on the common path\n even though it should apply only to disable_acs_redir.\n\nSplit the two behaviors into dedicated functions,\npci_param_disable_acs_redir() and pci_param_config_acs(), making the\ncontrol flow explicit and easier to maintain.\n\nThe new pci_param_config_acs() implementation also improves on the\noriginal logic:\n\n - It searches for the matching device first and parses ACS flags only\n for the matched device, avoiding unnecessary work.\n - A switch statement replaces multiple if/else blocks, improving\n readability.\n - Bounds checking (max_shift) prevents overrunning the device’s ACS\n capability bits.\n - Variable names (enabled_bits, disabled_bits) more clearly express\n their roles compared to the previous mask/flags pair.\n - Error messages are simplified to reduce dmesg noise.\n\nThis refactor separates concerns, improves robustness, and makes future\nextensions to ACS parameter handling safer and easier to review.\n\nSigned-off-by: Wei Wang <wei.w.wang@hotmail.com>\n---\n drivers/pci/pci.c | 168 +++++++++++++++++++++++++++-------------------\n 1 file changed, 98 insertions(+), 70 deletions(-)", "diff": "diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c\nindex 0f0b384e782f..4b32fbbcacb6 100644\n--- a/drivers/pci/pci.c\n+++ b/drivers/pci/pci.c\n@@ -907,87 +907,117 @@ struct pci_acs {\n \tu16 fw_ctrl;\n };\n \n-static void __pci_config_acs(struct pci_dev *dev, struct pci_acs *caps,\n-\t\t\t const char *p, const u16 acs_mask, const u16 acs_flags)\n+static bool pci_dev_match_disable_acs_redir(struct pci_dev *dev, const char *p)\n {\n-\tu16 flags = acs_flags;\n-\tu16 mask = acs_mask;\n-\tchar *delimit;\n \tint ret = 0;\n \n-\tif (!p)\n-\t\treturn;\n-\n \twhile (*p) {\n-\t\tif (!acs_mask) {\n-\t\t\t/* Check for ACS flags */\n-\t\t\tdelimit = strstr(p, \"@\");\n-\t\t\tif (delimit) {\n-\t\t\t\tint end;\n-\t\t\t\tu32 shift = 0;\n-\n-\t\t\t\tend = delimit - p - 1;\n-\t\t\t\tmask = 0;\n-\t\t\t\tflags = 0;\n-\n-\t\t\t\twhile (end > -1) {\n-\t\t\t\t\tif (*(p + end) == '0') {\n-\t\t\t\t\t\tmask |= 1 << shift;\n-\t\t\t\t\t\tshift++;\n-\t\t\t\t\t\tend--;\n-\t\t\t\t\t} else if (*(p + end) == '1') {\n-\t\t\t\t\t\tmask |= 1 << shift;\n-\t\t\t\t\t\tflags |= 1 << shift;\n-\t\t\t\t\t\tshift++;\n-\t\t\t\t\t\tend--;\n-\t\t\t\t\t} else if ((*(p + end) == 'x') || (*(p + end) == 'X')) {\n-\t\t\t\t\t\tshift++;\n-\t\t\t\t\t\tend--;\n-\t\t\t\t\t} else {\n-\t\t\t\t\t\tpci_err(dev, \"Invalid ACS flags... Ignoring\\n\");\n-\t\t\t\t\t\treturn;\n-\t\t\t\t\t}\n-\t\t\t\t}\n-\t\t\t\tp = delimit + 1;\n-\t\t\t} else {\n-\t\t\t\tpci_err(dev, \"ACS Flags missing\\n\");\n-\t\t\t\treturn;\n-\t\t\t}\n-\t\t}\n-\n \t\tret = pci_dev_str_match(dev, p, &p);\n-\t\tif (ret < 0) {\n+\t\tif (ret == 1)\n+\t\t\treturn true;\n+\t\telse if (ret < 0)\n \t\t\tbreak;\n-\t\t} else if (ret == 1) {\n-\t\t\t/* Found a match */\n-\t\t\tbreak;\n-\t\t}\n \t}\n \n-\tif (ret != 1)\n+\treturn false;\n+}\n+\n+static void pci_param_disable_acs_redir(struct pci_dev *dev,\n+\t\t\t\t\tstruct pci_acs *caps)\n+{\n+\tu16 acs_redir_mask = PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC;\n+\n+\tif (!disable_acs_redir_param ||\n+\t !pci_dev_match_disable_acs_redir(dev, disable_acs_redir_param) ||\n+\t !pci_dev_specific_disable_acs_redir(dev))\n \t\treturn;\n \n-\tif (!pci_dev_specific_disable_acs_redir(dev))\n-\t\treturn;\n+\tcaps->ctrl = caps->fw_ctrl & ~acs_redir_mask;\n+}\n \n-\tif (flags & ~dev->acs_capabilities) {\n-\t\tpci_err(dev, \"Invalid ACS enable flags specified: %#06x\\n\",\n-\t\t\t(u16)(flags & ~dev->acs_capabilities));\n-\t\treturn;\n-\t}\n-\n-\tpci_dbg(dev, \"ACS mask = %#06x\\n\", mask);\n-\tpci_dbg(dev, \"ACS flags = %#06x\\n\", flags);\n-\tpci_dbg(dev, \"ACS control = %#06x\\n\", caps->ctrl);\n-\tpci_dbg(dev, \"ACS fw_ctrl = %#06x\\n\", caps->fw_ctrl);\n+static const char *pci_dev_match_config_acs(struct pci_dev *dev, const char *p)\n+{\n+\tconst char *seg;\n+\tint ret;\n \n \t/*\n-\t * For mask bits that are 0, copy them from the firmware setting\n-\t * and apply flags for all the mask bits that are 1.\n+\t * Example: 11101010x@0000:01:00.0;101x@0000:02:00.0;1@0000:03:00.0\n+\t * Three segments delimited via ';'. @seg always points to the start\n+\t * of a segment and p advances to the start of the device id (BDF)\n+\t * after '@'. Upon match, return the start of the matching segment.\n \t */\n-\tcaps->ctrl = (caps->fw_ctrl & ~mask) | (flags & mask);\n+\twhile (*p) {\n+\t\tseg = p;\n+\t\tp = strchr(seg, '@');\n+\t\t/* If malformed string, stop parsing. */\n+\t\tif (!p || p == seg)\n+\t\t\tbreak;\n \n-\tpci_info(dev, \"Configured ACS to %#06x\\n\", caps->ctrl);\n+\t\tp++;\n+\t\t/* pci_dev_str_match() updates p to the next segment. */\n+\t\tret = pci_dev_str_match(dev, p, &p);\n+\t\tif (ret == 1)\n+\t\t\treturn seg;\n+\t\telse if (ret < 0)\n+\t\t\tbreak;\n+\t}\n+\n+\treturn NULL;\n+}\n+\n+static void pci_param_config_acs(struct pci_dev *dev, struct pci_acs *caps)\n+{\n+\tu16 shift = 0, max_shift = fls(dev->acs_capabilities) - 1;\n+\tu16 enabled_bits = 0, disabled_bits = 0;\n+\tconst char *p, *seg;\n+\n+\tif (!config_acs_param)\n+\t\treturn;\n+\n+\tseg = pci_dev_match_config_acs(dev, config_acs_param);\n+\tif (!seg)\n+\t\treturn;\n+\n+\tp = strchr(seg, '@');\n+\t/* Parse bitstring backwards from '@' */\n+\twhile (p > seg) {\n+\t\tif (shift > max_shift) {\n+\t\t\tpci_err(dev, \"ACS flag bit %d exceed range %d\\n\",\n+\t\t\t\tshift, max_shift);\n+\t\t\treturn;\n+\t\t}\n+\n+\t\tswitch (*--p) {\n+\t\tcase '1':\n+\t\t\tenabled_bits |= BIT(shift);\n+\t\t\tbreak;\n+\t\tcase '0':\n+\t\t\tdisabled_bits |= BIT(shift);\n+\t\t\tbreak;\n+\t\tcase 'x':\n+\t\tcase 'X':\n+\t\t\t/* Skip this bit */\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tpci_err(dev, \"Invalid ACS flag character '%c'\\n\", *p);\n+\t\t\treturn;\n+\t\t}\n+\t\tshift++;\n+\t}\n+\n+\tif (enabled_bits & ~dev->acs_capabilities) {\n+\t\tpci_err(dev, \"Invalid ACS enable flags specified: %#06x\\n\",\n+\t\t\t(u16)(enabled_bits & ~dev->acs_capabilities));\n+\t\treturn;\n+\t}\n+\n+\tpci_dbg(dev, \"ACS enabled: %#06x, disabled: %#06x\\n\",\n+\t\tenabled_bits, disabled_bits);\n+\n+\tcaps->ctrl = (caps->fw_ctrl | enabled_bits) & ~disabled_bits;\n+\n+\tpci_info(dev, \"Configured ACS to %#06x (FW default: %#06x)\\n\",\n+\t\t caps->ctrl, caps->fw_ctrl);\n }\n \n /**\n@@ -1044,10 +1074,8 @@ void pci_enable_acs(struct pci_dev *dev)\n \t * Always apply caps from the command line, even if there is no iommu.\n \t * Trust that the admin has a reason to change the ACS settings.\n \t */\n-\t__pci_config_acs(dev, &caps, disable_acs_redir_param,\n-\t\t\t PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC,\n-\t\t\t ~(PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC));\n-\t__pci_config_acs(dev, &caps, config_acs_param, 0, 0);\n+\tpci_param_disable_acs_redir(dev, &caps);\n+\tpci_param_config_acs(dev, &caps);\n \n \tpci_write_config_word(dev, pos + PCI_ACS_CTRL, caps.ctrl);\n }\n", "prefixes": [ "v5", "4/6" ] }