From nobody Tue Sep 29 05:34:23 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011013.outbound.protection.outlook.com [40.107.208.13]) (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 93DF92989B5; Wed, 12 Aug 2026 04:53:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510414; cv=fail; b=XhGNPK/Qyddm0dVqKOTfg38HtNbxlVIq6DdT/QXLXy5+IPH6O2NgFDEY+jBCUOckhj0NNzfjEIxaUJr+vnXlfGVle3Y4yVKWjCwfPoRoP9lZpNXQZwyu5dejkClg6+7+8lsvnb6skTL5Sjzel5DzTZ4f7TQJnA/eZSK2rSt13UE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510414; c=relaxed/simple; bh=TsdEwwLRnetNXrxxHLjV6oxe91UZ3BdtVQ1muxrxUWM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=BYo7xII+igb3QUHassPxqodQm9in4UUlC2kPltdb77P4iexLdHS1rCExhgJxs8VWirbnSw/iyA1HMUVCjOBUhP3B1F0ZWYIBBDlWrYO5VSvTw3CxbtwLd1rOH0NC3LwJQ8QNpPFMUyAjvI813/p7faWlREEUyQLj/44vp1/2a4s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=hqnSlZ8F; arc=fail smtp.client-ip=40.107.208.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="hqnSlZ8F" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=o2OZLamUecQ6Q1L77OUe5y0MSlIrVX7+ol7ft8mm6IYKNlsO6sP1VHpaVY1eorh5fQr3Q1iIuxe4UevyiSarFwYZQyyAeiflfSb17UYOK+O7X1WM58bwUnu8btyv9y+oVJuD70MnfzQJ8xJMTau7RgPjs8yKrK1XnvXyV3clnJcXMUciQS6fD0DuvbcRlhhQWZZQ7h+ZdrUneyQu27s2xPYCerY9D4UqnlK6jSR5CVbY9dlyx4AtyTiR0MepSdartck11b7TMlB8geRnqlGeP9NH8E0JVKIeyJPgS2H+F1Nb9+IfXhC/sNkuihHxKx8ltDcHA27BqQ4E5SVv4PXRmw== 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=rj1PXGHttc9LiMPCujzdPnnftpQ2KDBKQFntTeZtVN4=; b=tlGFCkH3T2wWB+2/w0e0k20dQ0q23eUUcZgqxsLp2P9N9FkpKBZu64QHERg564zq+Rg+QYYpuWlhi0H4GDPvTu7d78xKBWdeYSnv9OPcGAhKrp9h+fUlu0M9gVO5A18gsw+CDPV4FS6InMWxPodRdjQUumkKtknkopVFXmcKqInex7ro5cN0/HYBocN6dV+V5SpbWHP3WBsX6udRI20d984Els7EpSvbzbVO/rjGIEu+msY7n28WkqL/MwGOFLTwsu7p62i0PrQNCphuDQ1FTXaliRaS8jLNdntVIwcb06eBdl+diSup3a1X4yHvBASLewKdVgCSbyDfD1UkHGx8jQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rj1PXGHttc9LiMPCujzdPnnftpQ2KDBKQFntTeZtVN4=; b=hqnSlZ8FdX8sA/jcBzYnQzbQxWVVHOprQjLioyb3XaI6nOSyis9epBc9edRbdNI7FZESitE/00t94Pm2YwXIPwE4oP7gEPEQi97tDcePm4vN42YUX1Z/+g89Aocg9Y+ZrO7hdSENC2DcJ/IBDyRzJq1REkGcTwTlj5kvxMXNWD3IVz16gFtEoQdhDLqgqwo26rJbshiiFoQGMn2a3Af/XfQTtIty1sSnyX9y+P8OlAnsPAe1BSXrOTL8xqDwuqSLVIlsqcV2As/VyxUPQcgSbowQTQwZUu2lfpCZQ+XukEvN9TCzL15u0oH0qdy2J43DadFOBex7iKE3HwLLIIRf5A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) by DS4PR12MB9748.namprd12.prod.outlook.com (2603:10b6:8:29e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.12; Wed, 12 Aug 2026 04:53:28 +0000 Received: from LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15]) by LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15%6]) with mapi id 15.21.0315.011; Wed, 12 Aug 2026 04:53:28 +0000 From: Alex Williamson To: kvm , Alex Williamson Cc: Alex Williamson , skhawaja@google.com, Jason Gunthorpe , Bjorn Helgaas , Kevin Tian , linux-kernel , linux-pci Subject: [RFC PATCH 1/5] PCI: Refuse function reset of an SR-IOV PF with enabled VFs Date: Tue, 11 Aug 2026 22:53:19 -0600 Message-ID: <20260812045325.2733631-2-alex.williamson@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812045325.2733631-1-alex.williamson@nvidia.com> References: <20260812045325.2733631-1-alex.williamson@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA1P222CA0078.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:2c1::25) To LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR12MB9411:EE_|DS4PR12MB9748:EE_ X-MS-Office365-Filtering-Correlation-Id: 1e026254-9c41-4d78-1008-08def82da678 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|6133799003|10067099003|56012099006|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: n3kkMsvsvLZJEn8g3WpT+sPwxdmGYt+k+iJLw5Yvd8KUz1yU3LpdOFMTH97EKyK49TORgs9siF33lNioL9YNgQz1FBTQl/BCQMyjLc97TrcooVJZUhFUOeZktwsquG0pmup+9sn3P4ylLLMRIWaHKhzOCZhXADCye08wAWOlHE500yG8iNOLpHEWTkoq3cicOdMEA/bI4qWObPJlVWBjFsGL4KdA7mRAd9nBG5qVO/k48uPKpZhfQwgYtNdnH2vjTnT8K0RRG642kP3tBAJSE+WfqGFKMl9R9zoKrNAxTE0ZIHDMIBS9Xjj20AcEq1+IOQCtCRDBFomIhBB0Ux+W3OSGafmzQtgjPmBXVDtHb3R6RbYdXzswl2afdvWITDCIFnGf5cP4FoSarOYP5xSuQK9jz2BMZa1Z5xyCXNlJkLxbaZfNQ4ytuvLDk+AS8XmFXH8zVuFOxt8VqaYphjGPgCwYHf7rtQsiphj6TFTPFH+gaR1aoQ1b7RYB94ggKBf3mY/e5Dkm4TLCmItWzCKifuzHJ6i/HWRAoAyI5IU3J3qbM4jNRaC1p6lGfgIvE4Qsq6BiihTGbfTYw04dA6H08gHJ0OvWYioB05xDzywc451pIKrX7LvMknosgJrYIc/towz5gxqmlCAUeJcOvscQNpnQ7G3l+yD8hXxGSLWoBYc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR12MB9411.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(6133799003)(10067099003)(56012099006)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?uAv2dh+8cIjlBFqF/sba6a1a57aSGNMBB9Gt1BnrOobUoWDE8HddEuXyYDSf?= =?us-ascii?Q?Fq2niFh89lKZXhY8xQ6BOBgjEQIh/gk+7j5GBcrj9KEavZ/JKRYpCmJLaN/s?= =?us-ascii?Q?x8WPXTUcrK1QtSc+QKFAyLeP1+Hv2SMVchjvYEbRawyNaA9udM0ecG5Tro/R?= =?us-ascii?Q?EWijjSKMtp5PYoTrmEa+dVgj0f5ws5cT7Q6AVzUmVuJHjRuijbRY1MIM7Lwi?= =?us-ascii?Q?hm1+6hp86b2qPj+6g4CBi/GcOgrId6OQzUzv8ZQJPXMj15ubeeVNrzApWIaD?= =?us-ascii?Q?VqfEc0u3QSBDcdOwOr0YGwGjMs6tCHcyYhFYxf7s5+Iq25yBW+nnROp5hoDC?= =?us-ascii?Q?sLxWFX3Bh7svH4RvyePSHHEaucnu0RCRwZrdKfO0M4rdr8KdzxEaBYFL9/5+?= =?us-ascii?Q?mieb4TKpcHtx/We1mBJA4ynwCq/yz2nvhqXPd9OMp6K9MIiag1k28WhiwLuQ?= =?us-ascii?Q?w1k0SL4osfu34tP2DeP9lvEZfVuyWk/1pDfhb1hJCARSMojZxp6a18Jxod0I?= =?us-ascii?Q?PfcxuP9UqpNAD15C14TGVkITBir6DjiMEmC0wVW39oUCrEl9Y5nnbwg+7Yjr?= =?us-ascii?Q?ZAIFLqPvkS3AysS7FH75xvlKGCgU2sQz3PiWrKhVCW4pwRK/uhQvnvhnZF7g?= =?us-ascii?Q?s4ZlyQHnqLe0xCUn/16LWERbUwWEhjL3n5sizTeK+celW6hrB+Q+6+4Exp06?= =?us-ascii?Q?2+1VZu5VORtqWCEACM4A2NMIintV4ZwFp4bJfZwE4s2RWYG8SQyTgpWxWYQ9?= =?us-ascii?Q?p6qmhB4eCxbd8HEAGNtXD5C1OkZjx72cXsci10fBBlUQFOaMyKErTYg8+QxZ?= =?us-ascii?Q?iC5ubBMRsFFEZUbEupp9PJRGANaT69vMV2R4ryslcCZCz12UiDy/wkWjn1YS?= =?us-ascii?Q?LGX1DS2d6iPLfGu0wGJaxr7jhPARzawV3oiaIY46zthUu+RD9/4TzSxEa1Lp?= =?us-ascii?Q?RG6lJ5MIkAg+lrMGR4EqI9MuXICbg2E1NmtxygvU801MjRTV67X4h6W0GdRn?= =?us-ascii?Q?g9xUNRbTzXBkr8mP3k3qcmMVZhdEpRUJZ6OIKUzMjRQOwn7SwnvwT6BNZFbN?= =?us-ascii?Q?fHZToe/HSPSi75BDFL3yd4SNod5Fh4i9OZsWPlqDTkzioO51xmhbE50pOvcm?= =?us-ascii?Q?nxQRegj2wJD8dMnMifHfNZgugSGaApeIyyLvsKKwi9t3qfFXmjBR57fPqbnB?= =?us-ascii?Q?4A99XqqFMgtuhK+nUNGS9YSPNzrMqiRLySt5ArvmmauzaNHT6BLRZleG/0ca?= =?us-ascii?Q?oW9XuoKGcyX2wlBVWCht1ww0e/lXijKB43jSJqyhlBZEzTnATFEnluW6QRQI?= =?us-ascii?Q?OmvYNpXM6vyEr+QHbN7Yx8zhLJ2d42X+f6amCQ+gjcbyLRrLmr8IcF+MoxiR?= =?us-ascii?Q?l+HbXzqyOvN1DfDei6JLjuCnqy9lN98eJXTlN/axRoounPxTERjVx9wFCage?= =?us-ascii?Q?6donseFEzLbrENQe1oGnJPTdU+cscokAlKJRIZpeN2J5nioOBKz6oI7vT0A2?= =?us-ascii?Q?EbsdHkmbyWA2FwWTQRsXb6ggd828O37LKrwAcZqrzizjeuSSRtqSAaeauwvr?= =?us-ascii?Q?6kt9ay07y8xt56sUhnWD3pJvHlkw6dh8pK8jsPGctHes/luulAP1bglFZZhv?= =?us-ascii?Q?mN83FOJ42bH6r+OCVBfmJiscKRhGBzj3mM4trLk/KOJi+VrB43h043Dj0GnX?= =?us-ascii?Q?AKN/5DTX1J60nJ9tw2d9i76dgqfNi0bWaYtkPv+TE2tKv+o/AMEZlLIZHKad?= =?us-ascii?Q?K2ao4aQ4GA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e026254-9c41-4d78-1008-08def82da678 X-MS-Exchange-CrossTenant-AuthSource: LV3PR12MB9411.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2026 04:53:28.4710 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: y9BUWJCQUtr2CNKu6f9JeYfxxedjupPaKcA77Sb61Ln/sEUWYKQGhpcs+MFavFzCHkDXIf9kSj9Sxhl8Mlr9PA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9748 Content-Type: text/plain; charset="utf-8" pci_reset_function() and its locked and try variants are intended to provide a function-scoped reset. The bus and slot methods supporting this interface refuse when sibling or subordinate devices are present. SR-IOV VFs however, are not currently considered in this scope. Correct this oversight by testing for non-zero VF count in calls through the pci_reset_function() interfaces. This test needs to occur under device_lock to avoid races with .sriov_configure. It should also occur before pci_dev_save_and_disable() to avoid calling potentially destructive reset hooks. Tests are therefore added to each of pci_reset_function(), pci_reset_function_locked(), and pci_try_reset_function(). The __pci_reset_function_locked() interface remains a low-level primitive depending on the caller to perform such tests as necessary. The vfio_pci_core use case of __pci_reset_function_locked() is pulled through with this test. Other use cases, such as xen-pciback, that don't obviously support or prevent binding to SR-IOV enabled PFs will need to decide whether VFs are possible and can be preserved. Additionally, direct callers of sriov_enable() that do not hold device_lock (lpfc) are considered a preexisting, non-compliance issue. Fixes: dd7cc44d0bce ("PCI: add SR-IOV API for Physical Function driver") Cc: stable@vger.kernel.org Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Alex Williamson Reported-by: Samiullah Khawaja Tested-by: Samiullah Khawaja --- drivers/pci/pci.c | 19 +++++++++++++++++++ drivers/vfio/pci/vfio_pci_core.c | 4 +++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 77b17b13ee61..b40b00c0c0c9 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5222,11 +5222,22 @@ int pci_reset_function(struct pci_dev *dev) pci_dev_lock(bridge); =20 pci_dev_lock(dev); + + /* + * Reset of an SR-IOV PF necessarily resets any active VFs. Such resets = are + * beyond the scope advertised for pci_reset_function() and variants, ref= use. + */ + if (pci_num_vf(dev) > 0) { + rc =3D -ENOTTY; + goto unlock; + } + pci_dev_save_and_disable(dev); =20 rc =3D __pci_reset_function_locked(dev); =20 pci_dev_restore(dev); +unlock: pci_dev_unlock(dev); =20 if (bridge) @@ -5264,6 +5275,9 @@ int pci_reset_function_locked(struct pci_dev *dev) if (!pci_reset_supported(dev)) return -ENOTTY; =20 + if (pci_num_vf(dev) > 0) + return -ENOTTY; + pci_dev_save_and_disable(dev); =20 rc =3D __pci_reset_function_locked(dev); @@ -5290,6 +5304,11 @@ int pci_try_reset_function(struct pci_dev *dev) if (!pci_dev_trylock(dev)) return -EAGAIN; =20 + if (pci_num_vf(dev) > 0) { + pci_dev_unlock(dev); + return -ENOTTY; + } + pci_dev_save_and_disable(dev); rc =3D __pci_reset_function_locked(dev); pci_dev_restore(dev); diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_c= ore.c index 3f11a9624b9c..9757b171791c 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -790,7 +790,9 @@ void vfio_pci_core_disable(struct vfio_pci_core_device = *vdev) if (bridge && !pci_dev_trylock(bridge)) goto out_restore_state; if (pci_dev_trylock(pdev)) { - if (!__pci_reset_function_locked(pdev)) + /* Enforce function scope under lock for SR-IOV PFs */ + if (!pci_num_vf(pdev) && + !__pci_reset_function_locked(pdev)) vdev->needs_reset =3D false; pci_dev_unlock(pdev); } --=20 2.53.0 From nobody Tue Sep 29 05:34:23 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011013.outbound.protection.outlook.com [40.107.208.13]) (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 9F4BB396560; Wed, 12 Aug 2026 04:53:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510419; cv=fail; b=jsIvjrbS8TQrgHa92W/4GZtfAsjW6552fK7dpO7d3ve2AM5UtqXF+wrsbwDH8c0lz9a/UEFCEG1BU+Oc+jE14Pwk0LUDg6aUqSzpMZA16vWpz8+zSBQHLSw1YJV74e5dJGTrp8RQ8UGkmjIW4eMIDGn4lUN7rvTeCX3zv7rQbTQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510419; c=relaxed/simple; bh=M/azG7+6ZstguPGmejjj7KFL8EPz8ifM9HKCKWiPZ88=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nDe/iYDHJwr8PmrVHy8CPxOE/QW3wvC5PE1YzvZtxjYG7GRgROy46lZ4ZLiC1EH+pemEO5axM1IZlKlJg00/CQ9FDuTv62aeMjlrORDmAsQsXZg7KyazKLThY8bG3fWc6zNKxjcImeC2nWXqcSoxU5scqZ5f8AGPOvcvty4VQbc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=j3hbe/U3; arc=fail smtp.client-ip=40.107.208.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="j3hbe/U3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PgFJThYXmmCRFgws+CY0ygqjVKdDENTY9H9lSId6pHQzOnpqJCk68CInaxHeIh8FE3+hT9thUtDjdfpqMCpLiBzNtc0hCF5e4dRUFWzU6obkb2kVZ+1VsfCz9dBalTAue8HejeT95ZmcP7YPJ2tep3WsH+tUK9e0c6Ljv1eaOhpDy+gmDmTzyM9BrKNjI/G9KaJiCTR1OooptihwRk2zRzkqdmdjRoDSyjbuBZEFw71bnugDnYfbIUfkEuZt9IDdvYQqLQN1ox7nFX60MgHpGkIAOBa4in399+MJI2XrC9Uh174j0Lw2kTzQnoskThP02vZX43R7uex326ASmTbitA== 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=Tp8ZddPUxUdZI6uEPtjEGBJN/ROZGKYjzG0/x4gIuzs=; b=UuFbn5tDmDo1v4+kO9NLrvfEK2fQwPU1pPiq2I6xPrzHLexWx8tNrV4zZbDqWkhHEWwqfa75oMSe4bq2hOnPylqA21OBnVrtyfc+vV/fYSbN3ojqK9oaETZuQPBGWqhOuFKZnNvFt+TeKpIEUmW0aRM02COrk594Jw1dWuaV3r6v4Xb3hs/OC3JFKA7VVeRAgnvJP+jvUbuAkKW/wSq9TqnZuabeiuEklmH8AHKa9YmhOVT/eOhYs+DaEUch6i5fHC1JltKY/fjaO4U/1U7jtZRmUJBRIiCeO+I1jEMWb3RoSCBY/3aREa0SSkullhh/EiRvthJ9FD179vV9NB9NHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Tp8ZddPUxUdZI6uEPtjEGBJN/ROZGKYjzG0/x4gIuzs=; b=j3hbe/U3cgqeI27xfrKxSLHL1FJJWqPbFN4R6aHMotpqQAu+r8PcW21bIJUivzrv+sixGJKzYYV0YbMukN7EwmiqLNUJ7ZdJFP9WeC+89n2LQBP5C63VywlP4MKXeNgcVvqko3xOG4wmynUIeuuIXwAoYj2qvPbFAjAtZu6ks2yEY7ffWFRYlZKcqFdVJgUc3mizwu9zF9Yxd4xEJko7J6+PRwXh2768L376czhrZ2/GxOqBFchWYBivD1TaiWKCWyg4vGcpyC6R1l5QMU00O18zeUY5yvWQYPahVgCVjOn0e00Go6Kg5iwnhAfHCNQNMQEdoaLgIUWi7UZFGo/8YA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) by DS4PR12MB9748.namprd12.prod.outlook.com (2603:10b6:8:29e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.12; Wed, 12 Aug 2026 04:53:30 +0000 Received: from LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15]) by LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15%6]) with mapi id 15.21.0315.011; Wed, 12 Aug 2026 04:53:29 +0000 From: Alex Williamson To: kvm , Alex Williamson Cc: Alex Williamson , skhawaja@google.com, Jason Gunthorpe , Bjorn Helgaas , Kevin Tian , linux-kernel , linux-pci Subject: [RFC PATCH 2/5] PCI: Add pci_reset_bus_cond() for a caller-gated slot or bus reset Date: Tue, 11 Aug 2026 22:53:20 -0600 Message-ID: <20260812045325.2733631-3-alex.williamson@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812045325.2733631-1-alex.williamson@nvidia.com> References: <20260812045325.2733631-1-alex.williamson@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA1P222CA0078.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:2c1::25) To LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR12MB9411:EE_|DS4PR12MB9748:EE_ X-MS-Office365-Filtering-Correlation-Id: d2f0e514-e79f-4405-e1ec-08def82da706 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|6133799003|10067099003|56012099006|5023799004|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: sgqVu4k7sf4rkI4R11Z4fGYdomE9eC55rDK4fIEuo4LJP7AMki/8xcChVJDuStpBc9/c070EMgHp3P0D/IMLwYkF6KzB+bZ4iL7P2RxrSizh7+uWG91wS58BSrjLck3yQxqZ7zHJDlePUuK/yoxL7OllSUVwOYDVcFThgW2NZ9SIQK0Odcb+FkeZZ1ufzjmzlumuJ3h5KR9TPM7IoxWLAHz+lQJ6KFFBlQV7ZIMCD8RmkHhkZANI8mkPo48XaEeFeL0qwdZorF08GDJ81vLUO8Hd0ZEjcv380o5TuXyvN3L2tYkcEd5uoxpACiIZe/atCpKN+RI2Gf2d/KIJQ0F4X6nyqnMUbyrk14/zQqAT30mR4hEzhJKKMcbvmVC320StT4muQqro4KTAEk5whN8myEwaCZfK5T9F9Aqm+BCVg/XDYbxmRO/C2VkKyOH+EUwG9T1RRpOrdRqO7Sl4ivlvUGUllIhkwa/eKOpoJKj1HnOemc7fYK+WBKPHppkj/IkWPvht1mfYjTHXi9O+5Dhjn1nw2RT+Fo0C1Po8Dy789k6MCagAS2MGER0G3TLpWaOJNnMVw9t1ZNnTUigwXzC4no33mMs9DP8UqAwmyKz7mrWMM1tvpREpk0aOmO66M8+fr1+imi3ml72L/vbWAxGWbT+XCMCiwFYtNZ3C1xTetjU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR12MB9411.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(6133799003)(10067099003)(56012099006)(5023799004)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?V/oK8EQRyCyTSUnEjGC72sCx9rgjW55UIyay1FnaOwciUwWp0+PQT9gnf1nN?= =?us-ascii?Q?RykA30THsS4dn6Q6E2E0A4aT0JAcScXDRiG071W5zECOhj+8nsUU0CqiE2ks?= =?us-ascii?Q?jf1ZDb7JJMtiEJtYswmUyeZv6sZRXttWfHYRDXuzgB4fick59BAE47080xxA?= =?us-ascii?Q?9Yfrd7cHCpjMIKRsblCXU16uephXkk7BMDVbVFaweD+ZIqy4MpfEpdGBielQ?= =?us-ascii?Q?mTcCDQbYbcz9n5XFC8atjiCk9o708LEDdrB2+9ABEA7dHK/2sM6gdaMFG13N?= =?us-ascii?Q?3Hcdl0VLadGfkXdDue6yCgV8I1Nom/kQAhMNs1WsEcV6g1cG5eydgEE8Pbb6?= =?us-ascii?Q?d9fYRXdkTR9LD4UqGw6eXCEQXXuHe5+70pjsQwwyg8KRnSK15Y90/FRjE7nX?= =?us-ascii?Q?+67JLeIyZ1CyPfP333sIFY2eob/BOc9Dz5cBtgk7DwXiWU+s/fA3ERYmOSFp?= =?us-ascii?Q?cKGdBGiE8p0CbOArN1XwNOGj/tgiiPjq+DuK/mkRqJkdHkd/n3EdjkDUvasN?= =?us-ascii?Q?UOx0StOD8IVXqf+QNbM029FE5P0Fe34xcGo0cCQw54AiGV1yS3ALxjAsy2hB?= =?us-ascii?Q?B1bWD5Wp8B+Hc3rtJ+hgKePRWg3lLklPtLbAgmW22ETV4flm/onAyNVy7bSZ?= =?us-ascii?Q?ULdJZHiv/dyt1OEZwUJVEzg6cCQyHidIrAGWqvQZgbymxs+GvbLMwWepD8Fv?= =?us-ascii?Q?xZmY8VjGHZpWqCg0m2wph/Yskmlkwn/9Xr7sNHVDUcc76UQchejT20HBViYA?= =?us-ascii?Q?BTlc0ZHlPtMUb1T9vGrTlmcZ3Yu4RMHEpNXKq9QBj6vSQPAYJorK71HByAZ2?= =?us-ascii?Q?1eW9xm0gw+DqbZ2M48Nkn74F18aI+u6Gt7S1YpMsflC7pY/iZFPWdpzH5097?= =?us-ascii?Q?3FTYQXl3ffeYGiEq2iNz8OhyCKZlUKJIZzZ3KZ/SyjljCxJwShk7JQeN12jG?= =?us-ascii?Q?fgPtpdXHYXK4dvMoyFJI+u9Mk+o69lhAwegpzmezcf0EThRYpZAFBGwRXA6h?= =?us-ascii?Q?ruQBbxdocquUeeMQjWz2kBRzFV7bSY7LU8gBvJBFu8gcUjnR1ZuP2g8bhVma?= =?us-ascii?Q?KDk/HOLubOj4eHboAztOTLTuJQmebUO7102OwLbYaJ5vn3qDwe8/wUO/iQNB?= =?us-ascii?Q?QzusXiru+VteYbcsboUCkUjd+wUCjbi79SFTJUD5NiQwBSQGJW4fralGrYwu?= =?us-ascii?Q?QG87U2qEqSPzbQ0woOWanbIwqf53ekCY5Rep1d0OIW6mkzi37Tat1cmj7QzW?= =?us-ascii?Q?qNyLxwLjLWdCaGjgTQEctvgjKgu6ViLCVWuTLLrtLKJQe99fY4Y7KWm07FAg?= =?us-ascii?Q?fdETNLu5IAmlv0yuPrfSZyryhugb85MU3fwOjYsYU95UF69v1YaulZA9aYHa?= =?us-ascii?Q?nQNr8hvFIDun+j69UQMrZ4B4nwhMzibaQ01MAmdSsWDgyAUZtneByR9qAZjl?= =?us-ascii?Q?3JrC2PaLbv6RGYKkVK0w1Os5HSMuwtGEl/JDiQ+AH9JIA8aXOvsXHIGH1MOq?= =?us-ascii?Q?yrZo0gb7Rbetp5bCiXYxOTXxUJXWJbkS9ReaV4vsXQgenWCQCuu230NdUSxX?= =?us-ascii?Q?EPL/++gF86ushaoDWkf7/UZoFkrdWy3yZWvi9g7G70pt1xIJl5gmTpZ8w0Qs?= =?us-ascii?Q?CTt8YvZr7+NOkqCdBLKs1knlpHsJ8JnMNSoabCqPBu5Sj3T6LnFO0kMoMWEb?= =?us-ascii?Q?StlmA4Bv7FTeZ3VmeIu95AH809dlKV1L/ha7+rq5XJKfGbRwNrDxnuCEdJyq?= =?us-ascii?Q?LFSWKzTQjg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d2f0e514-e79f-4405-e1ec-08def82da706 X-MS-Exchange-CrossTenant-AuthSource: LV3PR12MB9411.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2026 04:53:29.4096 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: uwTK4hg6Al1XRgUcQBpEokr+XoXptxG85QZSddv6UUS2sr5+QAGwAeRwqkqm0/ZP/cQLenBk4n6FUQIt1bk1Mg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9748 Content-Type: text/plain; charset="utf-8" pci_reset_bus() locks every device affected by a slot or bus reset, performs the reset, and unlocks the devices, all internally. A caller has no way to evaluate what the reset would actually touch. Add pci_reset_bus_cond(), which takes a callback invoked on each affected device once they are all locked. A nonzero return value from the callback aborts the reset and the value is returned to the caller. This allows, for instance, the caller to validate that SR-IOV is not enabled on any affected device under device_lock, where the value is known stable across the reset. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Alex Williamson Reported-by: Samiullah Khawaja Tested-by: Samiullah Khawaja --- drivers/pci/pci.c | 97 ++++++++++++++++++++++++++++++++++++++------- include/linux/pci.h | 3 ++ 2 files changed, 85 insertions(+), 15 deletions(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index b40b00c0c0c9..06728137c407 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -5567,9 +5567,36 @@ int pci_probe_reset_slot(struct pci_slot *slot) } EXPORT_SYMBOL_GPL(pci_probe_reset_slot); =20 +/* Call @cb on every device a slot or bus reset affects, stopping on error= . */ +static int pci_walk_reset_check(struct pci_bus *bus, struct pci_slot *slot, + int (*cb)(struct pci_dev *dev, void *data), + void *data) +{ + struct pci_dev *dev; + int rc; + + list_for_each_entry(dev, &bus->devices, bus_list) { + if (slot && (!dev->slot || dev->slot !=3D slot)) + continue; + rc =3D cb(dev, data); + if (rc) + return rc; + if (dev->subordinate) { + rc =3D pci_walk_reset_check(dev->subordinate, + NULL, cb, data); + if (rc) + return rc; + } + } + + return 0; +} + /** * pci_try_reset_slot - Try to reset a PCI slot * @slot: PCI slot to reset + * @check: optional per-device callback that can abort the reset + * @data: opaque argument for @check * * A PCI bus may host multiple slots, each slot may support a reset mechan= ism * independent of other slots. For instance, some slots may support slot = power @@ -5582,7 +5609,9 @@ EXPORT_SYMBOL_GPL(pci_probe_reset_slot); * * Same as above except return -EAGAIN if the slot cannot be locked */ -static int pci_try_reset_slot(struct pci_slot *slot) +static int pci_try_reset_slot(struct pci_slot *slot, + int (*check)(struct pci_dev *dev, void *data), + void *data) { int rc; =20 @@ -5591,10 +5620,14 @@ static int pci_try_reset_slot(struct pci_slot *slot) return rc; =20 if (pci_slot_trylock(slot)) { - pci_slot_save_and_disable_locked(slot); - might_sleep(); - rc =3D pci_reset_hotplug_slot(slot->hotplug, PCI_RESET_DO_RESET); - pci_slot_restore_locked(slot); + rc =3D check ? pci_walk_reset_check(slot->bus, slot, check, data) : 0; + if (!rc) { + pci_slot_save_and_disable_locked(slot); + might_sleep(); + rc =3D pci_reset_hotplug_slot(slot->hotplug, + PCI_RESET_DO_RESET); + pci_slot_restore_locked(slot); + } pci_slot_unlock(slot); } else rc =3D -EAGAIN; @@ -5626,10 +5659,14 @@ static int pci_bus_reset(struct pci_bus *bus, bool = probe) /** * pci_try_reset_bus - Try to reset a PCI bus * @bus: top level PCI bus to reset + * @check: optional per-device callback that can abort the reset + * @data: opaque argument for @check * * Same as above except return -EAGAIN if the bus cannot be locked */ -static int pci_try_reset_bus(struct pci_bus *bus) +static int pci_try_reset_bus(struct pci_bus *bus, + int (*check)(struct pci_dev *dev, void *data), + void *data) { int rc; =20 @@ -5638,10 +5675,13 @@ static int pci_try_reset_bus(struct pci_bus *bus) return rc; =20 if (pci_bus_trylock(bus)) { - pci_bus_save_and_disable_locked(bus); - might_sleep(); - rc =3D pci_bridge_secondary_bus_reset(bus->self); - pci_bus_restore_locked(bus); + rc =3D check ? pci_walk_reset_check(bus, NULL, check, data) : 0; + if (!rc) { + pci_bus_save_and_disable_locked(bus); + might_sleep(); + rc =3D pci_bridge_secondary_bus_reset(bus->self); + pci_bus_restore_locked(bus); + } pci_bus_unlock(bus); } else rc =3D -EAGAIN; @@ -5680,7 +5720,7 @@ static int pci_reset_bridge(struct pci_dev *bridge, b= ool restore) =20 list_for_each_entry(slot, &bus->slots, list) { if (restore) - ret =3D pci_try_reset_slot(slot); + ret =3D pci_try_reset_slot(slot, NULL, NULL); else ret =3D pci_slot_reset(slot, PCI_RESET_DO_RESET); =20 @@ -5694,7 +5734,7 @@ static int pci_reset_bridge(struct pci_dev *bridge, b= ool restore) mutex_unlock(&pci_slot_mutex); =20 if (restore) - return pci_try_reset_bus(bus); + return pci_try_reset_bus(bus, NULL, NULL); return pci_bus_reset(bridge->subordinate, PCI_RESET_DO_RESET); } =20 @@ -5724,16 +5764,43 @@ int pci_probe_reset_bus(struct pci_bus *bus) } EXPORT_SYMBOL_GPL(pci_probe_reset_bus); =20 +/** + * pci_reset_bus_cond - conditionally reset the slot or bus containing a d= evice + * @pdev: top level PCI device to reset via slot/bus + * @check: optional callback invoked on each affected device before the re= set + * @data: opaque argument passed to @check + * + * Reset the slot or bus containing @pdev. Once the entire physical bus/s= lot + * hierarchy is locked, @check (if not NULL) is called on each of those lo= cked + * devices. A nonzero return aborts the reset and is returned to the call= er, + * otherwise the reset proceeds. + * + * NB. @check runs with the full set of device_locks noted above held; cal= lbacks + * must take these locking semantics into account. Use NULL to perform an + * unconditional reset. + * + * Return: 0 on success, -ENOTTY if @pdev is not resettable, -EAGAIN if the + * devices cannot be locked, or the value returned by @check. + */ +int pci_reset_bus_cond(struct pci_dev *pdev, + int (*check)(struct pci_dev *dev, void *data), + void *data) +{ + return !pci_probe_reset_slot(pdev->slot) ? + pci_try_reset_slot(pdev->slot, check, data) : + pci_try_reset_bus(pdev->bus, check, data); +} +EXPORT_SYMBOL_GPL(pci_reset_bus_cond); + /** * pci_reset_bus - Try to reset a PCI bus * @pdev: top level PCI device to reset via slot/bus * - * Same as above except return -EAGAIN if the bus cannot be locked + * Same as above without the conditional check. */ int pci_reset_bus(struct pci_dev *pdev) { - return (!pci_probe_reset_slot(pdev->slot)) ? - pci_try_reset_slot(pdev->slot) : pci_try_reset_bus(pdev->bus); + return pci_reset_bus_cond(pdev, NULL, NULL); } EXPORT_SYMBOL_GPL(pci_reset_bus); =20 diff --git a/include/linux/pci.h b/include/linux/pci.h index 64b308b6e61c..ab41a49f4eb7 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1480,6 +1480,9 @@ int pci_try_reset_function(struct pci_dev *dev); int pci_probe_reset_slot(struct pci_slot *slot); int pci_probe_reset_bus(struct pci_bus *bus); int pci_reset_bus(struct pci_dev *dev); +int pci_reset_bus_cond(struct pci_dev *pdev, + int (*check)(struct pci_dev *dev, void *data), + void *data); void pci_reset_secondary_bus(struct pci_dev *dev); void pcibios_reset_secondary_bus(struct pci_dev *dev); void pci_update_resource(struct pci_dev *dev, int resno); --=20 2.53.0 From nobody Tue Sep 29 05:34:23 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011013.outbound.protection.outlook.com [40.107.208.13]) (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 E88533955D8; Wed, 12 Aug 2026 04:53:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510422; cv=fail; b=j91MznhMQZ8ZuJ8LqDDDs8m5r/17UN0lDiGJeg2u6nBS8Rt5Tyvd9AzUuGzqNq42RMArgDxhpq0lcunS86gda1Mqtnoczx+tPjjfTk+nM3bAgjtn0qsLiPfk0pRc3mLaTXHRfqbzzS1KUxvs2hCGp48Wjka9GVqTr5LJkaDbGEk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510422; c=relaxed/simple; bh=O+0b/LFbL4vkcaEa6o/mbU+dsZQP0xfYCiuNbUaPgGM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=KailM30keQgBfYbOVeXO6zxYZ56WnLh3v2iYF9C9ZnSUYS3HuQJRw6tl0ewKRe4rrnf+kmR13tAHuAUvsjvK2u3vgIce6UJtKQtl9KSUbRSCEsJC+JooaChV4kZW6KSZwaE2XBqYiMZqA6RDinUwTSGTat3AWxy7rJdrV8Xza9s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=QiuVbwIu; arc=fail smtp.client-ip=40.107.208.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="QiuVbwIu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=V10R7mGwsBBBNqnlBkM3tgCErfXEQsyLzcsHiZYQ4jwOLE5Zp2y7UwDv+TklPeBsvKdW6uoJJgr3XC37p/HVZiEEEv0eL28/itaOQWJJaw1qqlvtBzAr6Wu1EPLEQCxoTh6qdbF2PzOfHbuFarZfUZKYcXAIY8O86IwgdmHWJ0MQIGRsNWn5GwfLAk4MebQrc1MMbO/5bnYR2XcU5Vfr72m5yvTApO8dSIWJ6wKV5Yj35AKsYU73yF21OOhcMLGxB1lPJuJwQi9jyGd9sUTuX3gSvjgUEv6TS/8SmeM0zQwiIdyk4lhZ31EaDi5LyrmY6QJioNkKN2lZPAI+ZYhYiQ== 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=qBjpiYPgcC60JV9uFHW8Xlv2k4mJnIPGbyzcMEC3Gjw=; b=qr6vIfLvEbyi6UNVrGkxAmGQpdXRIpU2TmV8ZsycbzMNgQPb1PwLBBBjd0wXGI+/TKlUH0ZfLbYpc/AUc8h+BKF3F0eZytRyQDlstqxP3NgCdDpo7bnPGEpJKBkty7/7gShashR3UUWwtiGO5dLa5X9MnqbouTzayYXuhltTJParGOBEv7+E6DvjeHliEPivN5A+YN2HzLMkk211wTAAfnMRYtrt7+BLvv6oZaUh7bPsbThfZe+juslMt1P8VSuoKAbB4e2iZ5362r2JhOoqDDvHBCxN/ixOVd7RVCsvhJtjzsvrdZPq/VpdqfzVe8cMc67cvp8YjwbDBk56Z/kvDw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qBjpiYPgcC60JV9uFHW8Xlv2k4mJnIPGbyzcMEC3Gjw=; b=QiuVbwIuqi6nztL33VrMQZdOxTHQhqtU1pC0Xi8llhVpBrAPWE9Uik1A3I0tz2DZN+uFg81Il9GwWWxa5IwvpL6+cpoJmWpbi5W359RZkPfWmRwgzBtpx5UyuMOCFONyiJIS8rLhGV5g0X74EDH1I1TadROl34EJvHpHloTIhkOnAai8np4fKcIiYHY7FctkGvO8zI837mgtACp8NsrNDuTg0u6xvUUgRHGwAwEA9WsCM1gGY9vV8GnC/KzN1HKcZe7Ys/XcN2j8HLvm1QJs0JGjIUQF90q/TQr43tgRmDopHk0D5kwCyAwd2bHgZPB3B4rJP6CYSW4edDSlwHHNcQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) by DS4PR12MB9748.namprd12.prod.outlook.com (2603:10b6:8:29e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.12; Wed, 12 Aug 2026 04:53:31 +0000 Received: from LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15]) by LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15%6]) with mapi id 15.21.0315.011; Wed, 12 Aug 2026 04:53:31 +0000 From: Alex Williamson To: kvm , Alex Williamson Cc: Alex Williamson , skhawaja@google.com, Jason Gunthorpe , Bjorn Helgaas , Kevin Tian , linux-kernel , linux-pci Subject: [RFC PATCH 3/5] vfio/pci: Refuse to reset an SR-IOV PF with enabled VFs Date: Tue, 11 Aug 2026 22:53:21 -0600 Message-ID: <20260812045325.2733631-4-alex.williamson@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812045325.2733631-1-alex.williamson@nvidia.com> References: <20260812045325.2733631-1-alex.williamson@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA1P222CA0078.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:2c1::25) To LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR12MB9411:EE_|DS4PR12MB9748:EE_ X-MS-Office365-Filtering-Correlation-Id: 45ac1bb8-ad03-48ce-4189-08def82da7db X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|10067099003|56012099006|5023799004|11063799006|18002099003|22082099003|3023799007; X-Microsoft-Antispam-Message-Info: /QYFWlb10lyPT7ROc/1y32jd/RvylWNuWLWpkj9n1i3MfWfVqIUEeh3gbKJ5hAgsjTx6cq2K2ma8qVrzzXGiH8JZuos3kpKx2EV4dioW3/xZeVsJPxOCgm93Gzqq8AkELf9V9V9Lu5QD/jpyLPmk1JYv5VGlGp+eBtLQA+E3hipLPp6n/2gkh6RG7WN4+Ho6PQOEl+HpNrSqC+2mnMVmPqWdBlxvLAByd9syHwH0ED4RXYdvGukDMHrLqfVhVSST11jbl9pcy6zyihbdZOXcYh5kd1jLo02WvHm7ZqoiH2hOmZnYawOsLSEcwwj2BbCHiXPOH2vIGkCIxjYTWev+PNxnFXZQaL7zTay0lqYtdrfSfPkWBkJuUNXu8CISdCMOTTGKIMRUoffyHeoXTsj1eLBuWtqHtJz8uub9SoCtj2pEC2ptfXD/aVd9mr09iCfOTeRdZ0e2H6CPWyAlncDaisQZ/8BAix/cnVmZp6yMBiUcYr9H0jI79ts+aTKsr0HVCmWeg1+HAYPXPdafi/pobp6zwzlGjR4eNJfmuX77EcNOkPKczvf76uf53q6sW/b7lpQw1KUInvFW1NqzNYs5xtzzUqkcWlhh06bAtoPB2aQSWa6Vh845P7Kj58vG8PCIfbyN7ZpIfkimbOWHt535s4yfjVP5HxrkG2mE2f32d+0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR12MB9411.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(10067099003)(56012099006)(5023799004)(11063799006)(18002099003)(22082099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fKo7coqcFwHNdVB0Q7HMNOcKSwFnE+WJoifzo2pTZFu11r5oXzVRNGbaRL75?= =?us-ascii?Q?1mWV1Qi/rvFu5g4qDaZELzACOwpKNvw/C89ezD+DOhiBcPMaoRgEOzMaQ92x?= =?us-ascii?Q?POSq+hCQCZf4x8QFcdQiGWLkR56HU4fp/R8rFU95PG15d5G54jp5W99dfhaO?= =?us-ascii?Q?Vr4fpVr3LyNZZK/Gl1Hf/frlfqrSstsVXC8INsop0k6qUFNv2Vl0jYTDPWaO?= =?us-ascii?Q?y8qJS8cwJbuzUFIBPuCxE1nU7qXA5nouTcjrLeKjCVN1PH3O9mqW4ttWSx82?= =?us-ascii?Q?JlT/1GWbqUk6ukYMMbWX8v3cCkr/J5GIg85smX9tAVr9ox64FWBNoUtU7rXz?= =?us-ascii?Q?EEhYhiwBjaVJc0jxvnmNBGs2G6Im5KdJsBQv/DBOMMSxxRo2h9Z4+8qYoaQx?= =?us-ascii?Q?EOLp3EuEYn8Mc3+m6uS1R0nenEJn0GoP/Yn+HUS+nsPMPpAhagSjzwQ9ORMP?= =?us-ascii?Q?OE2MnnHB6q+N80oK08NA9JRnU960+5UyGbnosaM9mfGEoJqdXYGfcRRTXkmX?= =?us-ascii?Q?uDg859Cc+3QqVB/QhYDToH6IozeJJpBd7Ol8kXrGBNo3L+v++2cIuwniA4wj?= =?us-ascii?Q?/f4rEXhdp/+O7v3BA/XOyeDZZe7BHksVPXe7YtaxvCdT37MKTJ9kZdIvPx0K?= =?us-ascii?Q?i2NJKIrY6vPZAr7Qj7nu93opaoXaTBUzSH837dn22lpBGAaeSgePdxoUDHgR?= =?us-ascii?Q?piLwwI8BrCFLU8uZa+jAfsRtCS9JiPRUQxQh1JWhC9SHwmUFTWA5h2eHQiGl?= =?us-ascii?Q?nMq1KgFabzKxreHjWIuCGhcBJ0LacQ5n2jvgI9EEaedP5vw899nOXR68TXhC?= =?us-ascii?Q?ZFKfOhUzEVghuVsTUr1erjLfCCnbxI4MF8uYw2NiYpRhwF3zEuMth13Q8FeG?= =?us-ascii?Q?lz34tzzhqPd9NynBgtX4ID6WvkATDdrNUy680UuoCu2s2ITYjua2GIjognOZ?= =?us-ascii?Q?qv8hPQdTN45SQtCZi9aae1B3LEpChxeh4V3tbl9b1Sl+R6cNajscZWWHWbT3?= =?us-ascii?Q?AhzmIOZgA4H5QOlmAGGD81vuRCpqnhvTnQ4wraVKHk5znB8fiDhUsgpBduLI?= =?us-ascii?Q?0BpSErgOhLsSTIMWaVgfEfytrrarR6Ld+gcVZ0aMtRiqRbbMq+epdvbhgUYg?= =?us-ascii?Q?M6j64g36lORIBkgl10Q94t0mkKRDVpWB5OtqPC8hdjWUxRBZboqZxFcFArJn?= =?us-ascii?Q?o3shuFsh5f0bxHCUq6M7cBO24t5IRWhdJKrYo4m/nyUuqPDUReDU6vS3MHMN?= =?us-ascii?Q?LSufR2wC5mwYDYxdsHiJdtfujGe2/nU1r6CvzWyja984n+HE0V8B0VN4sTH4?= =?us-ascii?Q?G9w3Woih9lVc3iNOg+y7EY/cjnVJ/QGO1RMxlbM3wQTagFNDnTZS4w2E+IU+?= =?us-ascii?Q?SwzAfEdwQCZIW824UV8WDm9D+Wr4aErxuesuY/nF/MgDNBvezcyNGuOl4F/q?= =?us-ascii?Q?uKlbyW9udY6FsWyZMjS3S8twz4u1mqz3twqxT/KLjDqF+pJJfsyy/ySXQZxf?= =?us-ascii?Q?Q3oqggyaFAUogpiItbYSB/ZAEkdDvz2D6dimbIs4RD94PSDHRoHBL4C4JQlN?= =?us-ascii?Q?ovA6Ezdj16zcbHmTPA1l4gvGZ/YFXlSNB+OTt2BX472ZrxPuN63SHHYfIMZe?= =?us-ascii?Q?FjEMHUW6grpS4mqNJ7uy40wUsIdMOaa6dxc/QgR8NdV79HSwu3gg5DJaBUhY?= =?us-ascii?Q?quu/imxz3giF9r+ieN7bmFtWWZ615uZzocUBTrH3y5u9U3QJOWYxU4nOwmFi?= =?us-ascii?Q?3M82pOjcsA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45ac1bb8-ad03-48ce-4189-08def82da7db X-MS-Exchange-CrossTenant-AuthSource: LV3PR12MB9411.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2026 04:53:30.8165 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: R1RNw5UxHN1IYMNjPzdRF/Yfuq8dulTdIxFJrGQEbZdO1w/S3F5PSNSQTinSLI4rdVUjouTjnH83yy1D6LXJDA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9748 Content-Type: text/plain; charset="utf-8" The vfio-pci hot-reset interface VFIO_DEVICE_PCI_HOT_RESET does not take into account whether an SR-IOV PF has active VFs. The VFs appear on a virtual bus, which is not enumerated in collecting affected devices. Move the burden to the user when active VFs are present, require that there are no VFs present on SR-IOV capable PFs in order to conduct a hot reset. Fixes: 137e5531351d ("vfio/pci: Add sriov_configure support") Cc: stable@vger.kernel.org Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Alex Williamson Reported-by: Samiullah Khawaja Tested-by: Samiullah Khawaja --- drivers/vfio/pci/vfio_pci_core.c | 15 +++++++++++++-- include/uapi/linux/vfio.h | 3 +++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_c= ore.c index 9757b171791c..956a05ca12e5 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -894,6 +894,17 @@ static int vfio_pci_count_devs(struct pci_dev *pdev, v= oid *data) return 0; } =20 +/* + * PCI walk callback to check for SR-IOV PFs with active VFs. VFs are not + * enumerated when determining affected devices and may be owned by separa= te + * userspace processes from the PF. It's therefore the user's responsibil= ity + * to teardown VFs for any affected PF before performing a hot-reset. + */ +static int vfio_pci_dev_has_vfs(struct pci_dev *pdev, void *data) +{ + return pci_num_vf(pdev) ? -EBUSY : 0; +} + struct vfio_pci_fill_info { struct vfio_device *vdev; struct vfio_pci_dependent_device *devices; @@ -2598,7 +2609,7 @@ static int vfio_pci_dev_set_hot_reset(struct vfio_dev= ice_set *dev_set, list_for_each_entry(vdev, &dev_set->device_list, vdev.dev_set_list) vfio_pci_set_power_state(vdev, PCI_D0); =20 - ret =3D pci_reset_bus(pdev); + ret =3D pci_reset_bus_cond(pdev, vfio_pci_dev_has_vfs, NULL); =20 vdev =3D list_last_entry(&dev_set->device_list, struct vfio_pci_core_device, vdev.dev_set_list); @@ -2661,7 +2672,7 @@ static void vfio_pci_dev_set_try_reset(struct vfio_de= vice_set *dev_set) if (vfio_pci_dev_set_pm_runtime_get(dev_set)) return; =20 - if (!pci_reset_bus(pdev)) + if (!pci_reset_bus_cond(pdev, vfio_pci_dev_has_vfs, NULL)) reset_done =3D true; =20 list_for_each_entry(cur, &dev_set->device_list, vdev.dev_set_list) { diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h index 5de618a3a5ee..8603959f1735 100644 --- a/include/uapi/linux/vfio.h +++ b/include/uapi/linux/vfio.h @@ -772,6 +772,9 @@ struct vfio_pci_hot_reset_info { * Mixed usage of legacy groups and cdevs across the set of affected * devices is not supported. * + * Hot reset of SR-IOV PFs with active VFs is not supported, SR-IOV + * should first be disabled on any affected PF. + * * Return: 0 on success, -errno on failure. */ struct vfio_pci_hot_reset { --=20 2.53.0 From nobody Tue Sep 29 05:34:23 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011013.outbound.protection.outlook.com [40.107.208.13]) (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 49C6A3955F5; Wed, 12 Aug 2026 04:53:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510423; cv=fail; b=VwzOKAWg8VZ5HPE4DzQfEV8rUqPtOsowH+N2susr6VCXTN58DtnYF4I5Dzt86FX+yaefqyGmJXnwawFaLXo9zmYRCK1R40C/a/heM2et4w+DBRkOCg5QarPVc/utdMonGiAOiZVLUspYc1V7gHhHbK7iWMf7AegK+yBahmyT1b0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510423; c=relaxed/simple; bh=pVHMkjGZyoUmoirGtGTRVqUOvutXJyVoW5ZXaUtjGhc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=qODeA7uZU4oo+Af8gVxlFaO4dyVOM6SnWew9qxztDKseCFRtbSJLrGnGOsE/FYDrehwQJs9rUaxxDP0RSQGpB2jwbhiURnoFpTbghVt5ot5PHpMmqDP08zhm+WugdgBOu6POjJG6Sh+dldoHmfg78P+PUgs+NpplzOI7jgPedMI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=sLC1eTDN; arc=fail smtp.client-ip=40.107.208.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="sLC1eTDN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=emNH/N6yBVDiH6inw8kPIIj3oOSRrxnyLrOKeetb9Muh3cK0+IppqB6ukG8XW9Q0iEAigqCCydBSZdVeRptFxDueLi9uLnrQVQ9cgr17DLMUEvmAHEfAP2HVXwhdeAB4X8o1Pd2Si458aWrIzIMDj45mL6x2oJLMop93bwE39ElEZ3m7Z6JEG7PXNqyjZlYeYnqWkCC6mkOB4YU+BPQqVxTrEJQJurZCaC4rRZ3CJXChwFpAyGp7VPXxP/+HaTLvcAsSpu58aS8s/Nw0hC3dJCXVGscTYxNswspmvb2OJ5H0iFJnKVpvXOsltX4PuHAeL50AiUarz/Zcft9wAeYVIg== 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=G2OKKWgOX4JOh1tLSmcmkaLZA1SbNcgSSK1scK8jBGY=; b=tuTXsYekG/EmxHl8cL2j60LiO67jghBAGTjA3MhIDjCeWGsFNroeGURP6AMQW0743dMir3q9ue90T1kPIqbdfmYRF4egu3JGgCK5tdohdIBRM34l8vjsg06F0qNfv5vIar6oqmgpREMF3LHBSvJd/eJc2lzL8xPAbpJXGUPn1zaeQvNfeTim6yPQ1i2hL26urGuZgKspCxsWe9LDqH9Z7NmDHf7csg7l5Ru641AgRlX5+Z+prym2LcGi18qdBiveohlbgyMMYZI2QRIdMaSEgCbhe+LFFKj56Y1RDaRPV/0jYf5TrFLTtQezW3NG0m6jMRx2SRsvLxESIwrqqfLBSA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=G2OKKWgOX4JOh1tLSmcmkaLZA1SbNcgSSK1scK8jBGY=; b=sLC1eTDN4nfUP8/PDLEE+l/LsUk2VPSo+5+FgL0mAr0mJLKEBOrxJZOdwSJy0dHBBaCICMrRubZD6q+Q2B9VSYHMOThjadEVKNViqLMoAF4JTWxNbHaUShHIpRc46xDju4RPQRMvc2JIK6Kj4h9YX1fCF20FR9w9z9EivMxum2pcGwdw0nZJnJasSfBzWHnovZbroQowyzn4Y1ikSALfPIZFFozUppBCD9+Xatg/AQDnAMQt7FJradGd0woN0ravjv4FqSF0gTYNbBOm+uoXFvqcz/D4Xb44MW6zcUgBy9xI30fDvYVSojIIfSZmSR2S8tccZjkIFf2qVU6Z94bulQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) by DS4PR12MB9748.namprd12.prod.outlook.com (2603:10b6:8:29e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.12; Wed, 12 Aug 2026 04:53:31 +0000 Received: from LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15]) by LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15%6]) with mapi id 15.21.0315.011; Wed, 12 Aug 2026 04:53:31 +0000 From: Alex Williamson To: kvm , Alex Williamson Cc: Alex Williamson , skhawaja@google.com, Jason Gunthorpe , Bjorn Helgaas , Kevin Tian , linux-kernel , linux-pci Subject: [RFC PATCH 4/5] PCI: Export pci_reset_supported() Date: Tue, 11 Aug 2026 22:53:22 -0600 Message-ID: <20260812045325.2733631-5-alex.williamson@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812045325.2733631-1-alex.williamson@nvidia.com> References: <20260812045325.2733631-1-alex.williamson@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA1P222CA0078.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:2c1::25) To LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR12MB9411:EE_|DS4PR12MB9748:EE_ X-MS-Office365-Filtering-Correlation-Id: d2f2c361-53f0-41e1-cc82-08def82da870 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|10067099003|56012099006|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: Sl6C7xcgY7AagchqIQ0IigrDKByn1wH62rgcH2cXZZ+Wpt7cnKQlPiSb9ptLt0I3PqX5K/FXCQyCKIR4i/5iY7qRviP4yqJj9Y6Eg+JghtJibuA95kyWIdVgUrQ4QhDxfOVNTuWN+H9oDx5sf6mpws1ucSYZLSdkAFAfpVfn4rUPbsdnM430ApPAtmsD5DZkKux+jLd8Mb6qKuG8rhOZuKwY5egWrKS0XS4yCTwPF+QLZG2XVbzudUg+skFnWO5NmwQRbUGnWxnBguTYkfj5E6oqHKzrrZhbZmHYln2ocSEsGZHGkgxHxy3p2D3/yut+XjrW+oWq4N0qhQSBqadWLZa2CLu3D0FN8gMWvEX6VxQNf9eCQ0HUuT4AjXeU/6F2gX4i7hpjfki4/ktOTdl+YrGH9mpE+Nwuz5hqsi3XPdUGwc5uNBhrtTHKWiHilLXVeC5fQEaXs5+VykrxltHvVZKrT3W83Ta44fnY6iqzBkkBpCywuiqdRGpxJj7nUy4OltY5SdwVShycBWHCPvVSFWvVpQ1qqbTcO4PO18kIzsxhbT342GlbVyx3CnszB3B1+QHKj2/IqBD0LNxV2hha00euHeEqMPkA75Ml1xmUvIQDnaqY3s6GCKhQNVbfD4HxyvhrCrWXY8rpdKEm8Q3G7w2R2UtGmODWPOIWah4Hzgs= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR12MB9411.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(10067099003)(56012099006)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CZkfSAlHZEB8xXbxlqPZSca3+QM5ljWHTZxI5oUt/vWR51P9iL8G02qqrTpP?= =?us-ascii?Q?bsyv7kPVEgndL8zzH5fYG/2bhD7EIcbIpatEQ9r7FvT42QuAzmbL9EGLfh1c?= =?us-ascii?Q?hIIdc1lSQLbWf788UGQzu9cIfl4zxyv8smf6kH9cXNtRrp4m9f1kuasjkuFh?= =?us-ascii?Q?eXxE7Fipm7swz+zJHPB3yXLqX8nXQyC7/uqPfhV6TyU+YHigWY3RozTmGIaM?= =?us-ascii?Q?tAefd4sEzZ9lypeSuv9vJiqUy92twjeZxn0n+I4W33uSdf2Rq+nQ5zZKR2/8?= =?us-ascii?Q?eDN1TvsniTQSD1uufB7auc2QLum/kWuGMfgKjvZExU+wM9bll9bFdHGgbUEH?= =?us-ascii?Q?cW3oAM5hy+OdCuHs2cT2N78rT+gSpOPYtrhl5IyPl62WUBB4OcC2+z2s8iWy?= =?us-ascii?Q?7jAZciajAuJm46hdtewbSX7wZ6bSHwkAS59BQY8VxSfhxxzK04PWRCVBQWBt?= =?us-ascii?Q?N3OrfUJDatqpuUB1RUfjhJSPAN0wa7iJONNmuyegRKDurpMRwo2eESq/HlgL?= =?us-ascii?Q?s1Kpp9r3Fd8/XBYcGI+SXxQsrlmo4MBFCC5Mx+QMemliSteUUcJ67dqta1m+?= =?us-ascii?Q?4ArFsA4Pvo2eJ81BjF4jGiDn7N6shdJiR370jXM/GS3ic9HbrfLe1fupgj6c?= =?us-ascii?Q?HNYt7fk9PqyYy2pCfWgmXHwmKT4MDerrnaWS3nU/lFep5nMtaCEZaLfCgwW/?= =?us-ascii?Q?Sm0ZW0OwStXz4nCWghw0zm+VyaxyQZerZbAY7DrW0lxsKoulGvjQEwPdVcv0?= =?us-ascii?Q?XOkMO/yJcppkg5wjBUGC8+EJklF6tjA0nu3aIA08s37gAueH0vmULLVHHwPi?= =?us-ascii?Q?FNviw8xEeLAqtFw/hMHkhp5NYEMOdgiPtdDRFcQM347rMJOjvuhGg1buzDGj?= =?us-ascii?Q?fBA7H8jgT2YsAJDtP1G61YySG+UAjyDQ3wQS32bpygU52rrRRzVaCJbHH4JQ?= =?us-ascii?Q?xUq9RwfSmd2aeusmHSwKamH8Br5JEIVzGYVGGp/o4Fkm2pB/LITRWkZPwo+A?= =?us-ascii?Q?8KXO6Kse8ySCV729pzUwhH/6oAdMh3qFKjDejN+xfEGMHOzHOG0S/UZZ92A/?= =?us-ascii?Q?xhuJ1V3PB51GUtTsN/w6SE6Jq4XbLxN3OpuDbxQj/SlJ8GrtjYIoNoWnX82m?= =?us-ascii?Q?9soQgizSGcUlmEhv/EJWMYF6h4ttaRcAiB09b6uBm/O+YV7i+w0QK6NdfcTS?= =?us-ascii?Q?zV1HbOPRdrpaB8OKcemlzr9zD4+0XvVfTEZL+QnrPtQLopX4bJWtx42JQOx5?= =?us-ascii?Q?WZicfEs6u8ivMGcDVz7zCLw0eeUIpIchYBqy7a0wiQLsm+qS8bVVELuIC8oE?= =?us-ascii?Q?4oxaxWiZXjL1JaLIy4t6QjP5VMH4XFjlFNRYhK/M02JdmVsi8mcXc7daPFhs?= =?us-ascii?Q?FSK+SvyK3vnPCi8YHmQ77VAPccyCu8rlE3oZUOdKYDX5uV5164bvPHJrq0jG?= =?us-ascii?Q?gsuEm3j8zrOMi1YhjslpMJYg/5UV6vlgyvLlFlcHK6wkxCrs/ssQFqneEz+P?= =?us-ascii?Q?mCuokazo56AqLTtVjKuYZtRrNS362LAhqr3zax3Br8FS/kBaHUSJNd9Hw+XH?= =?us-ascii?Q?dwf1heqhnozaMjtFMQtWbLBjHqUwNkASOyzJjw/1REHPiZJUWTDu5kFYk+VT?= =?us-ascii?Q?zd91DD+LUHQ0adkArr4f0Z+xB74CUV1TzZ3kEcq3y5pzDNH7kV8JV6FGKZ6h?= =?us-ascii?Q?yEOZWTidnaXi4sdyPSY/DeCyH6SWtGSAvuKZxxthHRxjxvAovCF7BIWQLKrp?= =?us-ascii?Q?4KQapb6AcA=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d2f2c361-53f0-41e1-cc82-08def82da870 X-MS-Exchange-CrossTenant-AuthSource: LV3PR12MB9411.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2026 04:53:31.7912 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: M8VH8qDDR+AgC0Ug6XYc6h3teYMfcVklj4tawncoCo2NSHyVrneDsF+9Bv9HGRD98EQkqZrJVhM/ijzGHhbuyA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9748 Content-Type: text/plain; charset="utf-8" The success or failure of pci_reset_function() is conditional on the state of the device, ex. VFs enabled on an SR-IOV PF. Therefore a driver can no longer infer through executing pci_reset_function() whether a device has supported reset methods. The reset_methods array indicates whether the device has any available reset mechanisms and is not gated on dynamic blockers, like SR-IOV enablement. Export pci_reset_supported() for drivers to use for an instant snapshot of reset support. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Alex Williamson Reported-by: Samiullah Khawaja Tested-by: Samiullah Khawaja --- drivers/pci/pci.c | 1 + drivers/pci/pci.h | 1 - include/linux/pci.h | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 06728137c407..0b4f13397da2 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -98,6 +98,7 @@ bool pci_reset_supported(struct pci_dev *dev) { return dev->reset_methods[0] !=3D 0; } +EXPORT_SYMBOL_GPL(pci_reset_supported); =20 #ifdef CONFIG_PCI_DOMAINS int pci_domains_supported =3D 1; diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index 4469e1a77f3c..416fd6b74abe 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -230,7 +230,6 @@ enum pci_mmap_api { int pci_mmap_fits(struct pci_dev *pdev, int resno, struct vm_area_struct *= vmai, enum pci_mmap_api mmap_api); =20 -bool pci_reset_supported(struct pci_dev *dev); void pci_init_reset_methods(struct pci_dev *dev); int pci_bridge_secondary_bus_reset(struct pci_dev *dev); int pci_bus_error_reset(struct pci_dev *dev); diff --git a/include/linux/pci.h b/include/linux/pci.h index ab41a49f4eb7..4de21e6ac538 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -1474,6 +1474,7 @@ void pcie_print_link_status(struct pci_dev *dev); int pcie_reset_flr(struct pci_dev *dev, bool probe); int pcie_flr(struct pci_dev *dev); int __pci_reset_function_locked(struct pci_dev *dev); +bool pci_reset_supported(struct pci_dev *dev); int pci_reset_function(struct pci_dev *dev); int pci_reset_function_locked(struct pci_dev *dev); int pci_try_reset_function(struct pci_dev *dev); --=20 2.53.0 From nobody Tue Sep 29 05:34:23 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011013.outbound.protection.outlook.com [40.107.208.13]) (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 EE135395AC6; Wed, 12 Aug 2026 04:53:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510430; cv=fail; b=DAgdNDP9ql212nX9ad4QwhaYiRl48Eq2Hjqmqw61JtL1J00o1OVVclc45OvvUAEPT251YtlBRX8u2lI7i0mpUw0PN1Awuu5Cr05kog9X/TZIoK4bNuFQdOMYbIj5lFnF7Ca09lRLM6/FTt5OJa1FfBG29BV1XFb2tGrRG1wMWMQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786510430; c=relaxed/simple; bh=jtHFF4Wx7CpwHhOlos1Zq10Jj+hCpLJzLgDFe/rpYKY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=g5us6R73+bqrmE6Jzg7W7eZkKmws5U/0ydDWPQAfntQn3Q2dy0mEqRMOnbEIYtJ8ccdCOkLa1IU5JuU4+nZrMvFl5oqptK3YArZGSaT/SRQb14YhcBecxKLy8sBRJK4htdioC7bwbpxEo54Fquq/7TxzKsoWfBFyGzmP1f+f4OA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=C0ERgX2Z; arc=fail smtp.client-ip=40.107.208.13 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="C0ERgX2Z" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Bp/Cw1jD8TACBL7EbdIQlExcBkSB7fIsFEZd2MnGawRBXQjaCu19TB5U/wXHVredcMwT6F81q1Lw0kjRRHKvM83oajQimSRkcdveNl6hQZjyD8BO07x0xgV+wW7NuIjtCjeG0Xr24xgwGaByY64Ctam3OpdywfuadE5mPz7VxhoBCcLpmsuZR4aL4lBsHWxLA76kLdDQnLtbG8C4rfio7ZSr1+hdsU1ZEwAkd1X8gl1K7+zM421Q49G6SSGaTarwejZw54+8UVeRnE0ahmq95OI7lUFfgs2Y8L7mQZPowtx/PsShdgYQfNYKdV5XhXUzHjFxxVgT0hO+6kee3OSMqg== 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=W25Qjhl5htoEvXWB8dZFHcrWtT+sG2NlcNZC9Sm1Inw=; b=oIeNIl7n+XMVIsRuKllBmOhXehBIeEQ1S/1CTvEAb1CMoLp5ZNekIY2Exl6Z6cXSQDxAmm83HJH7JWHUoxHxSO3CpZQPDI/wUR5m2rXqoDopmEWYK/5VhEZ9bp5wIdOhDhCMbG/SbJiDNlBRcCPSF2c2Jfzn0DH5VYhQS/fRfw+/6X/Ag7Nsgzsz15txl1fTzCQIgL4OJPix6Sl2HtUadMBX52klAGzvrDZh0Fo/Y32LLbT2Ea3cYcROmNAHIPAFq2sXOxvmP+hpLZfNl7LPG7Zzsh6DE1V6gLBw3BVPyVJQEqRQ2G3M/SLUxqAfaa5cB0b9RPCzKhm9v2YT7SQPcQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W25Qjhl5htoEvXWB8dZFHcrWtT+sG2NlcNZC9Sm1Inw=; b=C0ERgX2ZUO6FPzbKxBhHkbbaKQFUNVTG+HKrBRxF8W1iJFyu8bUyDMeHQti2OSQBKuPnsADvk3XgQCMMmcDKL6CxMfyO2r8bJMCX9xRfg9tPMhUS0IyO1b8jrBr/rq7SIn2MLnJLnFgjRXr69u3LA1qhUcQV5hg4HPY7BuRabFjkSiBN/WX1MHRPyAUGeoWwxC3TLsy9XhVJxdgtPtaxGFAsLUoJ5n10LJgpzW3sYtWddBiJqrd3BMMFkUuoi7/p25szl0sIAt2LFmOLg5nddE5LyEdB0qKNkUo5+o1AuvNyfY1G1yIyxODBZ+6yNgzmCZ2AWCRvSWvsHm7t5ZafpQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) by DS4PR12MB9748.namprd12.prod.outlook.com (2603:10b6:8:29e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.12; Wed, 12 Aug 2026 04:53:32 +0000 Received: from LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15]) by LV3PR12MB9411.namprd12.prod.outlook.com ([fe80::98b7:86de:b69:2a15%6]) with mapi id 15.21.0315.011; Wed, 12 Aug 2026 04:53:32 +0000 From: Alex Williamson To: kvm , Alex Williamson Cc: Alex Williamson , skhawaja@google.com, Jason Gunthorpe , Bjorn Helgaas , Kevin Tian , linux-kernel , linux-pci Subject: [RFC PATCH 5/5] vfio/pci: Use pci_reset_supported() in place of reset_works Date: Tue, 11 Aug 2026 22:53:23 -0600 Message-ID: <20260812045325.2733631-6-alex.williamson@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260812045325.2733631-1-alex.williamson@nvidia.com> References: <20260812045325.2733631-1-alex.williamson@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SA1P222CA0078.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:2c1::25) To LV3PR12MB9411.namprd12.prod.outlook.com (2603:10b6:408:215::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LV3PR12MB9411:EE_|DS4PR12MB9748:EE_ X-MS-Office365-Filtering-Correlation-Id: 7e610242-d7ce-4f32-ee93-08def82da8fe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|6133799003|10067099003|56012099006|11063799006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: +l5s6z3qJEBL2W9DybxJZa8L3Suzp6EdS9f+p0yhZJ0ygLwjAMD4n0dnkvwqNRbtcVAuxx49MO6d5hRR53ZxuNB+2+qE+OR2lB4DarvCRScC1xe9BBPfwG8MH9SLIoM77iiTRTg9ckXg/XIN0e6sMSor8HHLHK4+eB1E8EpttxERxkhtZyr72W0bctYyFEOcTNsli1l8v+xtB+j5p7xZXegogKwQdkAjLpCC+prlGgRNq0S2c97mdODKlubGkECEmTUYTlcF5Q3OTIU2epXgRaOM8iCJQuWS7XCukUkbCBGmrmyDmooWlEzRa8drSqq2QrqT5dH7YndENDWs8pTn6sdv4rfNrD3zaAcjuUBxQAcBi6le8UnQIZVhjAEhb0HCD52xJUPAR9d81MMVPUYEzQE9SJ5GiU5QmOd+dwR4svRimp5HWcqSKpjFVBb0taVXKMt9eLnlp4YUma70A3FrNCNO9efJ5XzMkS4y6+17brXqouePpcT/texc4kaw+pOYEtFZeeiu+osxJI9WkirWIFg93mpkZplMGzxwA5IcXfYexsrFpQ9uBJVWL9KKoLNEF/oNqZi7MkTaEi6zzpTBKBZYKDGeNR//3ON1jjeQ8ry6/rIr3BOX4kroaAKtTo8ivDiZNrbwCj5PSWmgidhbWmYq2PtsYI8pbn9k72PkOhE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV3PR12MB9411.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(6133799003)(10067099003)(56012099006)(11063799006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tiFuQge3xf8UjBlcK3KVVGt8w/u3q98e3kBvWGOOLmOfxBqnjDhUXGEW3gjZ?= =?us-ascii?Q?t0bXO8X78lbDE94l7XLGoxezGrfQYtn9tfNgMfmpJRwm7vgfAwZAZyvlgMht?= =?us-ascii?Q?bpHA7NKfodETPiTrklG+jmpS8XhvdQI156VZmr/iENmcsagTtAk9GL3Ps3ED?= =?us-ascii?Q?EtvTZKOZFjl3MF7SZd7gmOjeHl7bjhYE9+wNbjwzoFecVJ81iSmgfOzydvAY?= =?us-ascii?Q?evIRgIKPe5dsDS5sAfD8e+rHF8zrbHX7ADn/OX9nKyJeYlHMuSf2I2gri2uU?= =?us-ascii?Q?TbUtCdIbg6nHXX94xx75gmkPs67nwpR5eIJUZH8tb8NoH3qTneecTfta9JCJ?= =?us-ascii?Q?WnbBB7j7UhWg8vuUnHXhwQq1esK9QovSOqE9qels1Ve4JaLF1RpufpGSs1gn?= =?us-ascii?Q?eVOBsH70VSl2Cw4ILhL+ZEHOxUZrD4oZVuZbLl6vtQ2Lc/lD2cqBNqMxvRDc?= =?us-ascii?Q?Wt3EbYo1kt7iOuknXQeePR8mgdaM3DSsRYbmvaUoYlGDdD9sNJevn8pVsUp2?= =?us-ascii?Q?S0x+Xljc7F3VnWiwSoZSFs2rgNjFDWA+x3qP/ckh0NxGS2GcGqVWtyqkcg3h?= =?us-ascii?Q?36zAxt0wb90cHBha/R5hbe74LCiMObKeVKUOCNvPh6GlRCtZRytGg7sbABVX?= =?us-ascii?Q?t/EfVrXvPMql3BF4vimSaip/j68L0BdjeHrJfxNv7TWbyBiEG+H2U/LBSGH7?= =?us-ascii?Q?y5Cj9wVVMtW+OUZ1BPXVqCAhcI11+SxoNnK44pA0CepAZyG7ldp/FJdHbGJu?= =?us-ascii?Q?vNLfLZavig+v8MWKq7C6f8OJlMkEyWxI23CuG0dpDE8WcxlkIPKl23NnfPv7?= =?us-ascii?Q?wOg/So5/HYkMihnvg9l+c7zj72mZaz5DuD95/JdhauUjGmKfR8YyLH5ElSYd?= =?us-ascii?Q?GiyJPi2yMZsBQo4obotKqRP6mPf1pz8XHjEwe366YF8vNoMgEby9UWhwQ0/G?= =?us-ascii?Q?tHicNazQUJtxWv7HX5DCR5fjhXEHvHNqDSHW6U4+DdhY76jbw8GvSpnUY+HM?= =?us-ascii?Q?R/buqyv0k5afg7TdKluw2XRq2GkR9S/pmEemcawzFjDLoS0Y+aD5FnTacMjx?= =?us-ascii?Q?mmiAACKTodmPziTGZhPW0e8knc1cPgJLK1Wzt6Ao/T6Vo46NioPc4dzTBfvv?= =?us-ascii?Q?iN7v3NYDt4VYapz6ROJGi7Kdn9ma2/hGGtF3/MUtUgFnMYAFbOYmUOeAXAKJ?= =?us-ascii?Q?A8MgwrC0noHmxzXY+hE6yubu1v/Gw2entOO18iSG8Gw8ldJqAxCdlsSQAU30?= =?us-ascii?Q?f0bnReDkc0UkhlpnAzSfGGRuAq4LGF4mFvrXsrhcxpcswXXN0BG1eJi3BIPH?= =?us-ascii?Q?MBK0kKt9OO1ASoyAytz9UCM6yW6pXr20da6w9J6pv20ffjq0ubw2oIWkh4jJ?= =?us-ascii?Q?HL1v4MgGJcjOT+rnIymcG1qpiFZDcoo3qMt3SkFgVpcLSWFvtAqvx3RKhUKA?= =?us-ascii?Q?x+GLaDTUC+XS/mxItlaEot4Rn0dgcmQVMFp1V5AXxZDfiksF9DnHmVsWu9G1?= =?us-ascii?Q?GnJQgdnc8Nzl586i5wposCmwo36kpMA8X/T8rU73TNFaLpcObamSGcg4MqKm?= =?us-ascii?Q?qYaZ8zbP/UI+ZOxVPP100Kfuah1lgic2bWbVaHcdW/F10ekxowIwAtkARNBR?= =?us-ascii?Q?tK1vFbgJpsnMfstJePryywvq0UxdT3nfrY1t4Xls8bs+crnz5QNF0EZQKJcj?= =?us-ascii?Q?60t1uGzMBmegkO0AyOfa37XH2Lqy9CdsA+4fg6mm3CHnw+7RJrUxNSH6pwog?= =?us-ascii?Q?GbHfAlvGXQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7e610242-d7ce-4f32-ee93-08def82da8fe X-MS-Exchange-CrossTenant-AuthSource: LV3PR12MB9411.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2026 04:53:32.7218 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bq6G06SZIbOlNZ9mEQK//Qif+BI7u99wmAM/LaTw8ezNlKC4pRwaQO70rfzvDSs6cQ3mCGqSR/mmmY9nk9ujLg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9748 Content-Type: text/plain; charset="utf-8" vfio-pci latches whether pci_reset_function() works at open device and makes decisions based on this latched value at runtime. With the introduction of the reset_method pci-sysfs attribute, this flag can be made stale at runtime by administrative action. Further, with the SR-IOV active VFs gating of pci_reset_function(), the flag can be made stale via more subtle dependencies. Drop the latched flag and rely on pci_reset_supported() to indicate whether reset methods exist for the device. This is no guarantee that those reset methods work, nor has the RESET flag in struct vfio_device_info ever been a guarantee of VFIO_DEVICE_RESET success. It's only a guarantee that there are reset methods that are applicable to the device at the instant it's called. Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Alex Williamson Reported-by: Samiullah Khawaja Tested-by: Samiullah Khawaja --- drivers/vfio/pci/vfio_pci_core.c | 9 ++++----- include/linux/vfio_pci_core.h | 1 - 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_c= ore.c index 956a05ca12e5..8e42342d56d3 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -609,7 +609,6 @@ int vfio_pci_core_enable(struct vfio_pci_core_device *v= dev) if (ret =3D=3D -EAGAIN) goto out_disable_device; =20 - vdev->reset_works =3D !ret; pci_save_state(pdev); vdev->pci_saved_state =3D pci_store_saved_state(pdev); if (!vdev->pci_saved_state) @@ -766,7 +765,7 @@ void vfio_pci_core_disable(struct vfio_pci_core_device = *vdev) if (pci_load_and_free_saved_state(pdev, &vdev->pci_saved_state)) { pci_info(pdev, "%s: Couldn't reload saved state\n", __func__); =20 - if (!vdev->reset_works) + if (!pci_reset_supported(pdev)) goto out; =20 pci_save_state(pdev); @@ -785,7 +784,7 @@ void vfio_pci_core_disable(struct vfio_pci_core_device = *vdev) * We can not use the "try" reset interface here, which will * overwrite the previously restored configuration information. */ - if (vdev->reset_works) { + if (pci_reset_supported(pdev)) { bridge =3D pci_upstream_bridge(pdev); if (bridge && !pci_dev_trylock(bridge)) goto out_restore_state; @@ -1098,7 +1097,7 @@ static int vfio_pci_ioctl_get_info(struct vfio_pci_co= re_device *vdev, =20 info.flags =3D VFIO_DEVICE_FLAGS_PCI; =20 - if (vdev->reset_works) + if (pci_reset_supported(vdev->pdev)) info.flags |=3D VFIO_DEVICE_FLAGS_RESET; =20 info.num_regions =3D VFIO_PCI_NUM_REGIONS + vdev->num_regions; @@ -1330,7 +1329,7 @@ static int vfio_pci_ioctl_reset(struct vfio_pci_core_= device *vdev, { int ret; =20 - if (!vdev->reset_works) + if (!pci_reset_supported(vdev->pdev)) return -EINVAL; =20 vfio_pci_zap_and_down_write_memory_lock(vdev); diff --git a/include/linux/vfio_pci_core.h b/include/linux/vfio_pci_core.h index 9a1674c152aa..6fb599ec2919 100644 --- a/include/linux/vfio_pci_core.h +++ b/include/linux/vfio_pci_core.h @@ -121,7 +121,6 @@ struct vfio_pci_core_device { /* Flags only modified on setup/release - bitfield ok */ bool has_dyn_msix:1; bool pci_2_3:1; - bool reset_works:1; bool extended_caps:1; bool has_vga:1; bool nointx:1; --=20 2.53.0