From nobody Tue Jun 16 11:17:52 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011008.outbound.protection.outlook.com [40.93.194.8]) (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 244E017993 for ; Sat, 25 Apr 2026 01:15:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.8 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079761; cv=fail; b=eMO+GkoMD/wkA6RHBczNp9PUZFCc8gB133Yn4Ethu5740HDIWGV77m5mHCfffHuAd+OaE9PuFQyT4NFoa/IU3oL32J9lOEUEs4mOn+x1jvHl47Ecm9xjTqcr8UzI7hFshwePVdqT/0v6pjvDmvsQxkvBoQNLTJounlTHlnAd4Kk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079761; c=relaxed/simple; bh=Ji+Me6Ebh8qx3UDXUw+EU1E2Bq6+UamXvtty1jyNN+M=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Xjukr2MarTHGzZRQMmatc1koI+j7uRp+UV83avulGIn0iFp7GrqY+Z9ztK4KW+diTx4MXUDUBwA+ljAwcIi1QNZXlYcYAAN5k1TeaoZ3GNQDEM/xmP1VgvgAlmFuSPYY/tytmQFJt0jR0W5WZGSWQfaRPT811i0PgPGHovpCVGU= 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=LxQqAM9w; arc=fail smtp.client-ip=40.93.194.8 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="LxQqAM9w" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M2plIX4IUV0V9ylkL50nQZYxW6PtqrWQPRWnV2NjyTRvuaTA3X9z5pIDS6+ATJ6zFT44N0ZdpBSA0l5lg+vZp4FBv9bSC33z5rO9eTmirnhkemAGRKSOWyJJWlhvWAL4pXAnW0NywNUQqy9pc16Z/DnOT1A6c7XJxqywiAsz10jgJezeosuF9pwHFDIsmPVcKCisyKQvSvwgrKS63KPj3C9WNa55BgccsP0c1wnC5lpko1P4n8jk3D5VYZK0+0x0+bs+8x3jctBFwFKCb0Vnuvii0uw4sfjZz7ZJ0d2iAma/GWUOyP7mzwrxJKhsjGmBuDYPdmWDLRoxFfXBq/v3JQ== 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=gxdipz34r/Q6s19GQI8j+GedKjPLy9C6Qz4s329AXPo=; b=fWdDPYSVR0HOeQcTJ9O8eInShJYg+2LgU22NTHY2bXh7PNHYxjL20r+Fex8Czm6WHe1XtheRcG/n3pVQ1uVmxbQ5EGid5AWvvEwgCs7TDajTvpqEKE2obwZaD++D4u0mZ+BkO+NSqp1LWDJ8/VrBMBoJJgLmzmJGJlzDThLEdoK93awNAlTSXhBPRNVar5VvJlI7WfYcNfppBTnktg8qMbmNZQfPC0Re/dMSfYRCqzWPIA20xd6pEZF07zb2eYuIpLmtnTYKNTXXMdst7mi0M4uZqDfb6/1gaNsg7z8011AZVS1e6H0WC4t6gJkhmWy+IxwXcU1TFlxnoqUEBGcOqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=8bytes.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=gxdipz34r/Q6s19GQI8j+GedKjPLy9C6Qz4s329AXPo=; b=LxQqAM9wExRF+zMNMO8fKZqC9HQUSe9Qe41nO+WA+C9KLLZacJjXTZrff5ena10WW+CtrqYf6YktJ6uxlWT7QOwjY4PUQTuT37T0cEaNayNPIbBeSK6HM44B6PxFHYapQu4fSJpDQBvIyPX+/sewRWtEn6Dc/wiKsnk2B9MGm9C4y7CFkzJYTV7EcXmW5MADcnO8HVwxdNPS15ZHa/vtGnHgNz4Tg/GdjxRvxFRzlmzchn9cnB5n8odkhkpFc5c0Ap+8ulRVNFGhJb4+n5T2XnsfvRWa1D6FXTdXAmrdo9BjjjSmYdV+uTSTZB17k5nIEha218vTfGq3ON+84iM0og== Received: from DS7PR03CA0322.namprd03.prod.outlook.com (2603:10b6:8:2b::29) by MN0PR12MB6080.namprd12.prod.outlook.com (2603:10b6:208:3c8::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.22; Sat, 25 Apr 2026 01:15:51 +0000 Received: from CH3PEPF00000013.namprd21.prod.outlook.com (2603:10b6:8:2b:cafe::2c) by DS7PR03CA0322.outlook.office365.com (2603:10b6:8:2b::29) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.23 via Frontend Transport; Sat, 25 Apr 2026 01:15:49 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by CH3PEPF00000013.mail.protection.outlook.com (10.167.244.118) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.4 via Frontend Transport; Sat, 25 Apr 2026 01:15:49 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:39 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:39 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Apr 2026 18:15:39 -0700 From: Nicolin Chen To: , , CC: , , , , , Subject: [PATCH rc v8 1/8] iommu: Fix NULL group->domain dereference in pci_dev_reset_iommu_done() Date: Fri, 24 Apr 2026 18:15:20 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF00000013:EE_|MN0PR12MB6080:EE_ X-MS-Office365-Filtering-Correlation-Id: 892d456f-04c3-4e07-c3c3-08dea2682ffb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|36860700016|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: kIyZoUzbUSYhZQtNZwf4RQ5ruQBGwi7sWmOFRz9UHqZfZY9tGl8RIRx3DcpgSVdJG9NgsPHPn1t/KtHWYU/QI1arHSdyEjIFRntK3lPM3eyuZQpUYWDMB/KLi18BKoU0M1gSRUnG/J0EYv4j6nanijR4rUgDaFpfoyJJPfS3Fxa6os5HpGtmDYZRM7eW8LNUleT+g798ZVNpuNLjmyd//y68MR6ToA39iT24hO4rVYAH9ETl+2ow/4zSw51lCkB/nvktuSGUmuco1Str3XTGfhw9EKZanlHwSLeBrZqtH83C4SSITDByeRb1fQhwL6VSyfxcra6+v8PZP7P2WckdsQ9ke/CBVn0MwQGiZvaFTSID3oQKmlTg444ccaqfqrZKIpHm8zMhdgWOhQh8Ut9canXjdmkkoGzJ8VOGZkXDT2aLqqjw0V15xNnDn9kcFhoa/1DQxz+3rv/AmK/sZsptMXjoui+3gbuvKAt7UwJWJ2F9EBToZPPXOLRUjm2ElxZAXtM+2i9hXT++pcPqyaFLZy8JVU0gtcMi0vBDgBbJc9JnqMVEuYZH5kYeq/VpvF+I8W2+UKX6jT/YrCVwsACMftC93ccCysgk+yd7HR8u46RloLXUkx+QXEC3FY5ILuUvZKZlCwPrdzsfkvUABjQ3ZOjJlV6mY2JIAhsvzEkOKZ4hiewNu3OM/D8b7M3iO4wSEa8BamNnWqRw2S0FeJtGX/vh/hSduGqNqIsk7lF37lXyy+VpTPah53W8JGIOOwubtJ73uyjqhJH15qvpHzX6bw== X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700016)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: tSbMHudK9dAqAH5YJkPyGiHc1+blr4ubfTClNrjBU6ze9CBlxmGJW+5/dQZ0OjfTTP88VhHwvH3v9ppzbCX8UPHNNnX4qZJG9LjrHkcuPLJfOg+2DSLeH/9zll+cVgw41RZu6clh/ypNXGDTbwZLrtT1SeVr8vVRtEOloAdRDwBJ2Joj7W4w4XwhLSFTfnBZ/NvW/XG2hw++81lvkVSEYUZbXl5RmxvMWCbEEWxGD6UjXTthCA1kh44wOwpCcA89c1oGQOACyH46qgP4Ed7jY137iGJDALduGbKF7OqTQBz0ydx6uaU70RQv5nx720aVKQpMFoHgMtow4a2rKZc52xmkJA4fs72SEG9KoiAQG7rxHhoeUhLpuC8LOkMYoN9oB+wJ8z0pirb0sAaa8sXwFVGleF2Lp9vZBeyP1EYAg0Cm6kTxaMUG1pgRoRNeKb37 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2026 01:15:49.7017 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 892d456f-04c3-4e07-c3c3-08dea2682ffb X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF00000013.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN0PR12MB6080 Content-Type: text/plain; charset="utf-8" Local sashiko review pointed it out that group->domain could be NULL when a default domain fails to allocate during the first probe, which can crash at domain->ops->attach_dev dereference in __iommu_attach_device() invoked by pci_dev_reset_iommu_done(). pci_dev_reset_iommu_prepare() is fine as an old_domain pointer can be NULL. Skip the re-attach in pci_dev_reset_iommu_done() to fix the bug. Fixes: c279e83953d9 ("iommu: Introduce pci_dev_reset_iommu_prepare/done()") Cc: stable@vger.kernel.org Signed-off-by: Nicolin Chen Reviewed-by: Lu Baolu --- drivers/iommu/iommu.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 35db517809540..00b6a33515398 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -4025,8 +4025,13 @@ void pci_dev_reset_iommu_done(struct pci_dev *pdev) if (WARN_ON(!group->blocking_domain)) return; =20 - /* Re-attach RID domain back to group->domain */ - if (group->domain !=3D group->blocking_domain) { + /* + * Re-attach RID domain back to group->domain + * + * Leave the device parked in the blocking_domain if group->domain isn't + * initialized yet + */ + if (group->domain && group->domain !=3D group->blocking_domain) { WARN_ON(__iommu_attach_device(group->domain, &pdev->dev, group->blocking_domain)); } --=20 2.43.0 From nobody Tue Jun 16 11:17:52 2026 Received: from DM5PR21CU001.outbound.protection.outlook.com (mail-centralusazon11011029.outbound.protection.outlook.com [52.101.62.29]) (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 5699015E5DC for ; Sat, 25 Apr 2026 01:16:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.62.29 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079762; cv=fail; b=GGMcUzXpVGFO053wKaLFPi4ReRhuV2D+HuncQGSIdIKatHJhFh+IfqeRN63cVWcb94pjnh2lr7SzjroF9I0l7rJuwAed5tFoZ9YtKR4uBAezhLbkuHUOJCHUs2QGPB0q09tLLpK69+ukxU3ZaS5mZyOkM+J/V623CMJOCGbFKPM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079762; c=relaxed/simple; bh=Vpw50taVDgVyY56vvSdGxjWKiis9sH6bkTDwjUKRZmc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Blfor9fkm7GvROjNWbrXIaqJOWMoLfKqkTzy1Qoe/0ThTlvzhqw3DRSVEhroHgWtR/EC/5UEno6ENnm6d8WF3F54/E7q7ddy/cIN0mCZPKEBS6CGWgf7pwiBNL1OdrpKxyEWIGCMH2Ie8hmxmY0YHusnWvWbb3v5j47THDMV7LA= 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=PX2eC8TR; arc=fail smtp.client-ip=52.101.62.29 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="PX2eC8TR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=a7A422wj58k3943GPcnUYH2V5EHVkoC3c+o4uNr4U+CMnMImOWESk5UdiUxc3LopGVGlIX7g1jYu0jxeWvnfVQZjXk6SeQdYramYGM4H7CkZ47zcczWob+m7j8UeohBD3QJvPIFMhT/qQMCiE2Txcy6PJ+qNTunQ9Bl3hFa/3y7iKunTKo94PEaZHDdCj9O1iOJdPEZm4C+0zv/nAh/wvf+LZdapNDthvVaDSaEJUyPNIvOabo4SxFVIBzFo1OuYdirh8FSv4TfUQijdMprDTHix0vbBkel3SAbH9SrSG6XCgGFcpwplM7ruxiHmYATug3pKWZ4Fc1MyR8uBF8eyWw== 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=bf4+jppRrUTWNCubeVGZUBAuPPWXYQ/WJUm1LkedghY=; b=F5JCafkNRofgKWNtR7F6tM15Xp6ECNkuZyj3bVbGAQXb+os2WfMMrAq6uS9n3Ce53inwfsYgFp462PUJIKGVFesbq0bgOHVF4wr6GRCvoMxs9+e7T0jRzakE0Y1L5FHrdeSafHnj5AyuGO5uEy2iHzBw+YyKF3C9dqIpgO9dcpTTJIyifzGWgyyxC7Mz7VX7Pzzd/1pO1v7qbtjJwCn686HnCOCXHDtXdZd7Gpy9wCYWJSumWKYN0/KjTMKD+jYldj/V2LNFC5jlnD9gtt2D5ZLqsvan3tSkZf699QQ9vR95v02fz8utyKznjeEdjsc/XGl6fZKZ5mwh9U8msN8w3w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=8bytes.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=bf4+jppRrUTWNCubeVGZUBAuPPWXYQ/WJUm1LkedghY=; b=PX2eC8TRFHAyrfSFAikfSFZ8DQB7aMiasvuP40o1CJxZJlMtN+PNNLgF3h5WAMI2E9FSJL24C3+nHSeWuZNPSPGMTEAw99s8BpAISfEaORsSXpZwlsey6T4VMzcn6hgZw4e8Ha2iv2c+bFlYXlxg8ALXv5y7sKfwPT1FZOJaOaRwlE07eoj20czckJki5UODTujtJPV6RptghPp6xW6EQ3lHP+bojEGspKzK0TC3ZjVmrP3rwBxKNPJeHFRedu5/O3jBkg6v2J/rnmAOA1ttqB8ILzSPWpcMETmxz8Xh9NODbcuTCRoZpJ6z1Ynb0mM5sLe/8aM+5Qn5yVcQwPr7OA== Received: from CY5PR17CA0044.namprd17.prod.outlook.com (2603:10b6:930:12::31) by BL1PR12MB5948.namprd12.prod.outlook.com (2603:10b6:208:39b::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.22; Sat, 25 Apr 2026 01:15:51 +0000 Received: from CH3PEPF0000000E.namprd04.prod.outlook.com (2603:10b6:930:12:cafe::74) by CY5PR17CA0044.outlook.office365.com (2603:10b6:930:12::31) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.23 via Frontend Transport; Sat, 25 Apr 2026 01:15:50 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by CH3PEPF0000000E.mail.protection.outlook.com (10.167.244.42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Sat, 25 Apr 2026 01:15:50 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:40 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:40 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Apr 2026 18:15:39 -0700 From: Nicolin Chen To: , , CC: , , , , , Subject: [PATCH rc v8 2/8] iommu: Fix kdocs of pci_dev_reset_iommu_done() Date: Fri, 24 Apr 2026 18:15:21 -0700 Message-ID: <99806e050a3d52ab5fa33a4ebc75a8968ccedd76.1777074513.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000E:EE_|BL1PR12MB5948:EE_ X-MS-Office365-Filtering-Correlation-Id: 329939b9-039c-4410-1449-08dea2683078 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|376014|36860700016|1800799024|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Rl6CNXHqqJYCIJcfC9y5SLUtsx4OjqROzsEdxqCczyhtY7nAcvFwx4cziQUTOcB4gHy0EvGNfgkaWY4wKhPw2KNuO4UADzUC94sdJ0m+gRbE6s2j/ThyusAjug//fWeS+uSYBWoYUvlLdF7NA3iikU7x6ZFu+Uq/Gv0z3byDW7KEqOQAf7d2jlf0CgOmswGhrk+5xUT15lT6R2W1/hl2fTJZieobn79Mn6FT4P3krKR/j6mmzraoYSX3/oLjEUhnZHz1eVYgW66h4X5paHicqlVJljRtH9GfNTqwb+tQrwztGzkHmJLdBgkhmF8hLb1PvndXTxiDTW4xLVf63+2PNW+CYw7spdoMWItsjAV7znG9bNTDdrw0F3HWcv2ME0IyrsM0yi1rdaNjv7OPC9nfchDJtSm2N+L3TdjA4IMNH3Y3XKNxn9z5QnRJyzZHonT1+NtTVz8JY1TKcHrjSWhk12ZO3mQkg6h5dYPpeaTUz1+OSZghnCY2KBd37fysUnJpGgKnc1qjuz+6371P7woa7O+JhlYlpW6S5rkrY1DzL0VpTTo0G8EUMLJ581KmTRf3bxzVk/DdcpF+iySmdKxJEFvBvws8Kvj3Txtt4RLkwZlgijrFAqTjPfXgdhPThyi3BC5qNZcOQ5Une+EVJjfanTwzFD875fXy9E3AW5i8qJDmM9Sdu89s9+gk17ZatNim7grDZeBdsYTto5XlhjCwBfPkK1tGX3s98TKo47frVBfHDFiwZKSWgTopLRW56KCRr+sPW/dx8JDtE5kuT3/VLg== X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(376014)(36860700016)(1800799024)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vTF8W82odUKjw/Bv0TCivYBmvEh2RACPQaf/y6g7DSaWbqDcsKILhIOtejBGvvsK52UWNx83d9oVmhzMq6MSsHlkHtrw31UpHh2LhEkytUZq5yB3rGmC+GXB+ZOsjW4WAcL2K5P6WMNmdm4Gn/fJBhb87TTgEGy7H3dTo/kDQsjG6t3p8smLb4ylbZM8KVn0CHJ2kuAj0peebAwZHPjIjlT6DNe6JasCp0jMUad+A947Hgli8JJ+t7ONJhGfitdv5ilqOPHfLvKaWRPqCeMbElyTt9w0F4GvHgny4CJU3nWfuDPPtUONX+IjxdLxiKa1m96nq4u0qAu3VksBHnB67mYrbF7mIWmfqNoyDxpGKL3K6J1zYZ3YVp8KoPlbHGck88lTdHqSiTS1tnvLVzLYrzDbkehobsIyV52I+JOp/ANwDxwTC4+jRG4Y0rJE6N7J X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2026 01:15:50.5128 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 329939b9-039c-4410-1449-08dea2683078 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000E.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5948 Content-Type: text/plain; charset="utf-8" Remove the duplicated word. No functional change. Fixes: c279e83953d9 ("iommu: Introduce pci_dev_reset_iommu_prepare/done()") Reviewed-by: Shuai Xue Reviewed-by: Jason Gunthorpe Reviewed-by: Kevin Tian Reviewed-by: Lu Baolu Signed-off-by: Nicolin Chen --- drivers/iommu/iommu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 00b6a33515398..82dd806e5e6a6 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -3997,9 +3997,9 @@ EXPORT_SYMBOL_GPL(pci_dev_reset_iommu_prepare); * @pdev: PCI device that has finished a reset routine * * After a PCIe device finishes a reset routine, it wants to restore its I= OMMU - * IOMMU activity, including new translation as well as cache invalidation= , by - * re-attaching all RID/PASID of the device's back to the domains retained= in - * the core-level structure. + * activity, including new translation and cache invalidation, by re-attac= hing + * all RID/PASID of the device back to the domains retained in the core-le= vel + * structure. * * Caller must pair it with a successful pci_dev_reset_iommu_prepare(). * --=20 2.43.0 From nobody Tue Jun 16 11:17:52 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011021.outbound.protection.outlook.com [40.93.194.21]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62E7B1C84CB for ; Sat, 25 Apr 2026 01:16:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079765; cv=fail; b=n2t4C2qQjZGu3T+ub8dfbnHW5GTx1JL9FvdxU3MhRQ2QrYkUGJ5XeqqlOEhlgcj0KVAiB5iOqWn6MDFblHPbDybOmhvktTUMCP4NCZeLIHtnXRTacnrzR6yq3ec7gfkKP97GIr3sl7WpYuA44pA8ypr7Jk9FCxUcvbIeULgKy4U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079765; c=relaxed/simple; bh=NFYNyntI3XX98NrNPz/8vRwuAeAM1CZcnix6w7C74J0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=EF1g1kM1GYMRqOZGJDxGKQ1JmHJguXMfBgVEiAmf/W6jK69CIhKvtOXXcUOqUYu9XdlubXIqJuKCv5T2ZLJkwn+58Lxf6TkDcZeEL9e0BSWlNMx33AAtf7WHb22Cvk38HrKs1R03c4a6dfoMQYxkXOUMHhlvZbJ1kNQWPpR9jMk= 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=O8pqXJLv; arc=fail smtp.client-ip=40.93.194.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="O8pqXJLv" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cAdmu66+A8LGVwOPq0tJCKLTyLN6AJhULA8xW/grNLTSmK0xTQXifOnMBxa09tDUJVEHpyLzhdLPbcGWKO9kJbHIxSPm3fIoTRtx+vihnwk7hiqnqs8AyaD4sKiyFXVLWq7rJe4xfYI04pbu3IKqRqGghFy+mD6eOdBFkoDDWRRU6rPjANpivb8dLQmMhpMCDRLeaELbk9YStyjs18QDahltKVMRIukxFfP0VaGq/PiNRDLqbSEcCb74mYk0Fv1lscYR0KUKH/MFCBUMbfLmoE80a+j2q4clFN/sMoJTiovEhaUqNBfbRH6nR6bDj2cerQW0ZsOVbL+cKO9OFAKB6Q== 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=wDLzoTilpUgwVHEwu3Qi3SOflwdIfLAiRjiKNU0rq/k=; b=cs2a5yOOF0uWMr+dhk+uK2a22SmiDbRrY/N0FWRbTXYPX3wcxyd0ajcwGtPUXPGQVeZmRG9vFuxmJ3T89hSyG2a7WFtonjWxoTO+9rUUTDSBH4ZsoIYuNKPJA2zCQ59SVT5+YcpUl2vbv/qs4LeDzsWE/gPjpB+z6F1tC9L+qyOMWea+oq7lA4/2iJPpIQxSmZPzYA3+ELdASddsuxcTehgaXl1ftMhzQFSUfPbulQIeBl8Ny2n82GrKWnIDaDM3j6TzISG07RA3nE2brbhvdXzr3rOBGyfQRm23LG808dfrzjtvFm/9dBDRZt2BWPPGDI0dAYqkIucvZ5WHWWWQHw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=8bytes.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=wDLzoTilpUgwVHEwu3Qi3SOflwdIfLAiRjiKNU0rq/k=; b=O8pqXJLvO/bNfT9DXcP1Kq0zhDKVAfyVcFrqBjohPXVzRsaUK/VRa+E84lkHGyNw8Hlee+1JbYGtdLr1VPLmHr2H09yWTF1CU0gGlG0G/dbYvhUfhHpbpaLjU5JxgtH2dQMoeFiDsKzMc0JOvdElMlBUHY3RGQ3MgbrR8lyGI6QgjUJpHJuZUvN2Io63wv2SsCl1xVvvNkqYI7hDI33bBkUtFjl1gFAiCkzaTNliKCqqBhsIwTXtCgW01UpyV6fUjvbJqHbnyj6poNdfYRsCET/5e+TJVe3dEvmHG2XO7PYyLaxACZvxiY8/cg/d67rKa9OOFCITjSfcjUr8M7HYxA== Received: from CH5P222CA0006.NAMP222.PROD.OUTLOOK.COM (2603:10b6:610:1ee::27) by CH3PR12MB9313.namprd12.prod.outlook.com (2603:10b6:610:1ca::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.22; Sat, 25 Apr 2026 01:15:54 +0000 Received: from CH3PEPF0000000A.namprd04.prod.outlook.com (2603:10b6:610:1ee:cafe::3e) by CH5P222CA0006.outlook.office365.com (2603:10b6:610:1ee::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.23 via Frontend Transport; Sat, 25 Apr 2026 01:15:54 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by CH3PEPF0000000A.mail.protection.outlook.com (10.167.244.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Sat, 25 Apr 2026 01:15:53 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:41 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:40 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Apr 2026 18:15:40 -0700 From: Nicolin Chen To: , , CC: , , , , , Subject: [PATCH rc v8 3/8] iommu: Replace per-group resetting_domain with per-gdev blocked flag Date: Fri, 24 Apr 2026 18:15:22 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000A:EE_|CH3PR12MB9313:EE_ X-MS-Office365-Filtering-Correlation-Id: b5f1955d-3d15-4b4c-fcf4-08dea268327b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|36860700016|376014|13003099007|18002099003|22082099003|56012099003|18096099003; X-Microsoft-Antispam-Message-Info: RV1hPiKFXEFVZN0PGQFkZEeCRZZ8zshF/dLxHJYCWtEW0uLM7nG9j0p3qoqG0gp+5Ki27xJUybp3h++sjPoi/zt7j95zVhUSuGuCU4OGqUEmOMqULE+CZF4BRXTcIY5LddPjH+inMatIitRb8sSGKRsisKNL4HJNaPoXUTFUTgrZVkstqGYOUNd/cWK3fqFEYbK9gbDYh9+3nmjiHGUqQjD70pDvIzk3td66l5E2ljEFRjpkM/0rusUlDIwtwiGkyTdn3W6Pae7sz9rgFtnNB1uoMNNCf5HU/oJBaRl/XrpOYGNiYTTwWkXUvHJ84BCV2otvzq/2ym2zdPKgraCe6j8DfAmr+LtZCTrV6U4SB4kgQ8Cr/H/GpYDTsuvj9FncxATgz7ek95hLcMho7AcBlYy5X9vVJYA+LeUBFIwsDzex132FK7xSNZhEUokWNmAKQ80ixgiEhyJtYrYLXbPpowuc24Cci0bbVSLvqOjpET7e/mxoaBBwVjStGBlaYzNCFgaYB1G+zHQGclCKw3yKo2pnQzm/TyLToXIBr6KJuXA019I5d0WjkTr19j3RaRDXzYuHb8DNAh0cqSZCJyEVd80WnflmSfBhDoJG3pYXBII+CbrryWooGifzVTlMFuRkBNZLlgVGpxAfLAYloAM2Wh5x4mQMk1HG8F9c1BeGLLRHEfQCH33XW8MF4u4B/6vnREFRvRKE/k139NUIr42IcXYFf3syhJkiVVgAJLtXwAuBBw3QmxNBzrEQGggA7v8Vr1vlWO5Jc6KBZEXXQnqg2A== X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700016)(376014)(13003099007)(18002099003)(22082099003)(56012099003)(18096099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: N+dCIub4sYZNLLOEUiFSwTQ8Eb7b3MgWq82+/VCLs2Z3k7RWT4zZQ6SGa/kEBos3XkzNB+y1qlmT7gA/w97E2FTlal6j2YRGp6eIK7hckqqeZs4Ptkz5DEDOAW82O9K+pOhzVE0WyUnRnfqWfUdV1E2BM+rC6wgEi8kyY4GQi3nGKoSWQBNe45pA3mSSj0lpnyIDLSjpzL4eib3lBXqO9cmhcOXn3U5dhT8JzwKTYcso3WVee5OsTz9nJZBUJ1/IB9raO1ASEbyWWd91p0CiwMIYXEX8puaKa+AzHS/f/Qxy1R/MdBVFItcXYpejSnP2JJmkFXAz3tb9I4EbDdj6AzbDZKXYQXCI6ripj6R8utZ7IO4FXKMglSVoHDodg0Z8ps5ActBaBknMIO8JdFmXWwGkXPZBUrgM/+gO2hTaCK0AtOFAsJlqLGpV7W2SeKHA X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2026 01:15:53.8853 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b5f1955d-3d15-4b4c-fcf4-08dea268327b X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000A.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB9313 Content-Type: text/plain; charset="utf-8" The core tracks device resetting states with a per-group resetting_domain, while a reset is actually per group-device. Such a mismatch might lead to confusion and even difficulty to untangle per-gdev handling requirement. Shuai found that cxl_reset_bus_function() calls pci_reset_bus_function() internally while both are calling pci_dev_reset_iommu_prepare/done(). And the solution requires the core to track at the group_device level as well. Introduce a 'blocked' flag to struct group_device, to allow a multi-device group to isolate concurrent device resets independently. As the reset routine is per gdev, it cannot clear group->resetting_domain without iterating over the device list to ensure no other device is being reset. Simplify it by replacing the resetting_domain with a 'recovery_cnt' in the struct iommu_group. No functional change. But this is essential to apply following bug fixes. Fixes: c279e83953d9 ("iommu: Introduce pci_dev_reset_iommu_prepare/done()") Cc: stable@vger.kernel.org Reported-by: Shuai Xue Closes: https://lore.kernel.org/all/absKsk7qQOwzhpzv@Asurada-Nvidia/ Reviewed-by: Shuai Xue Reviewed-by: Jason Gunthorpe Reviewed-by: Kevin Tian Reviewed-by: Lu Baolu Signed-off-by: Nicolin Chen --- drivers/iommu/iommu.c | 102 ++++++++++++++++++++++++++++++++---------- 1 file changed, 78 insertions(+), 24 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 82dd806e5e6a6..5b784e43ca592 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -61,14 +61,14 @@ struct iommu_group { int id; struct iommu_domain *default_domain; struct iommu_domain *blocking_domain; - /* - * During a group device reset, @resetting_domain points to the physical - * domain, while @domain points to the attached domain before the reset. - */ - struct iommu_domain *resetting_domain; struct iommu_domain *domain; struct list_head entry; unsigned int owner_cnt; + /* + * Number of devices in the group undergoing or awaiting recovery. + * If non-zero, concurrent domain attachments are rejected. + */ + unsigned int recovery_cnt; void *owner; }; =20 @@ -76,12 +76,32 @@ struct group_device { struct list_head list; struct device *dev; char *name; + /* + * Device is blocked for a pending recovery while its group->domain is + * retained. This can happen when: + * - Device is undergoing a reset + */ + bool blocked; }; =20 /* Iterate over each struct group_device in a struct iommu_group */ #define for_each_group_device(group, pos) \ list_for_each_entry(pos, &(group)->devices, list) =20 +static struct group_device *__dev_to_gdev(struct device *dev) +{ + struct iommu_group *group =3D dev->iommu_group; + struct group_device *gdev; + + lockdep_assert_held(&group->mutex); + + for_each_group_device(group, gdev) { + if (gdev->dev =3D=3D dev) + return gdev; + } + return NULL; +} + struct iommu_group_attribute { struct attribute attr; ssize_t (*show)(struct iommu_group *group, char *buf); @@ -2191,6 +2211,8 @@ EXPORT_SYMBOL_GPL(iommu_attach_device); =20 int iommu_deferred_attach(struct device *dev, struct iommu_domain *domain) { + struct group_device *gdev; + /* * This is called on the dma mapping fast path so avoid locking. This is * racy, but we have an expectation that the driver will setup its DMAs @@ -2201,14 +2223,18 @@ int iommu_deferred_attach(struct device *dev, struc= t iommu_domain *domain) =20 guard(mutex)(&dev->iommu_group->mutex); =20 + gdev =3D __dev_to_gdev(dev); + if (WARN_ON(!gdev)) + return -ENODEV; + /* - * This is a concurrent attach during a device reset. Reject it until + * This is a concurrent attach during device recovery. Reject it until * pci_dev_reset_iommu_done() attaches the device to group->domain. * * Note that this might fail the iommu_dma_map(). But there's nothing * more we can do here. */ - if (dev->iommu_group->resetting_domain) + if (gdev->blocked) return -EBUSY; return __iommu_attach_device(domain, dev, NULL); } @@ -2265,19 +2291,24 @@ EXPORT_SYMBOL_GPL(iommu_get_domain_for_dev); struct iommu_domain *iommu_driver_get_domain_for_dev(struct device *dev) { struct iommu_group *group =3D dev->iommu_group; + struct group_device *gdev; =20 lockdep_assert_held(&group->mutex); =20 + gdev =3D __dev_to_gdev(dev); + if (WARN_ON(!gdev)) + return NULL; + /* * Driver handles the low-level __iommu_attach_device(), including the * one invoked by pci_dev_reset_iommu_done() re-attaching the device to * the cached group->domain. In this case, the driver must get the old - * domain from group->resetting_domain rather than group->domain. This + * domain from group->blocking_domain rather than group->domain. This * prevents it from re-attaching the device from group->domain (old) to * group->domain (new). */ - if (group->resetting_domain) - return group->resetting_domain; + if (gdev->blocked) + return group->blocking_domain; =20 return group->domain; } @@ -2436,10 +2467,10 @@ static int __iommu_group_set_domain_internal(struct= iommu_group *group, return -EINVAL; =20 /* - * This is a concurrent attach during a device reset. Reject it until + * This is a concurrent attach during device recovery. Reject it until * pci_dev_reset_iommu_done() attaches the device to group->domain. */ - if (group->resetting_domain) + if (group->recovery_cnt) return -EBUSY; =20 /* @@ -3567,10 +3598,10 @@ int iommu_attach_device_pasid(struct iommu_domain *= domain, mutex_lock(&group->mutex); =20 /* - * This is a concurrent attach during a device reset. Reject it until + * This is a concurrent attach during device recovery. Reject it until * pci_dev_reset_iommu_done() attaches the device to group->domain. */ - if (group->resetting_domain) { + if (group->recovery_cnt) { ret =3D -EBUSY; goto out_unlock; } @@ -3660,10 +3691,10 @@ int iommu_replace_device_pasid(struct iommu_domain = *domain, mutex_lock(&group->mutex); =20 /* - * This is a concurrent attach during a device reset. Reject it until + * This is a concurrent attach during device recovery. Reject it until * pci_dev_reset_iommu_done() attaches the device to group->domain. */ - if (group->resetting_domain) { + if (group->recovery_cnt) { ret =3D -EBUSY; goto out_unlock; } @@ -3934,12 +3965,12 @@ EXPORT_SYMBOL_NS_GPL(iommu_replace_group_handle, "I= OMMUFD_INTERNAL"); * routine wants to block any IOMMU activity: translation and ATS invalida= tion. * * This function attaches the device's RID/PASID(s) the group->blocking_do= main, - * setting the group->resetting_domain. This allows the IOMMU driver pausi= ng any + * incrementing the group->recovery_cnt, to allow the IOMMU driver pausing= any * IOMMU activity while leaving the group->domain pointer intact. Later wh= en the * reset is finished, pci_dev_reset_iommu_done() can restore everything. * * Caller must use pci_dev_reset_iommu_prepare() with pci_dev_reset_iommu_= done() - * before/after the core-level reset routine, to unset the resetting_domai= n. + * before/after the core-level reset routine, to decrement the recovery_cn= t. * * Return: 0 on success or negative error code if the preparation failed. * @@ -3952,6 +3983,7 @@ EXPORT_SYMBOL_NS_GPL(iommu_replace_group_handle, "IOM= MUFD_INTERNAL"); int pci_dev_reset_iommu_prepare(struct pci_dev *pdev) { struct iommu_group *group =3D pdev->dev.iommu_group; + struct group_device *gdev; unsigned long pasid; void *entry; int ret; @@ -3961,8 +3993,12 @@ int pci_dev_reset_iommu_prepare(struct pci_dev *pdev) =20 guard(mutex)(&group->mutex); =20 + gdev =3D __dev_to_gdev(&pdev->dev); + if (WARN_ON(!gdev)) + return -ENODEV; + /* Re-entry is not allowed */ - if (WARN_ON(group->resetting_domain)) + if (WARN_ON(gdev->blocked)) return -EBUSY; =20 ret =3D __iommu_group_alloc_blocking_domain(group); @@ -3977,6 +4013,13 @@ int pci_dev_reset_iommu_prepare(struct pci_dev *pdev) return ret; } =20 + /* + * Update gdev->blocked upon the domain change, as it is used to return + * the correct domain in iommu_driver_get_domain_for_dev() that might be + * called in a set_dev_pasid callback function. + */ + gdev->blocked =3D true; + /* * Stage PASID domains at blocking_domain while retaining pasid_array. * @@ -3987,7 +4030,7 @@ int pci_dev_reset_iommu_prepare(struct pci_dev *pdev) iommu_remove_dev_pasid(&pdev->dev, pasid, pasid_array_entry_to_domain(entry)); =20 - group->resetting_domain =3D group->blocking_domain; + group->recovery_cnt++; return ret; } EXPORT_SYMBOL_GPL(pci_dev_reset_iommu_prepare); @@ -4009,6 +4052,7 @@ EXPORT_SYMBOL_GPL(pci_dev_reset_iommu_prepare); void pci_dev_reset_iommu_done(struct pci_dev *pdev) { struct iommu_group *group =3D pdev->dev.iommu_group; + struct group_device *gdev; unsigned long pasid; void *entry; =20 @@ -4017,11 +4061,13 @@ void pci_dev_reset_iommu_done(struct pci_dev *pdev) =20 guard(mutex)(&group->mutex); =20 - /* pci_dev_reset_iommu_prepare() was bypassed for the device */ - if (!group->resetting_domain) + gdev =3D __dev_to_gdev(&pdev->dev); + if (WARN_ON(!gdev)) + return; + + if (!gdev->blocked) return; =20 - /* pci_dev_reset_iommu_prepare() was not successfully called */ if (WARN_ON(!group->blocking_domain)) return; =20 @@ -4036,6 +4082,13 @@ void pci_dev_reset_iommu_done(struct pci_dev *pdev) group->blocking_domain)); } =20 + /* + * Update gdev->blocked upon the domain change, as it is used to return + * the correct domain in iommu_driver_get_domain_for_dev() that might be + * called in a set_dev_pasid callback function. + */ + gdev->blocked =3D false; + /* * Re-attach PASID domains back to the domains retained in pasid_array. * @@ -4047,7 +4100,8 @@ void pci_dev_reset_iommu_done(struct pci_dev *pdev) pasid_array_entry_to_domain(entry), group, pasid, group->blocking_domain)); =20 - group->resetting_domain =3D NULL; + if (!WARN_ON(group->recovery_cnt =3D=3D 0)) + group->recovery_cnt--; } EXPORT_SYMBOL_GPL(pci_dev_reset_iommu_done); =20 --=20 2.43.0 From nobody Tue Jun 16 11:17:52 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012004.outbound.protection.outlook.com [52.101.48.4]) (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 5B2D217C203 for ; Sat, 25 Apr 2026 01:16:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.4 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079763; cv=fail; b=dPLamC3XBysCw24qPzUNI41F0LPInZatSSFl8JfShTF/rhi/jpyggMp4HweFAbL9ev0A/hjcNW8PlEgYNoou2Jvacf5NwTLx1M5+6ccA75BsoEJxECmLCOlV20SUKIKBBYbMI5GXXwZNaFcwneGCu4CHRwVuryEUrFvFSTnfIDw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079763; c=relaxed/simple; bh=0mANKf/FZprWRq6PK+B5+jEobfW6kGg5tGt+Svx2BKE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=db2WoxyAYLfytE6Jl/TBACi4UQfMmLlGqlWyZ9oNAGwh+PhmFlUc1zFm5kqOZnzjJyaeYagCuza9qBZ+ifinQWa2joiTisW8doxSsB89UcW8LjnYNSQoz4MLFlIrNrWC/B4WZdUjtskCZpBClcdKLHpUiAeuNCj5tqQwT0lQ4Ug= 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=mvCnc9lI; arc=fail smtp.client-ip=52.101.48.4 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="mvCnc9lI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jeTHE4H/0UNR10RGYhforaA4V45H9ko8ncBUi7Ywp+cahboshIoXR++kbBZjR58Z2pRxuFQ4Tyjj+rdCq1cfExuLMabycZY1JLHqHOBtC1RgjsALsTVnziiD3FXLCE3E0j6JV7OPUM1UV1t6baOapXzGh2Y4eiMHUUdJqIzGZHGNeNGLFNKaOAqx8KtLCcHGWXXZRLC87TS6wNGCGazFt39HcHRa1+2o/zr6i+1aRY9rsAWjHyO5ndNL1P2R8Dd20OvjbjA2BbzlKC2S6oPoM2jnq9hAgD1QMTD7LqiowUTuBo/yZmeKEkZZ/NG9ps3u6gwY/xxpvLpSeSXEC8IRHA== 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=XI3FHWFCVtf0gMzeiL3LZ7sG0faSUER/c9EltOj+yGc=; b=LV5Zu26pJrZVT/40PbSFgwF52WIzSvJUz5SI3OhISBruOE8QlabbJ4OipJvKWSbbqoiTnH6D5wFk1qhp+DdJ2Hhj+eRwvDNi0ydpYppGWaXmMofNlswhyeBtvC4i3oHsllYmizffRTo5HZSvZv3ntZIFDSuJIPOvbmvollaeEDaMYloXt/EhIyrShX24iJcX76MfIdRMfrUJrT7/Lu/K6BfbI7f5E7RP3qe3CFdAlu1ghBsM9w3vmpYK7UqK6HMuK5PSrd6TFybs4EB61weL0wpBtm4SCcHfE1aV0Az9mNl1HS2DFuJ1Xp4EMqxQVE06LaHFWZGhk9jyAOq5+WH7AA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=8bytes.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=XI3FHWFCVtf0gMzeiL3LZ7sG0faSUER/c9EltOj+yGc=; b=mvCnc9lIHiI7ONECE3cey0m143CJzd71EMNhx/9Bs6Q1sxsAA+KceycI1pUTlWKJuYvN7EJymWZTViLYa3hvt3xrCYMGa4HJgQq0DJf26DlR0511AOEgeJggS2/jMq0Y9lSaalC5mjzwQ4xpLjIWFXckpx0PbrZRXVo2WNLl9w4MTh/QvCbPcU4fXthui/2EvyOV6GCIyFt2G5IF2djFyUqnnB6wcHf2xw/uG/qpIYysMhpC8+ymNj0cBjLpxSUqweiyKXRWV4r3sxG9ZdzCbRFxCs/6nOdoC+Ncf/MSJnX7Rl7SulbEsOWjcy2ZxRGJMrAyLnWx2aSIZa56xOyY6g== Received: from CH0PR03CA0346.namprd03.prod.outlook.com (2603:10b6:610:11a::32) by SJ2PR12MB8719.namprd12.prod.outlook.com (2603:10b6:a03:543::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.22; Sat, 25 Apr 2026 01:15:56 +0000 Received: from CH3PEPF0000000B.namprd04.prod.outlook.com (2603:10b6:610:11a:cafe::ee) by CH0PR03CA0346.outlook.office365.com (2603:10b6:610:11a::32) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.22 via Frontend Transport; Sat, 25 Apr 2026 01:15:55 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by CH3PEPF0000000B.mail.protection.outlook.com (10.167.244.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Sat, 25 Apr 2026 01:15:55 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:41 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:41 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Apr 2026 18:15:41 -0700 From: Nicolin Chen To: , , CC: , , , , , Subject: [PATCH rc v8 4/8] iommu: Fix pasid attach in pci_dev_reset_iommu_prepare/done() Date: Fri, 24 Apr 2026 18:15:23 -0700 Message-ID: <0496b91a776e10220ea84450e3cd9f781e74d396.1777074513.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000B:EE_|SJ2PR12MB8719:EE_ X-MS-Office365-Filtering-Correlation-Id: 3fac46f6-13b7-437b-78ae-08dea2683398 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|36860700016|56012099003|13003099007|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: O8tFD+9UD24nC9wy4IceLh5HIQElyq/4u8t+Y0d9bBOjYpixSxWr1RNfpz4eIpqxKCTlZnnGQGQHF/VHpsBQQSwo44BHzFMRJm4al6nQ6qt0fGE5YOVN4rAl3iuQMSzqFwxY88oGZoNP9VIOFEX48du0CMSn/YnernbFWBw3Bz3yd+Ol9DGZR1wRgI+byiBYMxEik+/Fb93BV2ALBBedhh5hIQPhW03GH30+P/CwOIAPY5nGmp3dmzYeAekNRlxPCRmq9yyzgkaWGolLeg6FklBldOKFzWrF/QI1n9Nkb/B1KORnQM3Fi5E7r0OHv9P1ymjU9lc1DStkr9H2UCfA2/unqVBRwCIdlOJuWWMAaZvQqbIKeStNS7pPUP7oeG2iS9B21l5Ullyxiu/d1WVEkP3ZiNttgYOQo55xXS/5+VoRK2xi0ALygJ8VqgpKRzrc8xkDV891nna8HTVXj69fHLls0kBEYycwpp+5MTixLfEVC4xrWdGHL6lapK6yEb1yMnQ0HyKJETTv33OA+X3sDgPjuYwZ+G22AC7kaBXwn7kove3naR/KTlKLLR3ulF6FHGfIj9M0thp9+I0pmGbuOWaJ9WRq1muLJyf43ba/Iwx7gujdDx0MqiDcSXMUfLQWflTUgT1papoES5Qtj8zmneHaV5novva1cB9N6ACOKTPrRUOt7N2LKGRxor2xo7Oe2AnKdkb5H0Z2iGBDR8H5bh6ybOj5c0eUXi7E6xxDC6qtUDPquSjFSXD1Y21d2FE/s8LEy12QUZMndtLLpcewlw== X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(376014)(36860700016)(56012099003)(13003099007)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HvTLK+Yo4HIslLP/6bkNpBn/3w9OEUP8w3ZvPMhjm0P5Fqgh0wgiJ7RDMwROYB/XayFKAZINP2ExrMLy9ZEI28YCbbvpCAU/B2VFIdjlDc2XbrILGzTJ626KxFzW2bByTrllk8/7EbLWScL2c9b4UjjrfjpsFShvkehenYJQyCj77GWmPtUEyPCCnWHLgBMw4YjQtTO74hmh3IdHPCvVIV/ZsWPaA6KoCaGMOoDsSIg7x/3M277F74hnyichLyM0vz7B8V5Rti6vY8zqF52TQ/pxO8/pHUsBRxFmrne120QTr0tbO8aGgSS2whC/ePvPH8c8n/VTgIOZXEFVWksX2kIBvV8W2Me76wFodwjkWwZtuIV6GWdCKYAChu9itlNrsAxL4pJC8L15/pT6lO1z5DQs8Kt42AaVmxkM8DMke37d0u16EILjsXhmoGBnsEED X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2026 01:15:55.7529 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3fac46f6-13b7-437b-78ae-08dea2683398 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8719 Content-Type: text/plain; charset="utf-8" Now the helpers handle per-gdev resets. Replace __iommu_set_group_pasid() with set_dev_pasid() accordingly, in the pci_dev_reset_iommu_done(). Also add max_pasids check as other callers. Fixes: c279e83953d9 ("iommu: Introduce pci_dev_reset_iommu_prepare/done()") Cc: stable@vger.kernel.org Reported-by: Shuai Xue Closes: https://lore.kernel.org/all/ad858513-09fc-455e-bbc5-fe38a225cc78@li= nux.alibaba.com/ Reviewed-by: Shuai Xue Reviewed-by: Jason Gunthorpe Reviewed-by: Kevin Tian Signed-off-by: Nicolin Chen Reviewed-by: Lu Baolu --- drivers/iommu/iommu.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 5b784e43ca592..2907d76c39c68 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -4026,9 +4026,14 @@ int pci_dev_reset_iommu_prepare(struct pci_dev *pdev) * The pasid_array is mostly fenced by group->mutex, except one reader * in iommu_attach_handle_get(), so it's safe to read without xa_lock. */ - xa_for_each_start(&group->pasid_array, pasid, entry, 1) - iommu_remove_dev_pasid(&pdev->dev, pasid, - pasid_array_entry_to_domain(entry)); + if (pdev->dev.iommu->max_pasids > 0) { + xa_for_each_start(&group->pasid_array, pasid, entry, 1) { + struct iommu_domain *pasid_dom =3D + pasid_array_entry_to_domain(entry); + + iommu_remove_dev_pasid(&pdev->dev, pasid, pasid_dom); + } + } =20 group->recovery_cnt++; return ret; @@ -4095,10 +4100,16 @@ void pci_dev_reset_iommu_done(struct pci_dev *pdev) * The pasid_array is mostly fenced by group->mutex, except one reader * in iommu_attach_handle_get(), so it's safe to read without xa_lock. */ - xa_for_each_start(&group->pasid_array, pasid, entry, 1) - WARN_ON(__iommu_set_group_pasid( - pasid_array_entry_to_domain(entry), group, pasid, - group->blocking_domain)); + if (pdev->dev.iommu->max_pasids > 0) { + xa_for_each_start(&group->pasid_array, pasid, entry, 1) { + struct iommu_domain *pasid_dom =3D + pasid_array_entry_to_domain(entry); + + WARN_ON(pasid_dom->ops->set_dev_pasid( + pasid_dom, &pdev->dev, pasid, + group->blocking_domain)); + } + } =20 if (!WARN_ON(group->recovery_cnt =3D=3D 0)) group->recovery_cnt--; --=20 2.43.0 From nobody Tue Jun 16 11:17:52 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011022.outbound.protection.outlook.com [40.107.208.22]) (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 700531C84CB for ; Sat, 25 Apr 2026 01:17:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.22 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079840; cv=fail; b=oX85ww0BpuGbVLvYPuvrJioBdtrpDQgt9J9qxknJ8lmZXJqnU6IWHv4yuEqjZRHQ0CA5UiTGBNdeOlah6BF6GYtGWOAUxTDHShI2a7ek8niSw9H6HFWVbvSbtjcXy40k/43XV4zzJssVFN/4lHZXp6YvEO7xwcRBmH3kurwspl4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079840; c=relaxed/simple; bh=Zh1DbHvEPUNhdx24KR7q11vqMiVkQzrbID6eYXtbq+8=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Z7dzYzfBFcN5IBlX4xCVce6dXGfLEDsaNU9OdpDbZO1cmYERI92U9IhchtLB4cC7wtrKbgyv6GUwG8GjTwQx0An1W6vJRyGO55J9+yVV9aVgNa7EXsoDSgXyjRZB7/XlcSko/K5l/XGSjFcJS6cojeHFGO/X91dDQ+/VBNkJpQw= 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=cozFvRcs; arc=fail smtp.client-ip=40.107.208.22 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="cozFvRcs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SZkFiSETvZnDRy7KNqiC3vSmi6i1N0ps0wYvCrSr1RL+ZSap/ejK+BOPUTH4dK8rcQJ1jE82K70T5QDmICmzz/JZ7He1NN1RH4pG4dBicpp+IKZuxJv/eIWA3h1xNUpQrKlYWcJnRZITyoafGn9cS6SeoiJEjq6D53SSmn66hZBUchbL8veXAMPQiXOW4KG3NuHNUKeOmCTwhb5qQAzs3wYjiRH2IhArRrVm8OcYKJdlzGcV5UdhvEtS23FUtPmU8EzB7qHpW3dGfYD8OBU2MF8RbhGNkmJbULGoUzPC3IJLu4uuj/Y7vIbrrc6m5e0mDPP/TkV4bht6gmvFX3TEvA== 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=/sYxYcxMTMcvI6sx0wMXPWwBZDdhrIY/PVBOMwcZ6sk=; b=ZkmAIKQTfNfovzzAqkD8RrR268AV0BMAzkbzf4VFMvFQ4v0/8U1vf/xAet/lcZXFxjOOKck6pfzpZwUrQT+NStSQXBcur0uPjNOJh0sn7Qve6IAz978myKv1kk8Xjs8NJNrcxb43FnE99tsCbOYKlF3j05fhkRFzG96mey6fx+xHkQXLVmXcod8U+p1ymOhokH2lTW2lhkQhnEl+wH2V0NtL3EViuCHlD7OczvBrzRC7XrudcTh6gThq6BzUWGdH4NIdziRxbgNUCCRXNHt6eVPQi+83oh7sVWMap/x45szSWSkW/JKHX6iVCImDSUH/wAljUvJijgyBZpqxW85gpQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.232) smtp.rcpttodomain=8bytes.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=/sYxYcxMTMcvI6sx0wMXPWwBZDdhrIY/PVBOMwcZ6sk=; b=cozFvRcs1fPM5ptoVASntX8wCx4HPw4x2Db1OgggAVHC5HBxSpyoQbh5rm0k+4+lE3dQ7ldZnAdyyDJu5VRVvcIBh5UIb2c5HSnYO/Lmr9mRrGi7rS8oIFS7fjGXv/d0cc/dH2dfjLUFWqTv1qe/aBgC5SRQfAkMhiqxBz1pJgowQMjuhxagNKLp00Ahw7tHpZbAHL5nQmifBkwDBkQwXMrJX9qmiBv0A3qglLKtumytUOUVaD6AYcwIWKFggOEBujQBBVtN/+amhn05gCvx2e/GFPCnlcVgE/ctGqNQZ1Nh+RFsdbx0Lv1BwMLayuJF86uYztUTe+dHi984DQjywg== Received: from CH2PR10CA0020.namprd10.prod.outlook.com (2603:10b6:610:4c::30) by CY5PR12MB6228.namprd12.prod.outlook.com (2603:10b6:930:20::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.21; Sat, 25 Apr 2026 01:15:52 +0000 Received: from CH3PEPF00000014.namprd21.prod.outlook.com (2603:10b6:610:4c:cafe::9f) by CH2PR10CA0020.outlook.office365.com (2603:10b6:610:4c::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.21 via Frontend Transport; Sat, 25 Apr 2026 01:15:52 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.232) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.232 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.232; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.232) by CH3PEPF00000014.mail.protection.outlook.com (10.167.244.119) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.0 via Frontend Transport; Sat, 25 Apr 2026 01:15:52 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:42 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:42 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Apr 2026 18:15:41 -0700 From: Nicolin Chen To: , , CC: , , , , , Subject: [PATCH rc v8 5/8] iommu: Fix nested pci_dev_reset_iommu_prepare/done() Date: Fri, 24 Apr 2026 18:15:24 -0700 Message-ID: <0c98498aee847ce9478487195b36cbd122797d63.1777074513.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF00000014:EE_|CY5PR12MB6228:EE_ X-MS-Office365-Filtering-Correlation-Id: 795d3c7d-ef82-46d9-6188-08dea26831a0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|36860700016|13003099007|22082099003|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: CmpyXDBR8h6siIJqcXyVfivoAGW4lwSAGU9a/q/BKby/lNVP9s+Y6NO5z8Q8yIgXv09a73hiJYYBBgngikV/qPdaC/vLmFnh5F9/x38GWZ8KJp+leWqaCaORQm8rQMIp1vuaFNhUWEfP+7eCEH2nv5AOteur7CSAkjnhoa8vxOeWzeyyR5E19gnXpJWytl9IIaVOoIkmZtviT+GFUaNtaYE1qDNUn9jgNb3x2FxUrvVkmL3GWhqu21sth1RQaZT+ZpnLE4NJU64J2XpkD6Xq+kfoJ43gt0d9yY5yyCEp7h4/+iQwuIBBkIQEMg5BOuJ5cT5onb7EtSHCJLcYb/ANVCl2oRT8kAL3ZBQBFhclP9cMDiNcXvyF988pVEed5AI7KBKTGWp2ksMyiqcawtHeN3OMKyUztHOF7Jf89lTXD5IRFsp4l/IPFUQWaZN2ML8sLeV6F0I0DLXONx9psbGiPigJrrhrtrPgaAYs81rDu0DT+fhlair2z7dE2ZbWOwr7KQYp0chg+NbXBkgaabSu1s4mS33V9oAo/Aqe6jHmQu/3XgyQzXutIFZUWgveyenVD6n8bEDAK3V2QNXgwLg9vCZXC+cs4VI7kNyzBwRqrUy56C/8RB75TN5Z7Nc6bjmmvG6U3piUjCh1Rhtvzll5D/UP5gc1+Tdz7VcGsXZ2mFZYKtpL9vf8OEaVzkwcw0iS2r/sPhHvz7HW2b8tFVljJKHqrM4PMZrMWfweIfaC7stmTO2YNB8zRTIN2ftG5SnLet8wqD2l3tqt2CNMy3Naow== X-Forefront-Antispam-Report: CIP:216.228.118.232;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge1.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700016)(13003099007)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: StmUgGtuCPk6bCnwABDheyD8DkRv691vXnZND8gaDBR/r105Tr4mqYuEuJXe7/k+8X8Ef9Vv9epgB3udcjg44q2Zjyk+CHPQAuqvSPLbg8ciFT+w4ZpUFwJht2sLxWfH64rxnkAE51j3wn7lgnsI6xgw4izHq1Yv3qzNBJyw8kVTokr5TxzynFI+F0FNUrsrOsviiOJ9BvUrDWpYg1u70cRN1jRiKI+EeKmcXFuNN/1FiveaFQzkIoN/YTUHVzmPIM+GVZnHxDSG27XCxEGvJBoAIMq9G+xGT8b5rxlaK1uOsojVfpuq10r4IX1nAcnwIuOHi1KDeoC4p5O+b3OqlTUA+8h3CvA9F6wDCdMshwhoakraUOE6BDUZlmdkQAx3M4RZ9jJZhirphthXXc0yTzHxFGp11tw0NV3HeJzUpk/gxRarg3nKiUul0XpJESO/ X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2026 01:15:52.4655 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 795d3c7d-ef82-46d9-6188-08dea26831a0 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.232];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF00000014.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6228 Content-Type: text/plain; charset="utf-8" Shuai found that cxl_reset_bus_function() calls pci_reset_bus_function() internally while both are calling pci_dev_reset_iommu_prepare/done(). As pci_dev_reset_iommu_prepare() doesn't support re-entry, the inner call will trigger a WARN_ON and return -EBUSY, resulting in failing the entire device reset. On the other hand, removing the outer calls in the PCI callers is unsafe. As pointed out by Kevin, device-specific quirks like reset_hinic_vf_dev() execute custom firmware waits after their inner pcie_flr() completes. If the IOMMU protection relies solely on the inner reset, the IOMMU will be unblocked prematurely while the device is still resetting. Instead, fix this by making pci_dev_reset_iommu_prepare/done() reentrant. Introduce gdev->reset_depth to handle the re-entries on the same device. Fixes: c279e83953d9 ("iommu: Introduce pci_dev_reset_iommu_prepare/done()") Cc: stable@vger.kernel.org Reported-by: Shuai Xue Closes: https://lore.kernel.org/all/absKsk7qQOwzhpzv@Asurada-Nvidia/ Suggested-by: Kevin Tian Reviewed-by: Shuai Xue Reviewed-by: Jason Gunthorpe Reviewed-by: Kevin Tian Reviewed-by: Lu Baolu Signed-off-by: Nicolin Chen --- drivers/iommu/iommu.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 2907d76c39c68..7a5a5d3aabb65 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -82,6 +82,7 @@ struct group_device { * - Device is undergoing a reset */ bool blocked; + unsigned int reset_depth; }; =20 /* Iterate over each struct group_device in a struct iommu_group */ @@ -3997,20 +3998,23 @@ int pci_dev_reset_iommu_prepare(struct pci_dev *pde= v) if (WARN_ON(!gdev)) return -ENODEV; =20 - /* Re-entry is not allowed */ - if (WARN_ON(gdev->blocked)) - return -EBUSY; + if (gdev->reset_depth++) + return 0; =20 ret =3D __iommu_group_alloc_blocking_domain(group); - if (ret) + if (ret) { + gdev->reset_depth--; return ret; + } =20 /* Stage RID domain at blocking_domain while retaining group->domain */ if (group->domain !=3D group->blocking_domain) { ret =3D __iommu_attach_device(group->blocking_domain, &pdev->dev, group->domain); - if (ret) + if (ret) { + gdev->reset_depth--; return ret; + } } =20 /* @@ -4070,7 +4074,10 @@ void pci_dev_reset_iommu_done(struct pci_dev *pdev) if (WARN_ON(!gdev)) return; =20 - if (!gdev->blocked) + /* Unbalanced done() calls would underflow the counter */ + if (WARN_ON(gdev->reset_depth =3D=3D 0)) + return; + if (--gdev->reset_depth) return; =20 if (WARN_ON(!group->blocking_domain)) --=20 2.43.0 From nobody Tue Jun 16 11:17:52 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010015.outbound.protection.outlook.com [52.101.46.15]) (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 215571F5847 for ; Sat, 25 Apr 2026 01:16:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.15 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079765; cv=fail; b=LX2V3I9oDLNuykyTut1kKze6efbeFTeyRFv1GzLtw8X3uH2Xd5mo2wpiBpHMP5YFNHMpS3HaraAv/nnHqQDjSJ6/+aqgv/FVnSxUVjlhD8VlYut8T3GYHp0QftTJJG7vBx3y9XA9OXZ0FbJLtCQY7dd6GGSiBC9psN8Tjr07f7o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079765; c=relaxed/simple; bh=M1bQBtYbLDQP1mIk+FcTTZDq1nMqqvQ4fy5WFeH4AME=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Uya9nQW5XDU04ticCAKfxqtj4jOST7kuTMUBkcKYvOuEEj0yRSb+Y20vE8et9v8Ntt9KUEerWmHOXsoYvWOr0Ov8pzhuyirMCASpNFtWp5B+77aOLNRm7+Q+ullK/NWyKmXOuHbHdbQY5qYkLX2nZRxrILZdlpuGrpupS5Y84+s= 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=FXjwRSAl; arc=fail smtp.client-ip=52.101.46.15 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="FXjwRSAl" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hKC9cViuum8FnuzG+Rz8UqhwQ4ySipvF/kZRDS+Dg36pMPnXJZgMnWJWNG1kGMnZ4feLNphhuhbXGBqBSOLsbr5J5+jVC1H5qGEKcPDldj2ZhBrI5FuLSDoL9Zb3fKiallp5pw7M17RrJnTbBZ9xzfZiegVyVy32s7kBkP2q+bu1r3UxCHgJk3amYuuFuvvZCtxEd0k261/le0LgHXixywr+SIId7HZVolcD2tu+n3SZiiP+7Fp0vGGp0UrQsObrpPCT8KK4HavtZw+GnbkvDox0cN8A7yOYNqEzleeQsXEGp9OKEHoK1PosdBas7Zvi+DYnAdSUj73sU0yC5NrU6g== 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=k+KLIuHNH1/8GBMdISBNykwHF8bgWOd/5QQF9ME6pRU=; b=wy8OixnHu1cosu0zaRYEV2ivLET/UqrWCmGQHygygiEW+v66mIWqN8EW88nMLfoF/FbAXdyNIA1gyvdXftX/1BOcqkzAEkO+5aw/2oFo4kS/SMpYUwjdPTpBlXuMmXtHh4Rg6Suz2IFaZDvmgSYQzXGCm31t69ZzR97gmT8dr0OGjVWN0wYuWPaWFc/dpBHkngF88i/DmdocT3lemo+qrrBMH7MpziPzOXeLuB5tVo6nYDOmwoY9hDaaSxkGjnEYsRnWY97T18xJhgeEEnH7VFEaEL3luj8si/ZrkNlcY1/lRKowqEoNUDOavh4prQ0Q8i4MOTDQzl9pG8a+D0Re9g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=8bytes.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=k+KLIuHNH1/8GBMdISBNykwHF8bgWOd/5QQF9ME6pRU=; b=FXjwRSAlMIIR6mi44R9gTNEEEEn7gME+5IDxuDzKTMvkg1JILbThvBieS+rHZLgOEpw9vnjVoNQYrawXR2gm0TUqaG6vrKYSNR8qJ9cwIAXl5xADIVm3nhookzE2jnS4fhVw3NaC0U/NHgDfjZMbf4s1VoPX+SKI5t0qr5WDfB6/vQ90erS4L/+BNAKCtv4Ho8z9t3PZDbpIm65hCSUsM+MZAm4x9xOpYlTn2y6QpJ2zpprrfOS+fRqmsvMZwTZtscHIewlUbclaZA4lCkbUTtbxH1i1JcbB/lar96CnigssiXcW7Ud5wWyH0ZXGgd8NXxIL1Dcrxq9gCyXa+r+uJQ== Received: from CH5P222CA0008.NAMP222.PROD.OUTLOOK.COM (2603:10b6:610:1ee::17) by DM4PR12MB6158.namprd12.prod.outlook.com (2603:10b6:8:a9::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.22; Sat, 25 Apr 2026 01:15:58 +0000 Received: from CH3PEPF0000000A.namprd04.prod.outlook.com (2603:10b6:610:1ee:cafe::4) by CH5P222CA0008.outlook.office365.com (2603:10b6:610:1ee::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.23 via Frontend Transport; Sat, 25 Apr 2026 01:15:58 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by CH3PEPF0000000A.mail.protection.outlook.com (10.167.244.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Sat, 25 Apr 2026 01:15:58 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:43 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:43 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Apr 2026 18:15:42 -0700 From: Nicolin Chen To: , , CC: , , , , , Subject: [PATCH rc v8 6/8] iommu: Fix ATS invalidation timeouts during __iommu_remove_group_pasid() Date: Fri, 24 Apr 2026 18:15:25 -0700 Message-ID: <628a9ba0cc123023f0d60fefec7b65ecc23f09f6.1777074513.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000A:EE_|DM4PR12MB6158:EE_ X-MS-Office365-Filtering-Correlation-Id: daf5e0bd-487d-4501-1bc5-08dea2683521 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|36860700016|376014|1800799024|56012099003|22082099003|18002099003|13003099007; X-Microsoft-Antispam-Message-Info: ZJhF+tMPlg+e5ybHEYyF/qREokCj3YcPDtojWeS78DFAtLZPjVET+pBhUoLWsDs+B0aS5mhYnwaWYjxRt2wgwBnCW4kDvMfJTqjO+ztP4Yhr8+YMXBSiGZTazxESuOwd2cbrnme701HtceQvmkfF/j1EPDnS+3fhot11ZRUD3yCRcQUomFRZuLcZS4ONekLmyLyAQW5PQhcfKsHoa0H+W9PqPQJypN0sXsERZOOlqrtj/+in3pBsP1WMytl90ZvhH/5K+cGcBYWtMsTdsaWsveyeghqCN4RhhUHnUXA1ZSDq03RVcHabrFj/BjSl6webhAfVzyCnWCrDR+FgTKvp01GGZPmHcwO3hnpLmYFMoCp3LUEY3n0pHkwzZH/DrW9TCBTdrVYHK5AT8Tz/du+WLYXyJTmOxQpqkTm9xPayNr26gYQjf+kIpujatcdAq8s26ToxuCAJi3hP4qOSWUW111f7PZnmlGClHbbrf27LpuCyKBpZOAypOT+/IcvyL7hUk9fhDI4EHqhDSHwthJYQWPLo7xm2fVHcc/nvkysDYFpwit+S69iBczRmlBBg1pBfN+fq3CAamUYkMfb4X7qVoXh8ZOm5DKphdxDxqNibKaP8HoW+k+pSI+a/wXNDYZ4KkUcOI8gTaJkUEuWbOmW5oLqBT5vhAQLxUMFB3f+uEmvt2262L2QAFA2ikkJzSQtYMhvP7AnMCaht2lMxaaBLAuDqZ5jRpMsKH9ppYV8H7fQIA3mylNKmf6OyrREgJdp1dEJOOhxphR+Xkw2XaTSRug== X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(36860700016)(376014)(1800799024)(56012099003)(22082099003)(18002099003)(13003099007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: qWim3A0+j1I+rtwn0Z+bh3iO1XLtj6baUVVUzfHITHiyOrmvdAPInquPHxPD7Yl8wUUDOziU83CklT6EAA6+kl+iuByOog4vOoTpVG9/ecA0XpTwEOPCgRqnEG+cWjstYdAFX9RrgWfbPq87mFiT58ZIRyUA+L/AV1T3Q5Smvwxxe51fMofOhI/Ba2cF/C85GQbkXO3jOiSepWvqzNsY++bM24oGZT6/TIEaX95YOieCAOC75OkK61C2QVDIDmyainD930pjSMwTND8JR6TpSkRGoqWy4KhmUC6waMcXH2pr0xXVyEIsOzsYJ4KdraV32+nc8RyGcXG0c34pzPXMfwRfZ6R5V9XN4dtMNQjMHi14wtJ4GQleQtQry7oviufyB5+jTcXf5NoZEP+GECJYfupFMsI6dJP9ez8HA6qSRtngC+ms2KKuVYYYjWlvXqu1 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2026 01:15:58.3524 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: daf5e0bd-487d-4501-1bc5-08dea2683521 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000A.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB6158 Content-Type: text/plain; charset="utf-8" If a device is blocked, its PASID domains are already detached. Repeating iommu_remove_dev_pasid() is unnecessary and might trigger ATS invalidation timeouts. Skip the iommu_remove_dev_pasid() call upon gdev->blocked. Fixes: c279e83953d9 ("iommu: Introduce pci_dev_reset_iommu_prepare/done()") Cc: stable@vger.kernel.org Closes: https://sashiko.dev/#/patchset/20260407194644.171304-1-nicolinc%40n= vidia.com Reviewed-by: Kevin Tian Signed-off-by: Nicolin Chen Reviewed-by: Lu Baolu --- drivers/iommu/iommu.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 7a5a5d3aabb65..d0f32bd954a72 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -3554,7 +3554,12 @@ static void __iommu_remove_group_pasid(struct iommu_= group *group, struct group_device *device; =20 for_each_group_device(group, device) { - if (device->dev->iommu->max_pasids > 0) + /* + * A group-level detach cannot fail, even if there is a blocked + * device. In fact, blocked devices must be already detached for + * a pending device recovery. + */ + if (!device->blocked && device->dev->iommu->max_pasids > 0) iommu_remove_dev_pasid(device->dev, pasid, domain); } } --=20 2.43.0 From nobody Tue Jun 16 11:17:52 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010035.outbound.protection.outlook.com [52.101.46.35]) (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 5C3971552FD for ; Sat, 25 Apr 2026 01:16:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079781; cv=fail; b=t1s38fw72c+O8WAEDltWsDdEjmgdXUFTRdxjYTyaIICd3xvFJcsKKdqGU1j4oNWiyNvRBmFbErTc/M/TQtRB4Oeq4eIVnKb8cCwND994It/jsyabi0TLKUHbl5hhL7Yi4G2n35Ut6stcK4JDJQuPYjuba8dTUrxO3b6f6Ch5OhU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079781; c=relaxed/simple; bh=+WbEk14DKk/ehnt1l4pS6aeb3anxL8lXXdPQR0NK9cY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=C9NWypJCvKD+cm90fTJFKHyFRivQ7LWSIdaXP7isplc2JAjky8qZqL2WcQlUcoVbWOCBeKE7s1/ajcSSXKJ1JZBWAaEgahA7bdPPf4aVYxKq1y1HUD2oq0B8Ne1+hwgF29tMDEe5uggbHdhw/Yd5Z+Vrqbd9f42AMs1MR+C4nSM= 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=Tpwtr84E; arc=fail smtp.client-ip=52.101.46.35 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="Tpwtr84E" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w10PIk3grRUSxpdwYFniqqdxoMIm/+XvMw9PhI8ZK/b/OVPg88toOowR1s3zb3ayhEfV+eTXhXBydPJkYL8tMnOW3yw7nQxozrAv+Wx4rmNinyh4lN9BmpVGqgUC1ZlfnLfh3oN/WOmrW1j39/5D/6SZI4kmL9T+r+dX83iIs3FupFkyFRedQE4c57PZRLK36jsXSLv++X4e1ukj9fmrl5qytnYfCNvUMiH/146bqb0vqXrx0dv/YFq8PYFRmwLJRk3JglC3oLZpoD1fUU0KfnfHx4KFZwIbtbt8akNoieH+rzMxGKBMmO80Iga7TJbotigc07VpRX7HaZdBCBngYQ== 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=UseFrwcalr5UbiiGszcGzoDzpB6konfDVJUWxFhpjHw=; b=YZ6BWaE0BjDeEP/OEL/fC9C8oQgWJ41juSzOZJgIsh0voFeGdjt/qUXjxWzNgV0fN0srk5aP+Kz1wZ2ZpUfSGg1ArWzbrj0xTUJ9F7TxO0UvuuavEDeyTWl3Ao9Qd6sY4jAaEdQoEYPOSU6AUGi6y9KXmFdqOViDuUQxqTFrOsc2AMOuGFuwwV+KqYoZJ7DjCY+l7Bdsw74P1+fYG7HdDDKMHMii+6WP7tfGQc0HQyY/L9J3aimVF5S/s2BKr/T24b/Vv9ixyG38nRmJs9UUaX8tC+ghcbrMfXVnj9cnHB+ItDnB4NKOPqfnuZvy4pyfodVja4PGEL9iCXm8Ag6o1Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=8bytes.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=UseFrwcalr5UbiiGszcGzoDzpB6konfDVJUWxFhpjHw=; b=Tpwtr84EcMh7QSyPnnKEtnrUpCsRTHcOrsyDCSY1QcxuGwCol4uNb5M4v9TpmNZ965plD7hTllLCRL1Pdcix2R6HaWAsbfq55bWbx/aO4dswlaFHYYmlatP3EJirxn2DWb2tqlrzYGpfPOtzISOeL0C8up+3q+7KAy6KdFrMCa5bIj1+KsZa2DkP5wsZ2ol7PnSj0CHgCYG9HdGoXl2dcmDohhRD8e3YlhWyU0cEg9N+M3Ql2Rpc/nTh63SpfBemWyEsKEOns9SQPrrj8Z2q+Cjq6m9637NApiv9V5ozOkcUcCEG6QiHAJ9TRoJwywskrPNU378g5sgf+VqMXZJgTw== Received: from CH0PR03CA0360.namprd03.prod.outlook.com (2603:10b6:610:11a::11) by CY8PR12MB8299.namprd12.prod.outlook.com (2603:10b6:930:6c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.22; Sat, 25 Apr 2026 01:15:59 +0000 Received: from CH3PEPF0000000B.namprd04.prod.outlook.com (2603:10b6:610:11a:cafe::b5) by CH0PR03CA0360.outlook.office365.com (2603:10b6:610:11a::11) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.23 via Frontend Transport; Sat, 25 Apr 2026 01:15:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by CH3PEPF0000000B.mail.protection.outlook.com (10.167.244.38) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Sat, 25 Apr 2026 01:15:59 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:44 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:43 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Apr 2026 18:15:43 -0700 From: Nicolin Chen To: , , CC: , , , , , Subject: [PATCH rc v8 7/8] iommu: Fix WARN_ON in __iommu_group_set_domain_nofail() due to reset Date: Fri, 24 Apr 2026 18:15:26 -0700 Message-ID: <7747294dd3536683d5ce7734e052431c2ceb0d7e.1777074513.git.nicolinc@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000B:EE_|CY8PR12MB8299:EE_ X-MS-Office365-Filtering-Correlation-Id: 70dc721c-8adc-4b72-fb30-08dea26835bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700016|82310400026|376014|1800799024|56012099003|22082099003|18002099003|13003099007; X-Microsoft-Antispam-Message-Info: PcBgf1bVFj1HSJ7Mqfx+Sfgp1QN+KU/3YliF5HTopnk22iPjz56pncFqVw4zPsWDbzXUq82/tFFmH9bRNXyh9uM1HtdXF+7xe2inS6Z5dNsyLe2GUL6bUI3chG8uslUdQNmzVcmt/1cOWdOy12B4CM88n6Cej/5XIJ2iRhUrRcu8XzYjmXMmOOevTzrVOBg4Ep/0iGzrnuVx3L0AF3HdXwT0zx8esKfI17dfzA+Q0op+FULux7C1DnjEbRYC+qbq9QX6Xl+0WBZSK/n5pkTObQxo5an8jDK7JEoBn8LFwEbGbAyVJCnIy1ltoGX2NebQMzPPMTrpnZMH/0/Rj5D2DqVUrOddfpMsfHuFZgNqDQfNPWn5KvMzwq+pY0Oh+xe+YmflYciUAgPLI3fZJEgztaFCAd/kEbZQE7pCJdQoOYUKdl9u1ZycsUCgKAVaUAy1JJq7ZSoZy8kSxknkcJkMijikuItcB3GfWg0R4Av1zQ5tbrQKvKtRSG4KGEULZU/DVf8jUSztvZgePk+iFrmSzostK/HnePltBKePSWrOE12Fr14uxjGwuWORt2ojuaz9MTsk/sDkiXw+EDSACMe4UaR1gsm7KWnOUiFpuNGYhhBUQq7tUL/SrEbe+2DV3N2C+RYYg2WkngLPrdNClxzjLfxw7KcrKzDSSb3BYl/xZ3aEG9Waz8DLmfKdeVlvRtqmrW1Up+SY3if1dBS7RjsCOC7+61InelhRQeqj+BSCoOzfdnfYZWQd4Vh+cLVRYwhuv1xvo0JE7nun6KidKFA+lw== X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(36860700016)(82310400026)(376014)(1800799024)(56012099003)(22082099003)(18002099003)(13003099007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: twmBm7z3S8lww/czA6q3acuBwI77rkGKEfiYjiUwvoR9Hgl3ulJi7nYyEYZcTdDBbf6WCGiFih8JqFF6KkvJi/MApOVpKPxu12u+HJLYVf7LyZ2GELvmwUqjv3yzKNNfa2K2G+Mpzes7NGdaeRETSoeoOlhjhN2b2SvzptrUwun2VcxyBAnfEPwHUi6w3Sy6Cy+esKCUioOTs2cUD49s9/aXuOrv5BG3PUSs/dyG/s1+47eGGkqRUALK7ueJj8EQubWr0VzpsBIAz7h74che1LK55oPJpQZldMe8eW42+WO6rzKJRK0qb0jcS/aSHlPEzRktK7q78eLXyqltxLOMwiEJD/UhRmO6NCkxBT+LoEUwP25EBF+Qnegi7IEWlHGOTVOr3CyGhglujS/6iUAS7t0UH2ejF0t/0RSXJskHqAN8rGZiDruQDkA/TVpJgteY X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2026 01:15:59.3674 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 70dc721c-8adc-4b72-fb30-08dea26835bb X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB8299 Content-Type: text/plain; charset="utf-8" In __iommu_group_set_domain_internal(), concurrent domain attachments are rejected when any device in the group is recovering. This is necessary to fence concurrent attachments to a multi-device group where devices might share the same RID due to PCI DMA alias quirks, but triggers the WARN_ON in __iommu_group_set_domain_nofail(). Other IOMMU_SET_DOMAIN_MUST_SUCCEED callers in detach/teardown paths, such as __iommu_group_set_core_domain and __iommu_release_dma_ownership, should not be rejected, as the domain would be freed anyway in these nofail paths while group->domain is still pointing to it. So pci_dev_reset_iommu_done() could trigger a UAF when re-attaching group->domain. Honor the IOMMU_SET_DOMAIN_MUST_SUCCEED flag, allowing the callers through the group->recovery_cnt fence, so as to update the group->domain pointer. Instead add a gdev->blocked check in the device iteration loop, to prevent any concurrent per-device detachment. Fixes: c279e83953d9 ("iommu: Introduce pci_dev_reset_iommu_prepare/done()") Cc: stable@vger.kernel.org Closes: https://sashiko.dev/#/patchset/20260407194644.171304-1-nicolinc%40n= vidia.com Reviewed-by: Kevin Tian Reviewed-by: Lu Baolu Signed-off-by: Nicolin Chen --- drivers/iommu/iommu.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index d0f32bd954a72..f21d352a67f70 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -2469,9 +2469,10 @@ static int __iommu_group_set_domain_internal(struct = iommu_group *group, =20 /* * This is a concurrent attach during device recovery. Reject it until - * pci_dev_reset_iommu_done() attaches the device to group->domain. + * pci_dev_reset_iommu_done() attaches the device to group->domain, if + * IOMMU_SET_DOMAIN_MUST_SUCCEED is not set. */ - if (group->recovery_cnt) + if (group->recovery_cnt && !(flags & IOMMU_SET_DOMAIN_MUST_SUCCEED)) return -EBUSY; =20 /* @@ -2482,6 +2483,13 @@ static int __iommu_group_set_domain_internal(struct = iommu_group *group, */ result =3D 0; for_each_group_device(group, gdev) { + /* + * Device under recovery is attached to group->blocking_domain. + * Don't change that. pci_dev_reset_iommu_done() will re-attach + * its domain to the updated group->domain, after the recovery. + */ + if (gdev->blocked) + continue; ret =3D __iommu_device_set_domain(group, gdev->dev, new_domain, group->domain, flags); if (ret) { --=20 2.43.0 From nobody Tue Jun 16 11:17:52 2026 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011002.outbound.protection.outlook.com [52.101.57.2]) (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 82A5D1A0BF1 for ; Sat, 25 Apr 2026 01:16:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079769; cv=fail; b=f6+3Jc8KKaSt3VKpvW76zW8iC2vgbuFiDQ/NQaEI3lSwVx8paa3ORwqzPWwCjgHl6HxEFYXktWAplVggBK+pfOPxuxD2BozO+w0gXvHp/SXe6dLWUCmvZ8Bq6TA1xJx/zJyFAQdA/wrTYDmb/gzK6XY2qL+Fxm43ba+gycMnTW4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777079769; c=relaxed/simple; bh=Q/Upq/NBUFA7CyGXlGDdxEdAuUmuDpqiY0vOZNfYDiM=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=QwaMP9Qncp7yyti+YaKgrrY53yOJBkgg47QRM8QuO/OKlTLIUVUvFgQU2Kk4imgLA4oP9odwd5ahey4SMsiHYCNq/egWAtBVAC/ZW2PKokV+6j2DvLpdNiLXr1/ev/jPq1HUgAbSpkr43/mQGmSB0nLaKMwiCvr6JLUMXSPUb0k= 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=JeY7qeGd; arc=fail smtp.client-ip=52.101.57.2 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="JeY7qeGd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aFhUsQyRnyjdRrTQJ4Kkxg46y6pW3djQyMmsFHp8IQYsdcAdofcKg5VgWxPwZG4vJZRykEvi+A903ovowIzKCXoxsEdPF1NWAFkuJ6t2VED4NWJvZdk5rk/m9qVJM40IEchCln6GAvulFaeveBcMuf9aFbML1aNFSY0Mod8Er0r9jH15XXL64qODprwjvLVCLWeuW8EZ1kIWlUSPi9OgaCORRN2RzSUYWnkBOFtEIGTJCTWLMAhGf7jk0IcWnUzxmfdThRDvwRST4zHx0G8Tj9y1E9QTpaxl9AdoOlttyP+qxUebCyPEtc7kQV7xlXg/juxVmq+zxIOyvw3RpUuvxg== 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=MbmpEawizC9VwEeS1vY+d6XCSx6x6dpdNknXoI633d0=; b=cTxLt/DnXaz8QyO3fKz1vE6ute8kXIey7Xt7GUC/FQM/BV9AwGmqGTYmDjr+GAuIelwfK2vcQwY6C7Cx+TUhYfBQ/WgykabWu0Nwco6khMbRIZGq7JrbQE1i8jSYXx1OKNUI1Gbxkt81Vg54PVVAuX8pyVKgxZRJwjUD3FZ2zDXl3ZP/qvD7hxRyHGE14E+Vn3XMu7COe7FhuHCAXTRLDD8tg6ra8hNpO+cDzHUee39h5CZNb9Nd4bngS2VbAaYXwAZ6VUMfumvObsQbtJRyyX5X0gWskZpHL0YwLg4hEcE34sv5FAMnlG1TYVL/PcSNA2OVJWRXFypdMZ7HdnvZnQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=8bytes.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) 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=MbmpEawizC9VwEeS1vY+d6XCSx6x6dpdNknXoI633d0=; b=JeY7qeGdy88SQHU+isn/0hWKb1XzfmqxWr8wNKh6Z09veIcnDSmfbS1JKwkMR/9PFwSlETktzTovGV+lWg8+e1uyKxtkf109uphlovdltxkMoKq0thkouJ2RyltdpNI7+3C3DDqBFg4Jta/okUG3mSaq/2JW0so+B2M4lPC6/hwJOAydTugDwmUGnV7vJlNXAo01mBQBsT1QOEcFJvvWZSXoV5R7pM5Tl4YAYyP4s0xaSZEYuaJTTVYJfLyXEZ+msDjDHgJ732sl/9R71XAOf/PAY344ihSQrT8T5K5BldYx7waRSpUFZ53y9ChJY93GwUTYhif+qqb7pg3G/MP8Nw== Received: from CH5P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:610:1ee::15) by CH3PR12MB7522.namprd12.prod.outlook.com (2603:10b6:610:142::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.21; Sat, 25 Apr 2026 01:16:00 +0000 Received: from CH3PEPF0000000A.namprd04.prod.outlook.com (2603:10b6:610:1ee:cafe::94) by CH5P222CA0001.outlook.office365.com (2603:10b6:610:1ee::15) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.23 via Frontend Transport; Sat, 25 Apr 2026 01:16:00 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by CH3PEPF0000000A.mail.protection.outlook.com (10.167.244.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.18 via Frontend Transport; Sat, 25 Apr 2026 01:15:59 +0000 Received: from drhqmail201.nvidia.com (10.126.190.180) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:45 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail201.nvidia.com (10.126.190.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 24 Apr 2026 18:15:44 -0700 Received: from Asurada-Nvidia.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Fri, 24 Apr 2026 18:15:44 -0700 From: Nicolin Chen To: , , CC: , , , , , Subject: [PATCH rc v8 8/8] iommu: Warn on premature unblock during DMA aliased sibling reset Date: Fri, 24 Apr 2026 18:15:27 -0700 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH3PEPF0000000A:EE_|CH3PR12MB7522:EE_ X-MS-Office365-Filtering-Correlation-Id: 6bdee178-d542-4500-9c65-08dea268360e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|1800799024|82310400026|36860700016|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: TteiAkaxZ3/lYt2Onb2mIsb6UcvBq8fLesuhXi+crZv+gCyat+Er4E5dLLbbWvNEAoU21PTfsBb20V5aqsgfJOYgw/b+2SZMqDFWlIcPwtj5eTyLLOb0zZN9J8D1MsXJTK2OsBfonCF16tRwVUmqFjc0F44UXId66nhCra6TdAAPRm8lo4q9CIV5EidXiqo+mfrHSQsVOqT3VFAf0rOG1aKQj/zHr5dHYLvji4tLCu77NwlUgDPAwK0lzE4BhNm9+evR6ytq92bLuvAlWYs8mIkomTihEgY6pgQE4EFLhGkYmGn7pBkhrFzBVs7kG7nyoUsKby98xQQbTZpkF3BY4tNgSpp3Ki3Whoet1E9X8qTkqaNwv5r/rC/nMyNAObVWEiEQrqgK8UV+v6Dh1FzQnOsRSScKNEec4XMOIygiEPjs/AXxfYhqL7UZb+ifLuu0ditkYbb8nLNPtAnrDUv5OXh4m+B9dLnV44lGlp9shBBPTfqWAAiCWpr/XGD8NIPbaTj7k+ZvRdBMO6uMfMII9iOPmy1yOFNzHbaxs71hTfHSKS17s6V5w6tLRPhdQKKv/6jf8a0BBU3NhfjzfgN1EVjx4ueeHMmTYdOFj9Xfw9tGwFUBNuxBdNXRMMA2XTKTX6T0m6CNf2PrBX2zmjxLWTLt9c0ApmAjOcUY7zA2hi67T7mYqNkMz+Rk6o9l2mBlK7WxfkMn4RjLau8cmnCJEuPmKqkImojNyElIpVNJgDiyG4kZPvSG0GrNjsgIasC8AyNTIkcLWsNKwIzHpUgrDw== X-Forefront-Antispam-Report: CIP:216.228.118.233;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc7edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(1800799024)(82310400026)(36860700016)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: FsKPPtRbJjUYFYyjajwNUbAqugDXWSq+jt9OECkDfXaeCDaUjfHVH0Dz7SUg7LM1byQMyHGVqYE6W/+fYkjj/4SIoIe7cCnBqZlbCKxammQA2iT4+WpCdTA9oiqnGRxsnI1OTk5N69d6Op7lVZGIfdvlFqXTxF7mtIvJbKi8aesKElic9+QElL5TJCY+JPwhDbujawR3sZJ1FMOhbLV0yDCsXsqt6VBVelcWW+LGUvCEUZlVgfL5RhOa9m3P2qEW/aYYVe337lrwLYrnD6lBI4lHKJyGX3776m3k8yOLNmM0YZPqPy6v3LqRFTXDuPlBU19qxFwzJ4/nUHSJhg9q4zXWNzZHncuphPMGanzdFmXnkqMbF3Koy47LGFCq1nH7DtUrzfv0rYJckVHUX11fuhVKQMRH7N1nVtoOYeZRED9h5m8pNMisVGhZca2U1fpw X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Apr 2026 01:15:59.9244 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6bdee178-d542-4500-9c65-08dea268360e X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.118.233];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH3PEPF0000000A.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB7522 Content-Type: text/plain; charset="utf-8" When two aliased siblings are in the same iommu_group, they might share the same RID. The reset functions don't support this case, though it is unclear whether there is a real case of having an ATS capable device on a PCI/PCI-X bus. Theoretically, however, if two aliased devices are resetting concurrently, one might be unblocked prematurely in the middle of the reset by the other sibling who completes the reset first. This isn't a regression from this series but it's better to spit a warning, so we can know if such use case is common enough for us to make subsequent patches for its coverage. Signed-off-by: Nicolin Chen --- drivers/iommu/iommu.c | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index f21d352a67f70..dd53cce12087c 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -4057,6 +4057,41 @@ int pci_dev_reset_iommu_prepare(struct pci_dev *pdev) } EXPORT_SYMBOL_GPL(pci_dev_reset_iommu_prepare); =20 +static int __group_device_cmp_dma_alias(struct pci_dev *dev, u16 alias, + void *data) +{ + return alias =3D=3D *(u16 *)data; +} + +static int group_device_cmp_dma_alias(struct pci_dev *dev, u16 alias, + void *data) +{ + return pci_for_each_dma_alias(data, __group_device_cmp_dma_alias, + &alias); +} + +static bool group_device_dma_alias_is_blocked(struct iommu_group *group, + struct group_device *gdev) +{ + struct group_device *sibling; + + lockdep_assert_held(&group->mutex); + + if (!dev_is_pci(gdev->dev)) + return false; + + for_each_group_device(group, sibling) { + if (sibling =3D=3D gdev || !sibling->blocked || + !dev_is_pci(sibling->dev)) + continue; + if (pci_for_each_dma_alias(to_pci_dev(gdev->dev), + group_device_cmp_dma_alias, + to_pci_dev(sibling->dev))) + return true; + } + return false; +} + /** * pci_dev_reset_iommu_done() - Restore IOMMU after a PCI device reset is = done * @pdev: PCI device that has finished a reset routine @@ -4096,6 +4131,20 @@ void pci_dev_reset_iommu_done(struct pci_dev *pdev) if (WARN_ON(!group->blocking_domain)) return; =20 + if (group_device_dma_alias_is_blocked(group, gdev)) { + /* + * FIXME: DMA aliased devices share the same RID, which would be + * convoluted to handle, as "gdev->blocked" is not sufficient: + * - "blocked" state is effectively shared across these devices + * - if the core skipped the blocking on the second device, the + * IOMMU driver's attachment state would diverge from the HW + * state + * For now, just warn and see whether real ATS use cases hit it. + */ + pci_warn(pdev, + "DMA-aliased sibling may be prematurely unblocked\n"); + } + /* * Re-attach RID domain back to group->domain * --=20 2.43.0