From nobody Mon Dec 1 21:31:56 2025 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011057.outbound.protection.outlook.com [40.107.208.57]) (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 9BA3E2DF151; Thu, 27 Nov 2025 17:06:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263217; cv=fail; b=KUs2cU1v2I2nZYDCnDR+ogeuUxO4h5vyzuiMforVLfZoYEhOBOumK7MYiy4w9zOpKaa7lzXdFcs05SYHKLqggJPhQf7fqYsUbe14ULNhGEVT4C1h6yCvvfSvkrCx7H9Jbti0QTX6b3kkafmChvfZTiupNsewIJtKEN6vfzw+1ak= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263217; c=relaxed/simple; bh=nn0n+n/hnS9VpGsJ3RErEx4B0+f0G9fOjiNtPDIl9do=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kmpT/a2WQpFL6N7r6cIKKHhDXBGDYtf77kxq8usyXYzxgXsT887l+R+0MmVs0VVu2Sy2ea+6Zijby9tjLpEoE6HheVL84hEpbHHd2goXGgbJAwaG8Da6JEEXtFgcT8wH6DrnzrEsnH6QZbm0hRMS1B7OF/o6Yl1v4YB/2bh0ZSI= 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=R3fgYdyX; arc=fail smtp.client-ip=40.107.208.57 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="R3fgYdyX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ONPMGZ29fNv10M8GHjHDhigJgKegUF6MTow9IfhzzdoMhm/LVjZXjH5QJpjhROroh3oGm+iKwHy1sbQNUMCrWdDeZggGs9LlxKa1CH5Ti/isXeUV2ulSZN//xVehvoMHUVt1GsW/ybAZY7aJKlSxWb+sY1DEzn/5b7xsYQDq7T5ndL5XFQxdikHEHKsixzGRbYgvs4m8L0JckJOvy0qJkcZu8thaXeH/+2ei4OzbJdNXHDNnAUbBuihL5v4Bbd/eFSnkXgn4nR/bcZw3EzgLuKS8Cf4KM3R0KVom1qTkhx4wWsv6uaH4kGIoujr93dWHPGT3k55hFyM3IGNfMHnwCg== 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=K1Sr137aLYYLLYLH/I78lfSMqcDUFxgV2CyDrBb/RRk=; b=wZi2C3L/IJPqiHHVnAnveSNGp9yQZlxOcLFy4l0HOkX0qeQi8CYhxUU6A7FLTauymMlJlvxfZIkxpBIDdH74r1pG3alY9l0CIfcd3VeatwFEGZ0vIaOXfZ3D1leer6ElrIFSBh8l3h0+necnjHMDUKtn1TwMU7B0T1oCgRietjGEBpOvYx0T4mF3RpaLnhXuZr2qrHrmblI3QVDfRwApE0eU5s3YnNI/ex8jHeNb1FLu6faGu/9fu1kGf7KkqEmg/g+MHmc4dOfyBN3v4z4Cazze3Vv07KpHlwBriOp3F1ODHwliiNMMAF+Tn6tDTm6skW9OH9C0g1WjHMd+EiWDGg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.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=K1Sr137aLYYLLYLH/I78lfSMqcDUFxgV2CyDrBb/RRk=; b=R3fgYdyX/bCgQagiQbGn7PG8UcVK9fZ26wDq3WPKoqYhOVLmSRgSZQA2D5KK47Ph/HEkEkH0WjehRIVaV/ntxhQW7oV/uloXvO5OKHw1HNRB9vE3nuAGIk63UJhlKU2Bzi6ELCvC6491Q77e7NLi/ulC0DR8NVrda2W5U9mpI4pRRrJD3I3EYQvZQ5DaMo/OjuDaXW1g4ssDbIp/7YbRPEgQn7DLDAc8HTpmAkNejZrKqqVuMmAJ2agCstGJLOr8fZnMOqD3Xjr8a2px+6T7SBH0+xSAiy4asTEUzKFIYXW74TEjsM1XKwi4DWjGE29ZBJItgxrBidk0iIwUt30VYQ== Received: from CH5P223CA0002.NAMP223.PROD.OUTLOOK.COM (2603:10b6:610:1f3::10) by MN2PR12MB4440.namprd12.prod.outlook.com (2603:10b6:208:26e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.14; Thu, 27 Nov 2025 17:06:51 +0000 Received: from DS3PEPF000099D4.namprd04.prod.outlook.com (2603:10b6:610:1f3:cafe::75) by CH5P223CA0002.outlook.office365.com (2603:10b6:610:1f3::10) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9366.15 via Frontend Transport; Thu, 27 Nov 2025 17:06:48 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by DS3PEPF000099D4.mail.protection.outlook.com (10.167.17.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.7 via Frontend Transport; Thu, 27 Nov 2025 17:06:51 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:34 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:33 -0800 Received: from gb-nvl-073-compute01.l16.internal032k18.bmc032b17.internal032f11.internal032huang.bmc032l04.bmc (10.127.8.11) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 27 Nov 2025 09:06:33 -0800 From: To: , , , , , , , , CC: , , , , , , , , , , , , , , , , Subject: [PATCH v9 1/6] vfio: refactor vfio_pci_mmap_huge_fault function Date: Thu, 27 Nov 2025 17:06:27 +0000 Message-ID: <20251127170632.3477-2-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251127170632.3477-1-ankita@nvidia.com> References: <20251127170632.3477-1-ankita@nvidia.com> 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: DS3PEPF000099D4:EE_|MN2PR12MB4440:EE_ X-MS-Office365-Filtering-Correlation-Id: dcd56bc0-4042-4436-75bd-08de2dd75bd4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|7416014|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?cLMzFHkppRiUB28uocksoSfee6jpQKyZyu4wihIJpOxCqLvH/EyvfFvL4sED?= =?us-ascii?Q?143wohv6zCy93lmLY1GGJbkf/o7zGmdmnojRr2gDu0GOCriro24SN/d6yFil?= =?us-ascii?Q?XABb0iRYVyKxOoaChNKVRlsRPZVH+3XNQT9m8GrK90H7rdtylXlkit+WgdTk?= =?us-ascii?Q?HGOieFTtoEybBpvzu3wnxb4jR69lY/tovw0S4So7AeAIKRG3xPiYtV9YHDIU?= =?us-ascii?Q?Km2CTmAA24Kf+oY9VQsTvi1BD3BnngEhFzid1QG82n6t9pcSYIQAJ/84iUMk?= =?us-ascii?Q?fx6KTXE8hODAbVKS0/k3QjNSgWb8ic37GTru+dXaGvvcEogZHTkfVL/ebcD1?= =?us-ascii?Q?kfagVh1TikFZ0MgvNTc5YmYdUVLv8xv4eSKwGUI4x/punzjpPBolin380pBP?= =?us-ascii?Q?pn2oZoxE2TIWDZ8tpztESNAJ6XP1Fv7EhKdEMxTeMg31w0VG/RGT7N0oiJT0?= =?us-ascii?Q?aC6ukzX9mTvewJCIKhwIDVAv6j+xfNZJhZXM8uzjbtMU9tuIZsqHQWW5NUgf?= =?us-ascii?Q?q6Coj+zo0QfPwLv1Jdj1aFZXSDrDrunhjq0gJmBN2PMcS/Hd12KWrB2MmsxO?= =?us-ascii?Q?OVdyF0JanxxX9+PLAQZhPqUgppL8w59h/qHmdEaoZeiF2t8sBnZqGbCyFisL?= =?us-ascii?Q?A7vrlgBzAYfogsgSFtm6RM67LbVCKU6sbmSNnXvdKeTrN2ZWaJQnRAlwzTtD?= =?us-ascii?Q?z4i5FhWEoVlGeLz7UqyO8qCTGaRLh+pA0jF/LkvRAc+7fo09MuPp993hWsYB?= =?us-ascii?Q?Upwd9E0NRWAuA+MZKAL8eswBELDzFyKf7R9UAUIrukYcKein0KBcFbZT9xO8?= =?us-ascii?Q?g1/ASgUEiugXO8TkHgfv7LPTuxcOe+Y3eyPyZZIRPpZon74fdnAcWAPzjNR5?= =?us-ascii?Q?XGP29jp5Hb5HyFMZJ3JUh2wh4Im7htpcpn7DbiQxoB1ALxqnH6P7zwvuwJom?= =?us-ascii?Q?b7BoErZENg4MhYRtvdRWb9xg8w8gWPplR17r5cZhkFjUIBsX0ZlekfxIbTCz?= =?us-ascii?Q?e0h98/DKpLE6YGdnBHBv6BIq47IpDPSxM6qjdrFSdHFJ4aeCr+ZVQBNkjenP?= =?us-ascii?Q?a/NhNimaeZiMiz/cn9qOw5e5IZfEeQounFqw3yY5aMwyXqToKFAWggVD1IeY?= =?us-ascii?Q?wv1dlMBiLuf3wmOZuJLusBx01MPmXVCpjV257nWF1ZNW4wVMAr7zsooKRVTo?= =?us-ascii?Q?N1ayQ+hpnNMOsPBD0q4rAQNqiAd0tOeVzOEIROp//OOkvZxLZ40P7S2RGKHy?= =?us-ascii?Q?KVoQhqwSwPUTRlvUKyaSCXuOzP9UslXLthkDTEQELJ01d8aiKWMbOgoOxFtF?= =?us-ascii?Q?uun7rDz0UZVUyVSq5+OBur9DrTquoaRFTOhmVWHF6M8aDNhlXfU/LrxB+Hfd?= =?us-ascii?Q?Fl6veNB4e/dYRboP2u6Zyu4xlHNcPw+8CzzWlislrvo9mp/tWkUtrAo3HWvQ?= =?us-ascii?Q?INRc+QYrjhdg9Zgj2EtVs1fVB3we5FPvGjqQATmsQ5Je2izVHD98dVjkq5UZ?= =?us-ascii?Q?F/xs3CIw80z8ajpxLU9RAr7lD5eTzMdG9puN4HjU3GwXNsvEM3+4lJjnn3zL?= =?us-ascii?Q?OfIdyT9J4+HHAmkYuHs=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(376014)(7416014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 17:06:51.3918 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: dcd56bc0-4042-4436-75bd-08de2dd75bd4 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS3PEPF000099D4.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4440 Content-Type: text/plain; charset="utf-8" From: Ankit Agrawal Refactor vfio_pci_mmap_huge_fault to take out the implementation to map the VMA to the PTE/PMD/PUD as a separate function. Export the new function to be used by nvgrace-gpu module. Move the alignment check code to verify that pfn and VMA VA is aligned to the page order to the header file and make it inline. No functional change is intended. Cc: Shameer Kolothum Cc: Alex Williamson Cc: Jason Gunthorpe Reviewed-by: Shameer Kolothum Signed-off-by: Ankit Agrawal --- drivers/vfio/pci/vfio_pci_core.c | 54 ++++++++++++++++---------------- include/linux/vfio_pci_core.h | 13 ++++++++ 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_c= ore.c index 7dcf5439dedc..a1b8ddea1011 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -1640,49 +1640,49 @@ static unsigned long vma_to_pfn(struct vm_area_stru= ct *vma) return (pci_resource_start(vdev->pdev, index) >> PAGE_SHIFT) + pgoff; } =20 -static vm_fault_t vfio_pci_mmap_huge_fault(struct vm_fault *vmf, - unsigned int order) +vm_fault_t vfio_pci_vmf_insert_pfn(struct vfio_pci_core_device *vdev, + struct vm_fault *vmf, + unsigned long pfn, + unsigned int order) { - struct vm_area_struct *vma =3D vmf->vma; - struct vfio_pci_core_device *vdev =3D vma->vm_private_data; - unsigned long addr =3D vmf->address & ~((PAGE_SIZE << order) - 1); - unsigned long pgoff =3D (addr - vma->vm_start) >> PAGE_SHIFT; - unsigned long pfn =3D vma_to_pfn(vma) + pgoff; - vm_fault_t ret =3D VM_FAULT_SIGBUS; - - if (order && (addr < vma->vm_start || - addr + (PAGE_SIZE << order) > vma->vm_end || - pfn & ((1 << order) - 1))) { - ret =3D VM_FAULT_FALLBACK; - goto out; - } - - down_read(&vdev->memory_lock); + lockdep_assert_held_read(&vdev->memory_lock); =20 if (vdev->pm_runtime_engaged || !__vfio_pci_memory_enabled(vdev)) - goto out_unlock; + return VM_FAULT_SIGBUS; =20 switch (order) { case 0: - ret =3D vmf_insert_pfn(vma, vmf->address, pfn); - break; + return vmf_insert_pfn(vmf->vma, vmf->address, pfn); #ifdef CONFIG_ARCH_SUPPORTS_PMD_PFNMAP case PMD_ORDER: - ret =3D vmf_insert_pfn_pmd(vmf, pfn, false); - break; + return vmf_insert_pfn_pmd(vmf, pfn, false); #endif #ifdef CONFIG_ARCH_SUPPORTS_PUD_PFNMAP case PUD_ORDER: - ret =3D vmf_insert_pfn_pud(vmf, pfn, false); + return vmf_insert_pfn_pud(vmf, pfn, false); break; #endif default: - ret =3D VM_FAULT_FALLBACK; + return VM_FAULT_FALLBACK; + } +} +EXPORT_SYMBOL_GPL(vfio_pci_vmf_insert_pfn); + +static vm_fault_t vfio_pci_mmap_huge_fault(struct vm_fault *vmf, + unsigned int order) +{ + struct vm_area_struct *vma =3D vmf->vma; + struct vfio_pci_core_device *vdev =3D vma->vm_private_data; + unsigned long addr =3D vmf->address & ~((PAGE_SIZE << order) - 1); + unsigned long pgoff =3D (addr - vma->vm_start) >> PAGE_SHIFT; + unsigned long pfn =3D vma_to_pfn(vma) + pgoff; + vm_fault_t ret =3D VM_FAULT_FALLBACK; + + if (is_aligned_for_order(vma, addr, pfn, order)) { + scoped_guard(rwsem_read, &vdev->memory_lock) + ret =3D vfio_pci_vmf_insert_pfn(vdev, vmf, pfn, order); } =20 -out_unlock: - up_read(&vdev->memory_lock); -out: dev_dbg_ratelimited(&vdev->pdev->dev, "%s(,order =3D %d) BAR %ld page offset 0x%lx: 0x%x\n", __func__, order, diff --git a/include/linux/vfio_pci_core.h b/include/linux/vfio_pci_core.h index f541044e42a2..3117a390c4eb 100644 --- a/include/linux/vfio_pci_core.h +++ b/include/linux/vfio_pci_core.h @@ -119,6 +119,9 @@ ssize_t vfio_pci_core_read(struct vfio_device *core_vde= v, char __user *buf, size_t count, loff_t *ppos); ssize_t vfio_pci_core_write(struct vfio_device *core_vdev, const char __us= er *buf, size_t count, loff_t *ppos); +vm_fault_t vfio_pci_vmf_insert_pfn(struct vfio_pci_core_device *vdev, + struct vm_fault *vmf, unsigned long pfn, + unsigned int order); int vfio_pci_core_mmap(struct vfio_device *core_vdev, struct vm_area_struc= t *vma); void vfio_pci_core_request(struct vfio_device *core_vdev, unsigned int cou= nt); int vfio_pci_core_match(struct vfio_device *core_vdev, char *buf); @@ -161,4 +164,14 @@ VFIO_IOREAD_DECLARATION(32) VFIO_IOREAD_DECLARATION(64) #endif =20 +static inline bool is_aligned_for_order(struct vm_area_struct *vma, + unsigned long addr, + unsigned long pfn, + unsigned int order) +{ + return !(order && (addr < vma->vm_start || + addr + (PAGE_SIZE << order) > vma->vm_end || + !IS_ALIGNED(pfn, 1 << order))); +} + #endif /* VFIO_PCI_CORE_H */ --=20 2.34.1 From nobody Mon Dec 1 21:31:56 2025 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013005.outbound.protection.outlook.com [40.93.196.5]) (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 6C1EC2DFA4A; Thu, 27 Nov 2025 17:06:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.5 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263218; cv=fail; b=RhMiTzuCNCpK2kkPhFjutJRX1pw5oXfTT+t1o2PRhcAGwu6wnoWf3149MUzrs8i1h6mfugXpuc5G3wmBY7rAvhWl8Uv1YaP8L0LlLukcWtKWrAmCJVeIMBUfsbIisOBAwYmfaOkwhEugIkpgaf5zBxG0Tl9bFxyBWPeCLlzN/xs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263218; c=relaxed/simple; bh=f12lu7twiuNN3Fezu5gWZERPt5ETMUH1++wMYlwLh6w=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=NLE9VaWYD/y3A6LnIjJxbbGOv2w2rulr5Elb4AwYydnXbgzyh/PAfr8BesRfs8SeenQ601KIdgCjufvlZEqCyuK0mE0rKUlXZWuwKNaxwQMtAgWJjgJbIDoNa2f5ItFqLgOswUZ0MBQjP3SFY4pyW5zWyGhIH7aoFah6vNEScsc= 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=bllXJrjA; arc=fail smtp.client-ip=40.93.196.5 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="bllXJrjA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g34TSM1670riOTRY8Fg0fKx+Edzzytwo5ijjsAlyhBdYoWQMvJUXGq04sIfPmicH3l4zxr4QWKalFrcxZgx2wLEi4GSZkXBxcPdYMG0qza+8oAb+i7zkO3bcA+8k4Z0xSq1TJFmoAm9L8oFpQ/uU4dySKx6U/Scsz+kLST0ZOv96SrToRHP9KC8a4/kGzw3IUE/DyMO0WcRFNHyDKcHf56S+J72piprloWKo7Dch9eswH7HNec81DRTVNjsBOmMKXoz8Y+oF8wO+4ivyt7yhmpSoFlDPVAollsnsao/332/6BDR4oTPpkLtCec4UFt0OOlCMx5Dw+yFDTeMhzqyHHw== 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=5xRXpfwLFBHzgFIEYqVGqcU0z3cHh7tKTU8tqAh/LAE=; b=E/Jzv2i3/sSw9Ci4ZNUICK9yXstgGM0zVz91kDQhLACiBkUCtQgLxfDlC9wLrjCKiuXgDQB1sSOxMrB0JNapgJZgG3zY9auAwbUw5pGPdgQ8dIeELM2RQeY4jrCPnyPzp+3vxUBtH/WE7QvKj1CgZh54aOoJpconxy7L4MhXsZm8GEap9YQB9fK7NXUsurV/kqy8OLhzqDKFe1kET062TSoMhmZWGAGe8AFZb2rm2jvekS3qI8d5tKGxfLS/10dwXZs9rCsdTwpipaWQqMSbhlBpk6DTfeFBk4aR8fxq/olTbNrQdrGplDuu2tXY0zZjapL4gWHZY09yuOWYEq5CCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=vger.kernel.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=5xRXpfwLFBHzgFIEYqVGqcU0z3cHh7tKTU8tqAh/LAE=; b=bllXJrjAkaKQA6EpYuF8PC/sxJ11BYH41YZzGOIDl5rGKbTfB0jehM2YpMM0wBe4Yao0sT5QDLy58KGShBT98xsTV4+9C546N4HlrMWVBFskG62C5kevl5is9puUoz/eMfn1/T7/JHhW/sweqqu02n34qnfdeFrfhUSpJ8lihhfVi/PeEG5ZxK7y+PI/Sah8b8YR/hl0EPtVgkEy9h1x6x514gpty0TeqNlbIFCmAgnJhpFSEKRjAsySHvGv50zt1ko20z8CTNpfrbU/70MSu5wbbr/BjQS7IwW9XG8IfEdrjKiOT/jeTtCqLfvmSRfMkcAyvfSHlF5HX93i2TEKqQ== Received: from DM6PR14CA0058.namprd14.prod.outlook.com (2603:10b6:5:18f::35) by CH1PPF73CDB1C12.namprd12.prod.outlook.com (2603:10b6:61f:fc00::615) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.13; Thu, 27 Nov 2025 17:06:52 +0000 Received: from DS3PEPF000099D9.namprd04.prod.outlook.com (2603:10b6:5:18f:cafe::9) by DM6PR14CA0058.outlook.office365.com (2603:10b6:5:18f::35) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9366.14 via Frontend Transport; Thu, 27 Nov 2025 17:06:52 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by DS3PEPF000099D9.mail.protection.outlook.com (10.167.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.7 via Frontend Transport; Thu, 27 Nov 2025 17:06:52 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:35 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:34 -0800 Received: from gb-nvl-073-compute01.l16.internal032k18.bmc032b17.internal032f11.internal032huang.bmc032l04.bmc (10.127.8.11) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 27 Nov 2025 09:06:34 -0800 From: To: , , , , , , , , CC: , , , , , , , , , , , , , , , , Subject: [PATCH v9 2/6] vfio/nvgrace-gpu: Add support for huge pfnmap Date: Thu, 27 Nov 2025 17:06:28 +0000 Message-ID: <20251127170632.3477-3-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251127170632.3477-1-ankita@nvidia.com> References: <20251127170632.3477-1-ankita@nvidia.com> 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: DS3PEPF000099D9:EE_|CH1PPF73CDB1C12:EE_ X-MS-Office365-Filtering-Correlation-Id: d6b8b85e-63a5-4e6a-632e-08de2dd75c38 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|82310400026|1800799024|7416014|376014|13003099007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Ff1GlfabECURx7bRkAvh5P1za9uzjnn0UwsqxG8WSgH7usPQBZLiZG7g0dmJ?= =?us-ascii?Q?hHbJs73KYMUEK7pYpY+f1D6Q3tz/B+kh63tj+w4JOY/QaD2Cq+auqEBPvEjy?= =?us-ascii?Q?BaTQuHk/hAYH01tLh4iYdmCaJ68N4S96oN9Or+msQOYUAOTSJlDWcAvQyvIU?= =?us-ascii?Q?zcXQhbzLRqq+EyuHDPUD/sNl0/RxixEgrTfZEusdArdg3pfEb6SYwP6AbZHO?= =?us-ascii?Q?CMRXM+lcMCIg414IXiKUHXmmeoTdRA4M2H8PsPfJYg6yHO0n5JbLd5QTT+kY?= =?us-ascii?Q?LOZKx+K7+v6FiJShJalFjxvCT2mvunOrFRsNqjn6m06mSvbDt1tc0yfsm63T?= =?us-ascii?Q?2rZ5TJhg7oF760RisaiM0KsSZmimFrYMh1z3GrZZoCX4vyUtPZGMLvY3TgCW?= =?us-ascii?Q?ALcCtj7bLiXIj7gdjIx1txmwPKusiwqx5Olp/YjyIyFmrjks+ugg2H0U7Ksc?= =?us-ascii?Q?+wjYshgmii+isZbx1I8dZhqrrwv8SxEAzMoDw5cZaysLslubna0pR/5fUU5m?= =?us-ascii?Q?/ZOGSGPE2fAJmgx3k0Z2bhTXe/mZc0+T9KCwG1du0m1adxaCP88wGdXw9UKY?= =?us-ascii?Q?e8LERUWMhYJ+xtgx8AKj+mxIrufP/7gktMgFGapNag7zJd2FguvA0VPYrR55?= =?us-ascii?Q?PSRJYrEVh26DZWK4bjFKLmdotMlgAvliKXexzmENrYPZjl7EKe1guxD9uzmf?= =?us-ascii?Q?nRI5rpMgOtVYly1FhzM4edp4hL/R5bbrwa7XhR60+vDsr8f3acgSMPgktipS?= =?us-ascii?Q?WiK2tJ0XtNorhQoHL7lmtfyV9IUD+ub2MmravRagvpHorAP9lcq0RNdlPe1n?= =?us-ascii?Q?hh251fIo3Hz2O8WXmwXiOIsESyR1bqWngEFu0Wa4GfU4qm07zzpEfg8Zo3y9?= =?us-ascii?Q?RJY2d5AZWicHzEjnhrm8vnFGO9tZXuODHqoFXyyzpGiam/NdiiZMn2/wzZfJ?= =?us-ascii?Q?I4sM6Ekf4jHYIudMj0hb30LrNQwSFcdltjdL0kK0HVHGDmYFSmapHwTHQc52?= =?us-ascii?Q?CDxo45+K3LuwKo48vpfJIRhmFE/PBbBm5byQuhvGLM7QwDJzLJwS7YTn86PI?= =?us-ascii?Q?FqCKRTT0CpDEn3vxAYagIm23HysyMt+0zgq+5ZDEr+lbm1s4jJYz6AIIKpy+?= =?us-ascii?Q?GAqc2ZgyMTJeprEnLdvSqxwnhjI/9R4ziV49gPQ5Bvgepn+4PIPUzypOWozg?= =?us-ascii?Q?5fXj05osfwOjEB6KlXAV2N+Eqt99JPR6Q9jv78QwFoPqvBMyY3LP1+EL2aG2?= =?us-ascii?Q?fDtwDaDZqDO2eJwPMlGv+pQOenKYlhPkiZrczG0aLkWmaJIrNYyctqWMvBLU?= =?us-ascii?Q?pqcENfa7fjS/TOLJg1y6ADLOoI+wX0XB72r3RCutp78cEx5yMDRgIprWRJKw?= =?us-ascii?Q?gR9ieC2m1xoRfdh+qrz01MVoaxE0YXMemu95EYVCgda5I1jYf+k6IxP9EHfI?= =?us-ascii?Q?HmkTphZZkD/TmqXScOZUqmjg6TIArwDCzn2vLuGdTbDxM9Z460mXO57ZBKgG?= =?us-ascii?Q?NBICfnVEHsIvl5Qw/AM/xBV2TrnC4Ha55vXQYXY/48PTyZzWvro4M5H7Kv8I?= =?us-ascii?Q?CCIxvvlXMnha/rIfWPw=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(82310400026)(1800799024)(7416014)(376014)(13003099007);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 17:06:52.0155 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d6b8b85e-63a5-4e6a-632e-08de2dd75c38 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS3PEPF000099D9.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PPF73CDB1C12 Content-Type: text/plain; charset="utf-8" From: Ankit Agrawal NVIDIA's Grace based systems have large device memory. The device memory is mapped as VM_PFNMAP in the VMM VMA. The nvgrace-gpu module could make use of the huge PFNMAP support added in mm [1]. To make use of the huge pfnmap support, fault/huge_fault ops based mapping mechanism needs to be implemented. Currently nvgrace-gpu module relies on remap_pfn_range to do the mapping during VM bootup. Replace it to instead rely on fault and use vfio_pci_vmf_insert_pfn to setup the mapping. Moreover to enable huge pfnmap, nvgrace-gpu module is updated by adding huge_fault ops implementation. The implementation establishes mapping according to the order request. Note that if the PFN or the VMA address is unaligned to the order, the mapping fallbacks to the PTE level. Link: https://lore.kernel.org/all/20240826204353.2228736-1-peterx@redhat.co= m/ [1] Cc: Shameer Kolothum Cc: Alex Williamson Cc: Jason Gunthorpe Cc: Vikram Sethi Reviewed-by: Zhi Wang Reviewed-by: Shameer Kolothum Signed-off-by: Ankit Agrawal --- drivers/vfio/pci/nvgrace-gpu/main.c | 81 +++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 22 deletions(-) diff --git a/drivers/vfio/pci/nvgrace-gpu/main.c b/drivers/vfio/pci/nvgrace= -gpu/main.c index e346392b72f6..232dc2df58c7 100644 --- a/drivers/vfio/pci/nvgrace-gpu/main.c +++ b/drivers/vfio/pci/nvgrace-gpu/main.c @@ -130,6 +130,59 @@ static void nvgrace_gpu_close_device(struct vfio_devic= e *core_vdev) vfio_pci_core_close_device(core_vdev); } =20 +static unsigned long addr_to_pgoff(struct vm_area_struct *vma, + unsigned long addr) +{ + u64 pgoff =3D vma->vm_pgoff & + ((1U << (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT)) - 1); + + return ((addr - vma->vm_start) >> PAGE_SHIFT) + pgoff; +} + +static vm_fault_t nvgrace_gpu_vfio_pci_huge_fault(struct vm_fault *vmf, + unsigned int order) +{ + struct vm_area_struct *vma =3D vmf->vma; + struct nvgrace_gpu_pci_core_device *nvdev =3D vma->vm_private_data; + struct vfio_pci_core_device *vdev =3D &nvdev->core_device; + unsigned int index =3D + vma->vm_pgoff >> (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT); + vm_fault_t ret =3D VM_FAULT_FALLBACK; + struct mem_region *memregion; + unsigned long pfn, addr; + + memregion =3D nvgrace_gpu_memregion(index, nvdev); + if (!memregion) + return VM_FAULT_SIGBUS; + + addr =3D ALIGN_DOWN(vmf->address, PAGE_SIZE << order); + pfn =3D PHYS_PFN(memregion->memphys) + addr_to_pgoff(vma, addr); + + if (is_aligned_for_order(vma, addr, pfn, order)) { + scoped_guard(rwsem_read, &vdev->memory_lock) + ret =3D vfio_pci_vmf_insert_pfn(vdev, vmf, pfn, order); + } + + dev_dbg_ratelimited(&vdev->pdev->dev, + "%s order =3D %d pfn 0x%lx: 0x%x\n", + __func__, order, pfn, + (unsigned int)ret); + + return ret; +} + +static vm_fault_t nvgrace_gpu_vfio_pci_fault(struct vm_fault *vmf) +{ + return nvgrace_gpu_vfio_pci_huge_fault(vmf, 0); +} + +static const struct vm_operations_struct nvgrace_gpu_vfio_pci_mmap_ops =3D= { + .fault =3D nvgrace_gpu_vfio_pci_fault, +#ifdef CONFIG_ARCH_SUPPORTS_HUGE_PFNMAP + .huge_fault =3D nvgrace_gpu_vfio_pci_huge_fault, +#endif +}; + static int nvgrace_gpu_mmap(struct vfio_device *core_vdev, struct vm_area_struct *vma) { @@ -137,10 +190,8 @@ static int nvgrace_gpu_mmap(struct vfio_device *core_v= dev, container_of(core_vdev, struct nvgrace_gpu_pci_core_device, core_device.vdev); struct mem_region *memregion; - unsigned long start_pfn; u64 req_len, pgoff, end; unsigned int index; - int ret =3D 0; =20 index =3D vma->vm_pgoff >> (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT); =20 @@ -157,17 +208,18 @@ static int nvgrace_gpu_mmap(struct vfio_device *core_= vdev, ((1U << (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT)) - 1); =20 if (check_sub_overflow(vma->vm_end, vma->vm_start, &req_len) || - check_add_overflow(PHYS_PFN(memregion->memphys), pgoff, &start_pfn) || check_add_overflow(PFN_PHYS(pgoff), req_len, &end)) return -EOVERFLOW; =20 /* - * Check that the mapping request does not go beyond available device - * memory size + * Check that the mapping request does not go beyond the exposed + * device memory size. */ if (end > memregion->memlength) return -EINVAL; =20 + vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP); + /* * The carved out region of the device memory needs the NORMAL_NC * property. Communicate as such to the hypervisor. @@ -184,23 +236,8 @@ static int nvgrace_gpu_mmap(struct vfio_device *core_v= dev, vma->vm_page_prot =3D pgprot_writecombine(vma->vm_page_prot); } =20 - /* - * Perform a PFN map to the memory and back the device BAR by the - * GPU memory. - * - * The available GPU memory size may not be power-of-2 aligned. The - * remainder is only backed by vfio_device_ops read/write handlers. - * - * During device reset, the GPU is safely disconnected to the CPU - * and access to the BAR will be immediately returned preventing - * machine check. - */ - ret =3D remap_pfn_range(vma, vma->vm_start, start_pfn, - req_len, vma->vm_page_prot); - if (ret) - return ret; - - vma->vm_pgoff =3D start_pfn; + vma->vm_ops =3D &nvgrace_gpu_vfio_pci_mmap_ops; + vma->vm_private_data =3D nvdev; =20 return 0; } --=20 2.34.1 From nobody Mon Dec 1 21:31:56 2025 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011059.outbound.protection.outlook.com [52.101.52.59]) (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 9DCC62DECDF; Thu, 27 Nov 2025 17:06:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.59 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263216; cv=fail; b=dWHyOytQ9vNXYbV9ofkxDzBqMxaJHSt7UUjwndtfDbOIk6n9s4tjO2fEzbVAxecGTci0JYS1JCwdzUfkP4guyKsJiu7MVY2WxCse1jLYh0YCkB5kjeDeeRG340EMw1ao7LzqYb7LMDhZrT4NhUlbQROYT+GYriRgyaRYIhCvI0w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263216; c=relaxed/simple; bh=bdM4gZHhCQldYWCTNEj5cWfHGKIXSwMOpuKffYMH6Wg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=i2PkcR73XOix9gzEW6VeonA3WMOV9oA1npkn1oEHZgbp+vMfHrVssgBpxdJpHHGIfV8KQ/5n7uOlR4ywCAUSA11f7RNlrTDZWrG+i14hQLzLiS42f8WE3vdSFDmGlPyefsMRo7Yp4XDB5/1EMel7oqUu8DPb5+xgXSCNY8jzHu8= 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=Dtz/cQp6; arc=fail smtp.client-ip=52.101.52.59 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="Dtz/cQp6" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=J5hsjckp+uvO1+EmQ/ic63yxp0z6JmrR1/5Izi/RQBVOp3I+hgUbddvWozM0DKrqlBGUktTzT3havPNhGgJnQWvHsNwae9v0vA8Ww/qan9K3oEw2jEV9/VTgBhF5NrjqGuH28j2SxqAqwl3UngBi130f5sTwyhIL8XLykFY78pROVCPSLwU3fPfcH5J5PDh+Emd9pYt9lMaOYhmNVhiTxXvSfQYnhkTQoJTb/ApOZxJWKs7bvExTYuXiwYF4+tGZMd9OXZR56qAjBFNFphAM9uuVanfHKl9pXuwQLL12OymV4MvXCtdTN2BCYiAqAvIAQDKKNtlZG+r6mLXtauCHDQ== 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=82ZVQ3scoEnYFpRbXvZguSvHf+1QkmHI4zb+asYHfA4=; b=OaFTw5+lpczZ0aHclLwByFQPQrGjLOhzGGvXM1Cu0Hd8lyp3FCCqhP98asnp1r79s3W6HcUnizBLR9Mx1BonCd3GrraGlAo5Tv+UGV7SCn0+/FwdDAg8TSXYNoVPvElKRkPpTNU1qfJPat/WSmz2N1o3V42EP3b2TRehmWLBgyq3F5MjX/bs6FHfBg2yS/Man5jla0T9HLxcbwOGe3bRGwnyCUMMq0mO8Op1Y89I9Mt6ACezBt3CeISM/mq87SntQmEMwsoLPLCIrRyR4KEaoGTuZD+31q8R5QlaIUpDUm/GWnEBUChotJcMhpJ7QNTj5xQ6OmUytmW6wD6VPwqWcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.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=82ZVQ3scoEnYFpRbXvZguSvHf+1QkmHI4zb+asYHfA4=; b=Dtz/cQp61N5KSr7A47j95gWC4K5DB33bhybgd906RjaHOlIvE+zSfL8UzynbTcjeydB5PRoJDh43Vyu/2ehAdQkNn7kv5ojoQwT8Lr90W95QtamK2oRZPv4cwjUep3M1qHol7xvLhmP+w9SM3n9rFVB6QxotnSX5C2tw9yiCxEfzX6TSYpnvcemDB0xjBFHXKVFrfW07Ks2pMtxtaSHqx1HEOZ+/Nnq3LyeefGdOVBWjynQfOHeZIY/fCEO8rIUnThLcuebhZVNSAyGGN/B0n8L8sBxrwfinHT3SZbG3Dosa1r046jSN5k2gK68Ux6E1pr3uT+Fo3fg/3x6bIxmgcw== Received: from SA0PR11CA0082.namprd11.prod.outlook.com (2603:10b6:806:d2::27) by IA1PR12MB6412.namprd12.prod.outlook.com (2603:10b6:208:3af::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.15; Thu, 27 Nov 2025 17:06:51 +0000 Received: from SA2PEPF00003F68.namprd04.prod.outlook.com (2603:10b6:806:d2:cafe::16) by SA0PR11CA0082.outlook.office365.com (2603:10b6:806:d2::27) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9366.12 via Frontend Transport; Thu, 27 Nov 2025 17:06:51 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SA2PEPF00003F68.mail.protection.outlook.com (10.167.248.43) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.7 via Frontend Transport; Thu, 27 Nov 2025 17:06:50 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:36 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:35 -0800 Received: from gb-nvl-073-compute01.l16.internal032k18.bmc032b17.internal032f11.internal032huang.bmc032l04.bmc (10.127.8.11) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 27 Nov 2025 09:06:35 -0800 From: To: , , , , , , , , CC: , , , , , , , , , , , , , , , , Subject: [PATCH v9 3/6] vfio: use vfio_pci_core_setup_barmap to map bar in mmap Date: Thu, 27 Nov 2025 17:06:29 +0000 Message-ID: <20251127170632.3477-4-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251127170632.3477-1-ankita@nvidia.com> References: <20251127170632.3477-1-ankita@nvidia.com> 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: SA2PEPF00003F68:EE_|IA1PR12MB6412:EE_ X-MS-Office365-Filtering-Correlation-Id: ec321a6f-8b35-4d34-d37e-08de2dd75b9a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|36860700013|82310400026|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?zK2gXzOxVEqlyd5r9WSUU2YsW3G1z3Jd8C9tgfbRn6zgjuvp82fBQGBIxU9S?= =?us-ascii?Q?iUXEDdS2IEsFcbUNdji84FdXm3Rkpw2W3CfJzlxWUdUeqeieY5421GM1WFTQ?= =?us-ascii?Q?dA2z0e7aMY6I27vscf3mX1RBwE5E/d4FOP4wmcibvxLJybbd1lsKmCRBOl51?= =?us-ascii?Q?VLwpp7aU1iYatRSkjFAxJhzrCRtt9+CVHqJrGioODwUrLdaMBfLLerRlQpv5?= =?us-ascii?Q?g10VgvipzJMipFq5DK56Ff/XUuzAc8cFxuPLSMOy4KgBbuBP1jhvARx9+Sh9?= =?us-ascii?Q?3/97zEr+1DRZzmQXt/dsuqYTORP9PEMye+4LVp3ot4TIcogclk7Ac4ujJ2Wm?= =?us-ascii?Q?4QfERIwGJb7PCVRNGY9cd2xdHhnO4ZBsDJFJOvzmFMmVqp3BgtjCBzDPKCTM?= =?us-ascii?Q?tnUHGFcK8MwZvN2EsJjCGsImoSVQMMiNaFl6qzBaXX909uViitENdwxx4VXa?= =?us-ascii?Q?TEevluDuDR3tOAZ0mBqlZw3L2YSInHH9Vjs/LkQIigrNjQ/KyE6iP6uG69Gg?= =?us-ascii?Q?kwrHfUImfW4V6r2qn6ucPGb/5ImCJrFlJJ66v2/afGYafVVvrbXb5BzMiUJI?= =?us-ascii?Q?uY6xhHKYc34OdiydtsTRXOlTvHvqnZwoBAJ+C9uRNuuPJENykoMR8G3aV18H?= =?us-ascii?Q?lRQ3hJlyI9zk1mqTZSrRsmfFNO5uN1XmeCLVDaKWeOiah0hqAM/J+Z0ld7R2?= =?us-ascii?Q?5NsbNjaLIq8rNzDu9osT9dqFG88fOeMK/elo0rcVCv5Kxl05Ka8wbNVi6rCu?= =?us-ascii?Q?GtXLB5/KShtQrxDGq+jbycsWy4Oz5T8SXlP2w4FozoadMVMGz4ZuujNraoJC?= =?us-ascii?Q?Sb48E+nNPrmKDYUWlXlJHBbUacBmmZHtSmrBg9kFsZhMmd+j68TiSkA0sDIr?= =?us-ascii?Q?svJKFSe9jdAxQ9YMuZU1xya6kQp6ji2g5JwDZOnzJ9+1w/nmdS6S4RJWB8jc?= =?us-ascii?Q?1O4k9ed6lNe9PCPbGkgiqS1ZnrcGl9p4+CYATZTaRZvg9dbRLIMfBclQ8yvW?= =?us-ascii?Q?kYCavy1bYIjDHMAAxdjoMKKH3CzdzNq0dfapQWcQ6ocoE4m1CoF0ZqcRWiV2?= =?us-ascii?Q?TN9hgt/RyQjd1ZHdVFFKnOT41WBwr1QhpLuexQnQdrZQSxKbbYiand13gdZK?= =?us-ascii?Q?Yu4HA5Kc3lVMnZRZiJopG7m5aRRAKkSuShWdTVlHBrEGrMXP0iu6A0uY5cvy?= =?us-ascii?Q?buBP/STPLi6RjIBreI2vLkWY+XUrRXiBBbAC9cgT6js5Nu7gGocXDkH8JwKz?= =?us-ascii?Q?QintZDwrzdUDBUfyYG0k+CrmSRzUTLM4b/p+NamLMTZdLKHd/FJ3BW+4ZyWY?= =?us-ascii?Q?S7eZV/Zmajwegm9NZ/+xK7LuVvG33Y/H+jYiEJMKyH3PtNMFNElMAF7pOKbc?= =?us-ascii?Q?j63KRuvzpDChZFGhUJw/HgBzyGzjo5IsGRODY0/u4IZgKFtYodybBlNUhPCA?= =?us-ascii?Q?0P/WyoGEfZ+OUofDgsL0zm72qKYhUJZ1SCMgyNeN7sRHhx9cgUF7A7bJmxkh?= =?us-ascii?Q?iwSdsFNwCCdK6E/IYdnzb/gftyWJLSLJJoD5y/O331vIK+KnfEGHbBFjjBby?= =?us-ascii?Q?NaLx63Xho4syWv+cm60=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(376014)(7416014)(36860700013)(82310400026)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 17:06:50.9915 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ec321a6f-8b35-4d34-d37e-08de2dd75b9a X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00003F68.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6412 Content-Type: text/plain; charset="utf-8" From: Ankit Agrawal Remove code duplication in vfio_pci_core_mmap by calling vfio_pci_core_setup_barmap to perform the bar mapping. No functional change is intended. Cc: Donald Dutile Reviewed-by: Shameer Kolothum Reviewed-by: Zhi Wang Suggested-by: Alex Williamson Signed-off-by: Ankit Agrawal --- drivers/vfio/pci/vfio_pci_core.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_c= ore.c index a1b8ddea1011..54c213350171 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -1749,18 +1749,9 @@ int vfio_pci_core_mmap(struct vfio_device *core_vdev= , struct vm_area_struct *vma * Even though we don't make use of the barmap for the mmap, * we need to request the region and the barmap tracks that. */ - if (!vdev->barmap[index]) { - ret =3D pci_request_selected_regions(pdev, - 1 << index, "vfio-pci"); - if (ret) - return ret; - - vdev->barmap[index] =3D pci_iomap(pdev, index, 0); - if (!vdev->barmap[index]) { - pci_release_selected_regions(pdev, 1 << index); - return -ENOMEM; - } - } + ret =3D vfio_pci_core_setup_barmap(vdev, index); + if (ret) + return ret; =20 vma->vm_private_data =3D vdev; vma->vm_page_prot =3D pgprot_noncached(vma->vm_page_prot); --=20 2.34.1 From nobody Mon Dec 1 21:31:56 2025 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011028.outbound.protection.outlook.com [52.101.52.28]) (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 8E3C12DF14B; Thu, 27 Nov 2025 17:06:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263217; cv=fail; b=ry6dNQoscHmy51BbBgZAvLj89pLHUF7Yrp9MUa70ESCzE7TAEqhHFcnTseJepKc088dpxj/qZmTgrJN1DQV0A0NNAkI3wqSo7O/6DHReTYwua044tQ26A4XniNyTS6Z6FURYmxGUeZuYBqKJ8JwnL1USKlGY4IwCn3jYcV6faP8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263217; c=relaxed/simple; bh=eJt8NUEds5qUc+y9+0cSrdyvVlocxTLU72Ewhoi9Ov4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TPTNpRVbCrwMVPVx0IYELvDk/N2pvYHl8HOmgFwuIA2HJVvXGwYrrLWizNjzGwyhlfD0XN5D5mvCWJExVK2MD8Xs2OR//ceBp83bmi/9ii2eKXWH94C/MAl88d61lIMsWKRC5iZUtCWHzS5Q2tVGmjuRBuSevYs2GnxaEWIJhm8= 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=rpVTOnFj; arc=fail smtp.client-ip=52.101.52.28 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="rpVTOnFj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=n799MdOIZTy1Iv9PEJuKHHtxkPdFIQMCvnnYJBfdZ6CJTAmgfoAT4jLp2qQBWHDVwejqjdeCJ04KMWQWGoJh6vyseNKjBAQZxQNEQ8RZwXG7ZtFVijmCRQEwrJKNNtNtbx3rENeG4hYPSSsi2M8ACzZbCyk1ua2Le1fQWAucxrBmfsttp0mFP90qWJsjS1FSRYPoaAFC+FYxVSQmVy0Rg9LRuxWiNF28fnsD9pBlIoBNPzRGCrg4H1O8a8dlPuzzp0efaI8FrHFQG1IvcGmK8v24Qz26LiOLn0iessT/wiogQIL3c3oiNKrAFI5aOxUWQwsdASBenXc8L8CH3omPSg== 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=DUW813+kUFJ8TT2NhWJy9JDchyAxQhc6eQg6PHaf4mE=; b=Ld4OJXO12XXHARUREbM2CXZCl2+HgWQyC5pHoj8yK8B+jtnlbkF4HJ4lNjsndHcKtbJ/ixG0DxlRakA+/Wx+ilxCVbyViZZ6PLsrzoGuA5pdoXv7s1mu97s9yyWsm2ZCbzRusZMr7PMSnwYircsncbS59XovgHw2WkRbgBBsZGvK3yilbsSF/nB5PSomrvgmnJ8PFpboN0x8paZpAsU+SMqapHOauD5L2ePLVIyPqQJ0G8n7YGfVt/KYXY2WhVjBWgs6o7bzGoGVsCSMUVVtIj1aH38seCDy87WfOsv5LrRyRY4a/jIwdkhseJlkXD+JZjcyTUzWuwWnMcEPkzIJXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.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=DUW813+kUFJ8TT2NhWJy9JDchyAxQhc6eQg6PHaf4mE=; b=rpVTOnFj39lacWyma1O6kdsVTr2u5DFru7WXaW2pSZ3adLW/4Z4wG3AOq25v5McbTZJ4bKI9Nc3gFJYy9XqZN1SyMVukuZ7o8dv9Hc9P3asDbs7PWNUvjl8JAhwyClapTbMFUrOAeQvcwsIvrDKDi2DcUjHjlYppqpKgMFAszhWPqyovVay3oavIhILsqaFfGqVpTbly94hljNj5hFi87jA8I9Zdu4i3uUgyLlymR3oG37kueY182xPIo/wVmq8JSdu3lnFxpLWt9TyyozUYIVHS0uvj4yA9x75sN3gG5zr+x0vWX89jtb7bkP2S0SToJMzM10W5tkFyCLt388LPVA== Received: from SA1P222CA0096.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:35e::23) by DM4PR12MB8474.namprd12.prod.outlook.com (2603:10b6:8:181::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.13; Thu, 27 Nov 2025 17:06:51 +0000 Received: from SA2PEPF00003F62.namprd04.prod.outlook.com (2603:10b6:806:35e:cafe::f7) by SA1P222CA0096.outlook.office365.com (2603:10b6:806:35e::23) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9366.14 via Frontend Transport; Thu, 27 Nov 2025 17:06:47 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SA2PEPF00003F62.mail.protection.outlook.com (10.167.248.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.7 via Frontend Transport; Thu, 27 Nov 2025 17:06:51 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:37 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:36 -0800 Received: from gb-nvl-073-compute01.l16.internal032k18.bmc032b17.internal032f11.internal032huang.bmc032l04.bmc (10.127.8.11) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 27 Nov 2025 09:06:36 -0800 From: To: , , , , , , , , CC: , , , , , , , , , , , , , , , , Subject: [PATCH v9 4/6] vfio/nvgrace-gpu: split the code to wait for GPU ready Date: Thu, 27 Nov 2025 17:06:30 +0000 Message-ID: <20251127170632.3477-5-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251127170632.3477-1-ankita@nvidia.com> References: <20251127170632.3477-1-ankita@nvidia.com> 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: SA2PEPF00003F62:EE_|DM4PR12MB8474:EE_ X-MS-Office365-Filtering-Correlation-Id: 5928370d-d7db-4ece-c9f1-08de2dd75be9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|7416014|376014|1800799024|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?okmXalkLRAbuqnX+39rcGwomYH6KY5uD/xhp5gI+lTYvlxe6dVkkMsD2cwWB?= =?us-ascii?Q?Ys99XYYWJNInuCZ20XRS2Gh8494VFRfHBhUMEAvZrcdadB9r2IpXccGeKHn0?= =?us-ascii?Q?zw0tfahqlZVLXU+Jwd4+/q96Dd5vc02vmUhXrCIVw5dy3BcWYbCaVx3y/laq?= =?us-ascii?Q?h1fl+235HxUuYquqoQZs3u9GvFKYTzZEHUDdl5LMgiD9eTYti4qfJMd3qfFz?= =?us-ascii?Q?CVL7fmHWP5zT4grhj+xeoAcAN8t1KLKblJ9a9jW/VnZ4IcfQfUrLhQBhyvV2?= =?us-ascii?Q?VZi0C9Hm4LMKZkPIA5w5erkPiTII1Xt5jJtrvhVIFFtWcVyaxaKDy3/6WbjO?= =?us-ascii?Q?viwl9xGVX/ekSzrf6Rh6PHh1dZdQCEjU6KSN46/MMkp1n2GIdkFLn05e+qnO?= =?us-ascii?Q?IROuzj+JcpLcjjlTP3YSF3olc645EMocsuT4ceXCLFoaP+wOZhiX50qa+z+O?= =?us-ascii?Q?SmYVSTH5Y3eeXPyh5hx5J8e5gSMobeiY0mcL09gheyOfQtoLeYxYzPkFvv8m?= =?us-ascii?Q?/P1giRmdoVZw72YYPhiutsv7kc4Lk5Zx266Yf8bxrFc20HK+ck+KNBXeqSgF?= =?us-ascii?Q?TElRPPBbULGq868kIWDfmv/cetc7p2LfEnw0pQjCTX4jtjoTBq3gVznyVtAZ?= =?us-ascii?Q?XGawriyK6nx00FjUgT5yg+gxyix0N/ciTY5L+p4Pwu13rMlPjQ1/zqQ9BRZU?= =?us-ascii?Q?z1+r+u+Bl5zcLHGGYfMxcMWAGkrGQFy46NqVNdIc/Q5q3Ntbe5PXaTumReKl?= =?us-ascii?Q?dnD4WNTc8mF1GK9MyDGucBTbgrBUVAP8i9ZMpQtFKOsCwIbmEmr7n3uDeyEQ?= =?us-ascii?Q?X7KVWt5ae/3VHyWQEN9JU8B4NZrwZ5CX0Htig+0D9h5qNLe/2i+2RWCd/JM3?= =?us-ascii?Q?JVEovaqJLWUUXj6DZGGwhVc7yMph2/mh8z+zHYqkjDueNu1l1sPj7YbbZr7p?= =?us-ascii?Q?EeDfs9VTaz5/JUhhC5/P2fSfuVqQ77adJRgZtYLjUD1jJP+89H+HpdIbPU0v?= =?us-ascii?Q?1UejzFDo7xkaqRaxzRIiyCLLWY0dJRm8mg6RLwKima1QUMUxKbr53hOztjyN?= =?us-ascii?Q?rKdGVkxI/5DaEu3tRuzx2SejMfqDBgjs8tZ6eg3axGz+PpZIV+9syFDDQmj+?= =?us-ascii?Q?BxWPIB/jhR5f1RqyekZCHNMF+FLLEOuVvzTfg+cUxcCU7+/q5qOW7rgXwnZd?= =?us-ascii?Q?HOz+3MJH8T/1+OIHB2rM8J2TRLRQAzovIa2ppWsHlQq3qc0essGtdZCph7YS?= =?us-ascii?Q?Wtmjh2YWFmk2/+s9nXHpsHGbQVX8VCH7WumCs4fuNXbP27wF/ShpDN4mdWI4?= =?us-ascii?Q?cjYN7HQNvUhqlzYTpagstiz3o8deK945S53MYmUHo+iB2dkMMLP/s/nLPiS1?= =?us-ascii?Q?E2WpSsYEgxu17xNWsGOs6T3w6VmRT2ntDvufnnuE0EpdnjA9/SyKI2rLqFR+?= =?us-ascii?Q?AG0dwlKNhzIyNr//0kuAwaZaLCDSzbp4Tyvz1chvaq21TQEU91vg3OYoOlsa?= =?us-ascii?Q?ptvE+za19cFtDu2++KHXaVbRM/oUZw0kN3VE/1gPi3fRldSL9zbW8nRsSw2M?= =?us-ascii?Q?4aygaQisJZnu//HGsQI=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(7416014)(376014)(1800799024)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 17:06:51.4505 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5928370d-d7db-4ece-c9f1-08de2dd75be9 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00003F62.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB8474 Content-Type: text/plain; charset="utf-8" From: Ankit Agrawal Split the function that check for the GPU device being ready on the probe. Move the code to wait for the GPU to be ready through BAR0 register reads to a separate function. This would help reuse the code. This also fixes a bug where the return status in case of timeout gets overridden by return from pci_enable_device. With the fix, a timeout generate an error as initially intended. Fixes: d85f69d520e6 ("vfio/nvgrace-gpu: Check the HBM training and C2C link= status") Reviewed-by: Zhi Wang Reviewed-by: Shameer Kolothum Signed-off-by: Ankit Agrawal --- drivers/vfio/pci/nvgrace-gpu/main.c | 31 +++++++++++++++++------------ 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/drivers/vfio/pci/nvgrace-gpu/main.c b/drivers/vfio/pci/nvgrace= -gpu/main.c index 232dc2df58c7..059ac599dc71 100644 --- a/drivers/vfio/pci/nvgrace-gpu/main.c +++ b/drivers/vfio/pci/nvgrace-gpu/main.c @@ -130,6 +130,20 @@ static void nvgrace_gpu_close_device(struct vfio_devic= e *core_vdev) vfio_pci_core_close_device(core_vdev); } =20 +static int nvgrace_gpu_wait_device_ready(void __iomem *io) +{ + unsigned long timeout =3D jiffies + msecs_to_jiffies(POLL_TIMEOUT_MS); + + do { + if ((ioread32(io + C2C_LINK_BAR0_OFFSET) =3D=3D STATUS_READY) && + (ioread32(io + HBM_TRAINING_BAR0_OFFSET) =3D=3D STATUS_READY)) + return 0; + msleep(POLL_QUANTUM_MS); + } while (!time_after(jiffies, timeout)); + + return -ETIME; +} + static unsigned long addr_to_pgoff(struct vm_area_struct *vma, unsigned long addr) { @@ -930,11 +944,10 @@ static bool nvgrace_gpu_has_mig_hw_bug(struct pci_dev= *pdev) * Ensure that the BAR0 region is enabled before accessing the * registers. */ -static int nvgrace_gpu_wait_device_ready(struct pci_dev *pdev) +static int nvgrace_gpu_probe_check_device_ready(struct pci_dev *pdev) { - unsigned long timeout =3D jiffies + msecs_to_jiffies(POLL_TIMEOUT_MS); void __iomem *io; - int ret =3D -ETIME; + int ret; =20 ret =3D pci_enable_device(pdev); if (ret) @@ -950,16 +963,8 @@ static int nvgrace_gpu_wait_device_ready(struct pci_de= v *pdev) goto iomap_exit; } =20 - do { - if ((ioread32(io + C2C_LINK_BAR0_OFFSET) =3D=3D STATUS_READY) && - (ioread32(io + HBM_TRAINING_BAR0_OFFSET) =3D=3D STATUS_READY)) { - ret =3D 0; - goto reg_check_exit; - } - msleep(POLL_QUANTUM_MS); - } while (!time_after(jiffies, timeout)); + ret =3D nvgrace_gpu_wait_device_ready(io); =20 -reg_check_exit: pci_iounmap(pdev, io); iomap_exit: pci_release_selected_regions(pdev, 1 << 0); @@ -976,7 +981,7 @@ static int nvgrace_gpu_probe(struct pci_dev *pdev, u64 memphys, memlength; int ret; =20 - ret =3D nvgrace_gpu_wait_device_ready(pdev); + ret =3D nvgrace_gpu_probe_check_device_ready(pdev); if (ret) return ret; =20 --=20 2.34.1 From nobody Mon Dec 1 21:31:56 2025 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010003.outbound.protection.outlook.com [52.101.201.3]) (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 9EF302E06ED; Thu, 27 Nov 2025 17:06:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.3 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263218; cv=fail; b=cdX26utc4huI06iI2yZMi5D/GzLpn2/gWe989UvkZ9H4L5v1NLeSb2HXK15d4oiMn09a2ketWAKnBP+e4P+2gekXn63UNwu+unvfBbjkbMx+khjPURkXIk1GU0ttwfbrhTXhenlZWYTN+4dUNxtK4BI+OuUtqd6D2AsGpgH2l+c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263218; c=relaxed/simple; bh=b0p3wi8GBj+fw0mWBWmogPVwpARnQo4pEbO2QBSZ0HI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=cMGCkipOjjDT0cyOQNYWtIDLQMY5A9ddc/vJ0ILgcVtGp4CGnTz2W8x1qVHIgo+RK5IzA7v+9M1CsSA+QnLWP/vR2M4vAwfunJBkKdxU6rNDcldfRLPcfnVkhjl09CqeT33G0OyXb840nWgQv0ypa8jMGxweUPJU8oJwnQd7IE0= 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=TxapOUtY; arc=fail smtp.client-ip=52.101.201.3 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="TxapOUtY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NAK/vTgc9nbCCA/D16Eq9JnCBcwGwNppWwV+/F57Qn0eHMNx5ymLwr/h4Gr60H+OHWj8E6jL/9UM8ngBp4QbO0p9TKReC88lcLkNHdIc6MIG6rKrmUcDa87eBTWIYc2UrWbBR0C3LV6TiXAnS0UTilfAyd3VOXBzGi2ExmQNPy0KrDs90uBuC7QKfSnZo0RngaxLKfav3wuwLZN0Bvg4iHqxZV091kFH8P5Q9eO1Q++/wH3rMWrQC9p+YGXbiyuUolNVJDJLjkkL8ILHO0/mgIkJgMwDeic9Pk5MwBqv5JzwsrC/E25eVcf3vQRylWsgvqCGhsJlACruqv81B9NqVg== 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=bmd/FucWpId7632iP4376tIwH3LfEJ/HD8Iqn26vVVg=; b=SHZNLCWUtJtUFLS7u1bJuRDkyh9ejGeHZ0fuzdrdSu4J9KPcexbAJ7HmYJ88MptxszvMEgTz8fvIfuZ6wbGccoPvbZQihFDTiTnJsyY7MS0m4QfkYBpdCF4e2x+Ya1rs1bUsJ1N/qqE6FicvGbcD6eYwdY7BaVjO4SvCdyavze70z5EYLV0rysYTIH74zqMjX/bAwtvxOHScbF/0tryJ+Qqut8Ebb+G9DK8q5tny1M8RSyFfNqpyX7BKN/7cdWzMrcWODg8J9JoXFilPIUFTokVQqG2p5GQY+I4WBeop6ccDW/+UrrLSbvxWcVKadBRXBAIzrdmrSBGbZXQa6FbgZg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.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=bmd/FucWpId7632iP4376tIwH3LfEJ/HD8Iqn26vVVg=; b=TxapOUtY4MEwJxRD6FhZmjaY6d+b+kgRM7RZRR/kxrqj22bRb92eDPfa7TnIYRrhlBJxQPiDo3Z4wRhE+h7HZmIg5dc79LSbgpMSVCjyJbRXwDJ4U7dyYcfjfFtl01/+c6UzkUtScrO6CMXwPvsqqabCALeH7YuXM/yLIYOz8xQu0Kc+a+0Zxnw9ZIHTbAFqjJADJFA4Oq2gAKvJFxe+x+qnjoEzMoAPi2cgcqPZZJPCWGW5GjlarahdBqoAQMYZzWUVE3V0w4WZAFt6zQ+UW9Dbehl/qEsm/YjSuIsT2vIC1vp2FWIMNOtiMl40025KnwtlnlZYs9v9sLsgoGIgQg== Received: from SA0PR13CA0029.namprd13.prod.outlook.com (2603:10b6:806:130::34) by PH7PR12MB6809.namprd12.prod.outlook.com (2603:10b6:510:1af::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.11; Thu, 27 Nov 2025 17:06:52 +0000 Received: from SA2PEPF00003F61.namprd04.prod.outlook.com (2603:10b6:806:130:cafe::c9) by SA0PR13CA0029.outlook.office365.com (2603:10b6:806:130::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9388.4 via Frontend Transport; Thu, 27 Nov 2025 17:06:52 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SA2PEPF00003F61.mail.protection.outlook.com (10.167.248.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.7 via Frontend Transport; Thu, 27 Nov 2025 17:06:52 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:38 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:37 -0800 Received: from gb-nvl-073-compute01.l16.internal032k18.bmc032b17.internal032f11.internal032huang.bmc032l04.bmc (10.127.8.11) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 27 Nov 2025 09:06:37 -0800 From: To: , , , , , , , , CC: , , , , , , , , , , , , , , , , Subject: [PATCH v9 5/6] vfio/nvgrace-gpu: Inform devmem unmapped after reset Date: Thu, 27 Nov 2025 17:06:31 +0000 Message-ID: <20251127170632.3477-6-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251127170632.3477-1-ankita@nvidia.com> References: <20251127170632.3477-1-ankita@nvidia.com> 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: SA2PEPF00003F61:EE_|PH7PR12MB6809:EE_ X-MS-Office365-Filtering-Correlation-Id: 938605fa-8087-4f63-a2f8-08de2dd75c51 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|7416014|376014|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?xeMsUB7D0V95P9QDKdSKHg8iAc27zzrI4I6lja8Ki/TROmgdutqkC4WB9FYR?= =?us-ascii?Q?YpjctFxuLOkK4JKoHmP1vexsFVd9i6zRFQ2xln6FiKenDoAk+3/0XkpOelLB?= =?us-ascii?Q?D+33qs2AuQ0SEcH4vaJ01MF7sab6YCcFiNn5MfmKTvNDbcpsMzdgB9pIN+5o?= =?us-ascii?Q?FV+zzXiWyVjuZF1StCQvtAUufd8JZiw3sNPtz6ryDFettvFCunRKaHEAcaQl?= =?us-ascii?Q?bzP4HV2wJJpKpycwJ33NcKWERKvZ7eFTTD5SDbWO7rCusvsfl/itmhWPXWzq?= =?us-ascii?Q?QHvXTZl+6GJlUmWu48tKmNhK6CpYpWZWhHjG06uSwSrxwJUwoBgQISM/aBvA?= =?us-ascii?Q?04QdlKRwHgzZFabv4+YwGEhKhUwp/VNHXo7iMeojAqhDj6mlFvhse6TfuzOh?= =?us-ascii?Q?JsinVuPJA6L1Tr3zmux5Z4BmgqucZy7FeAATgaD2DHB1VSTalhta98q7bDzv?= =?us-ascii?Q?mDYC0DTDrw7tOxXZ2y11NsTxn+z5fX6s7PWlG+8IA1ZgHI9ey9oooP94lfyU?= =?us-ascii?Q?F1Ik2ioDzltaSvD/rvYnLORREfbevgqbgdzjaO6LSyBS92b0gvdeUmEcCUcy?= =?us-ascii?Q?7EIDR9hAee2YAAA6D+q9wkvqFijftW/XI3Kd3VSTJOsHqS14rHCw5a8nUuK7?= =?us-ascii?Q?qaZuOBqupBSFo1vwtJuor4E2qpI+1kB0AynFtO+jeYhGZgpx9sTwZY3r6lWS?= =?us-ascii?Q?y11Jqcaz8q1iA4qBrvOacQhZp5w7e6uKHtsM9ekFkdBPEM7Ki0FGfMmyEyjm?= =?us-ascii?Q?ZkKubyOLFmCrLmHbdFMD9AvgvcM3SDPJifcgPBQCY/tSNo8+A1CLZoNJ40Lg?= =?us-ascii?Q?USdksrsYVYVmMNNnWCIEJCSsfas6pSXGU9BovYgkwaL320crZk8rZRbR9YXX?= =?us-ascii?Q?KjkFI3htbLtSntZ7bLmHUM5u6ECoT4lxk5FIPj/2h8JCNdmxLFsPqs9AxUNb?= =?us-ascii?Q?QtH+Y6S7u96Qt8ck9CedvKCXGCCfoJeJeelBNfrFIcYv28v914UqAok87cRb?= =?us-ascii?Q?FiyqFikWN6nbLuXVYLRnv6Gk4ecj3dIkBte/AMch1fl/G8R4/RfohpW3KHFw?= =?us-ascii?Q?OFaezjVNk8Gh6VFeadWWWnZNaN4m+r1wWG5NoDTDYe65XS9NKGUBr2vYiDvY?= =?us-ascii?Q?yDc0Gm4vj/jNd9XSp9r7vVduvI39LO0SEmZvu7Yx/CPB7VzNIGxnEsa/VUWc?= =?us-ascii?Q?ZU+L7tsSZswz9y4QOC2hFou/c84fyrk+VyHe49DWHiGeSTb6QSgInoEuZXw5?= =?us-ascii?Q?Us+EnQZlK/LsgmSOMPJhUNVRWgCMKkUY5K1yikB6X/vO5wAdRNNyKsXeEpWu?= =?us-ascii?Q?HWnEOFdleTtTiWoCmsSKFHekcVdT3kv9EqvobF9MwzvgdkLRePw/ZHUSfGY+?= =?us-ascii?Q?0DGwzZBk6mu2sNiHSUSsFcJ+IaEiQgdV/25L7coytuq4cqQj1yScLtHVSRDW?= =?us-ascii?Q?Thb7MZpMk5zASy6VPFiFXHStyrjXkZ3Kzz8EEuNGLgmNUGV6ecf7aJv4cyzc?= =?us-ascii?Q?bCD8+ylcmYn0rHY4WWST83taKJj5n/88lvXC0Oi+W+Q4cAQ/5lODKwKph/1z?= =?us-ascii?Q?I9sFgxTnYdBCpLR9UsE=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(7416014)(376014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 17:06:52.1887 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 938605fa-8087-4f63-a2f8-08de2dd75c51 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00003F61.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6809 Content-Type: text/plain; charset="utf-8" From: Ankit Agrawal Introduce a new flag reset_done to notify that the GPU has just been reset and the mapping to the GPU memory is zapped. Implement the reset_done handler to set this new variable. It will be used later in the patches to wait for the GPU memory to be ready before doing any mapping or access. Cc: Jason Gunthorpe Reviewed-by: Shameer Kolothum Suggested-by: Alex Williamson Signed-off-by: Ankit Agrawal --- drivers/vfio/pci/nvgrace-gpu/main.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/drivers/vfio/pci/nvgrace-gpu/main.c b/drivers/vfio/pci/nvgrace= -gpu/main.c index 059ac599dc71..bf0a3b65c72e 100644 --- a/drivers/vfio/pci/nvgrace-gpu/main.c +++ b/drivers/vfio/pci/nvgrace-gpu/main.c @@ -58,6 +58,8 @@ struct nvgrace_gpu_pci_core_device { /* Lock to control device memory kernel mapping */ struct mutex remap_lock; bool has_mig_hw_bug; + /* GPU has just been reset */ + bool reset_done; }; =20 static void nvgrace_gpu_init_fake_bar_emu_regs(struct vfio_device *core_vd= ev) @@ -1044,12 +1046,34 @@ static const struct pci_device_id nvgrace_gpu_vfio_= pci_table[] =3D { =20 MODULE_DEVICE_TABLE(pci, nvgrace_gpu_vfio_pci_table); =20 +/* + * The GPU reset is required to be serialized against the *first* mapping + * faults and read/writes accesses to prevent potential RAS events logging. + * + * First fault or access after a reset needs to poll device readiness, + * flag that a reset has occurred. + */ +static void nvgrace_gpu_vfio_pci_reset_done(struct pci_dev *pdev) +{ + struct vfio_pci_core_device *core_device =3D dev_get_drvdata(&pdev->dev); + struct nvgrace_gpu_pci_core_device *nvdev =3D + container_of(core_device, struct nvgrace_gpu_pci_core_device, + core_device); + + nvdev->reset_done =3D true; +} + +static const struct pci_error_handlers nvgrace_gpu_vfio_pci_err_handlers = =3D { + .reset_done =3D nvgrace_gpu_vfio_pci_reset_done, + .error_detected =3D vfio_pci_core_aer_err_detected, +}; + static struct pci_driver nvgrace_gpu_vfio_pci_driver =3D { .name =3D KBUILD_MODNAME, .id_table =3D nvgrace_gpu_vfio_pci_table, .probe =3D nvgrace_gpu_probe, .remove =3D nvgrace_gpu_remove, - .err_handler =3D &vfio_pci_core_err_handlers, + .err_handler =3D &nvgrace_gpu_vfio_pci_err_handlers, .driver_managed_dma =3D true, }; =20 --=20 2.34.1 From nobody Mon Dec 1 21:31:56 2025 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011028.outbound.protection.outlook.com [40.93.194.28]) (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 1A3A02E8E06; Thu, 27 Nov 2025 17:06:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263222; cv=fail; b=GrnbY5CA7tFC82b5Xa9uL54M6WVCKSjXybObiOGkd30o+S7k57AjbyCwtCSepDgd4M5DIHKP1/uRyxZFTnzNUdm5VbM+ThuT/DqcJE+nGgX4jqewtt8oENGXs2moMyp930r7HI2Fjzfk7mr7UkjRvrr4hqmmN9+8UfAt5XpA41I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764263222; c=relaxed/simple; bh=82PwHCR6stma/BKEE+A/xfHcGazOVPyL5bIVihXcL64=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=VS9BvTZ05k/EQCbfSCBhQOWgF0zqUws/l0SZkUzPgOh8Xmxz/gKDv969wX4K2ykYuzZ8Q+zt9PVA40IJYH1VpclThD+axz2qC/s1suqAMrYa1sG2BRBb6ee/p2anOa9FpuemILgsvnc+IVOWtIsFJ9BZb9SNsz5vW2wx+9OeDjo= 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=llZmtjuo; arc=fail smtp.client-ip=40.93.194.28 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="llZmtjuo" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fnRCQEd4zcnArHoD6S1gkFUAdB+nAaC3JIcbKYWHgGmndH/BT0TybRRm5gN938MH60u7bWwRGeNEae289xWEVV23/CJqgwiYdDQ8SECNr3zU0p49XaOuACOOVEKnI58BR13TIgCH5gUtgVBuNz36faquFbHreSm6u63bNHjm4FyZ4SPWlMENXfIAts+JWwUq/SXbqaCudmcbiFF53SBbqEJTY+klDr0KKP8RcfjS2zk1RDHI2DBKiK+c9Amh6woLWlBEuChiNvah9b6DvKmDTjCJKtRx/F5f3mc+Q83IglArv5YACO6hBwQ6/agtTUvM5OKWpFfIrxsU2c7LcTYnvw== 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=saMCv8YeSsLXEbenLKKfKdy6XKnlzOMSJDm/XSgAouI=; b=Yiwv0v7A2uYBPNAY53PAKUl2DtVlQ5jXKgBcnetpFm5W6FmBPU3BPAlkApi6t7LwTIMRmpNIDQt4rD7BWcMo2CBM83vFjbcHHwUkMKQyR0MYHHVM9beCivDxyAlrEsqiatJNS0giXCP/0goYRGZbC5BWqIeWC1KZWDjkWXC110BobRO66GMfoO6ASLt6VAcWvVHbmVk3Uw+KCx3/CPUYA4H+3fyYkfZfDaQ2fJF5kB9KJS0OsW9hkK0MnhotjlGh9e+3ADKRvV0aI0bIpB66weHFuKPuXpt0Z//oH0xp6K97yttpSgB1+79fH+TOZgdX+gJql2Qi2Kcq7JNVaup72g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=vger.kernel.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=saMCv8YeSsLXEbenLKKfKdy6XKnlzOMSJDm/XSgAouI=; b=llZmtjuo9dz1LBR963taSc8ZNkggD4KqYwAAsNGt6xjPvTpbs9WeQANe2Gc0tGX6HGjzmZRWLfNkoK9lRBCWQuCPOewAxNAAfcqE5QfN0fs7G0mREcS/H3FdCD442b3//5ipE9cDUD6WI8TYTcGAOpscerSXUyC63zG4RbE1sxgVJPtPmNDhs2pCl7wrTmrXmxGajx/y6SQrx3pFeVuqbGqrDl3ogycf9Y7tf4mp6CtvsQssi/9zrGKIh97YOPxKPx0UVkI0ZI6CrBBQT6XsBvszZNDpAd20wQqTtlZZACTRxp+3424KQN6xH+jrf3FDweQQOQ5ZSqtlQguxkx3Hjw== Received: from SA1P222CA0083.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:35e::21) by SJ0PR12MB5673.namprd12.prod.outlook.com (2603:10b6:a03:42b::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.12; Thu, 27 Nov 2025 17:06:54 +0000 Received: from SA2PEPF00003F62.namprd04.prod.outlook.com (2603:10b6:806:35e:cafe::9a) by SA1P222CA0083.outlook.office365.com (2603:10b6:806:35e::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9366.15 via Frontend Transport; Thu, 27 Nov 2025 17:06:50 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SA2PEPF00003F62.mail.protection.outlook.com (10.167.248.37) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9366.7 via Frontend Transport; Thu, 27 Nov 2025 17:06:53 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:39 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 27 Nov 2025 09:06:38 -0800 Received: from gb-nvl-073-compute01.l16.internal032k18.bmc032b17.internal032f11.internal032huang.bmc032l04.bmc (10.127.8.11) by mail.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 27 Nov 2025 09:06:38 -0800 From: To: , , , , , , , , CC: , , , , , , , , , , , , , , , , Subject: [PATCH v9 6/6] vfio/nvgrace-gpu: wait for the GPU mem to be ready Date: Thu, 27 Nov 2025 17:06:32 +0000 Message-ID: <20251127170632.3477-7-ankita@nvidia.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20251127170632.3477-1-ankita@nvidia.com> References: <20251127170632.3477-1-ankita@nvidia.com> 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: SA2PEPF00003F62:EE_|SJ0PR12MB5673:EE_ X-MS-Office365-Filtering-Correlation-Id: 9e3daf69-50cc-4641-8c44-08de2dd75d51 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|82310400026|7416014|376014|36860700013; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?+3EK/OmT/4YUFW/ZFrgUHB6IjYoiIAQ0ZV2N9+GN3GA4oLG2xPZuL+oFL/ic?= =?us-ascii?Q?Ck1hRT71wgvsIPkQZauLoWZfElCA0jNFpvPpGhs8kk4eMhwKAmljc8a4Zoc7?= =?us-ascii?Q?/ZmTBWp9DRMOponRsHV9LWJlVxXub3HLPiUzhQsTm+Q125/bEWKm4GvBPfDK?= =?us-ascii?Q?JBpyHQ+tRyzlPjFxMkcMBfoJsxqVGJBn+Av32XB4BGp6JW3q+/r0Zg3XxLNY?= =?us-ascii?Q?VtEa8u2Go2I1F2raUbkNzUhRXeeYVwyzIovaUoSODvOtpjvO3w/LLtaqRwE2?= =?us-ascii?Q?QpO5D5cKN4ubr0RAL8mwKLCt4/ykMRgkLf/ezB9wzbCmXprwSvoINzOXeYUq?= =?us-ascii?Q?BOImw7Sg3c73S/rZr2iNQZEm/aHyEPs7zZ30/SCDj28R7gRNdwJiOWySkSqV?= =?us-ascii?Q?wI3+sRgAbE2wirmiAOuW8uH/a6++GqJYEj9UbWH9hPfXy7qCZO2h2BWHOb4C?= =?us-ascii?Q?joCmStwqIgm4h0R7nkXlyohiZ3bEfaG5aIqPeivLeWdgBZgfWfSVX78S9fiB?= =?us-ascii?Q?pKCmGtkAcvwPEk+80JKnSXiw4EnJ7vDWwkRy0WceZS/w+z+AffQRtTSRVmo9?= =?us-ascii?Q?zzMS2QEkwKxP3rBK+x1SaubS2hqYEX2jvomXUn18jA6QEgvzPSMywFq0PIKg?= =?us-ascii?Q?qiF4ywlD58OsfQ3bQc7Fz6How2PxdwSRgnEdFLwABhnW3eMgyhz3hQL2zGq3?= =?us-ascii?Q?I7tJzs2me68tJciOr4Yxrvan7vHMFIAeyL5bUYT56ZO3GzHXkEgEi1YnJG3V?= =?us-ascii?Q?eO0o3FJto000MAw1n9JkdHvcI0sdwXU7PKa4xtteORSSv94r7ko5csoaqpNm?= =?us-ascii?Q?Ajr0bXoSgdXknT4+Iy92YqaTHCGeSwbSa+0aguIuMmHqZkfeev7hy82TkEyL?= =?us-ascii?Q?/G+0LwvppFda7RYUiM34RF/V0foJoTQZi6CxoMYNjnamRXXdHKPQmqoB/x20?= =?us-ascii?Q?zUTGfVWVFePcI/x9OfI1RffRy+Lzhc3Sa+2JatN097Q5yVlk4dRBoT9rhJiF?= =?us-ascii?Q?fCDS0phf5ywd5zcOrV3NFW4J0I5+b2I5PB1XcwTkuhNNWtksZqewdrWNet6j?= =?us-ascii?Q?JT19fqdja9uU6IkMRlYjWWRyIS7LTjNhfiDAs1ehrTbpZ2pYbr2PyXpr5dzA?= =?us-ascii?Q?GbHGfiMRgr8QmoXq+yr/HbzXEflj649qSGhIIZGvhAOTmBTeZy/nVP8puzGj?= =?us-ascii?Q?+U8Z5rhblEgdbHzyvAMnjQMInktrMiqB8OXUCxEbahZVSmFsQuzGDduQNtL9?= =?us-ascii?Q?oo8FJDQj4irQoautm42bB2+bRJIWgBxhFVeWMnWHE5mJbSZTWRSygWki80UI?= =?us-ascii?Q?TTpgvw3FBCVRUrOYWZs+cU7whSU4RL2aj1OxgUkDE5JKJnByoXQUwMphiGti?= =?us-ascii?Q?e9NrsJkBdhas/UTi96mm4DkOfDslAFqGM3Li6DitYKPc/MhumGiIExOjHnRe?= =?us-ascii?Q?jWlAoByC+bgqzFZxCPYky+Ptim4fd49F4jjXtbMm7M9bVru/PHIL9eYXbiNV?= =?us-ascii?Q?JHhgVRDEnXs6WCcQILedM+Sj2iLk4dJnP/T9G9WubnP6kGre2T/7fP43vz9G?= =?us-ascii?Q?GC4Ls5eXvoytf89BESM=3D?= X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(7416014)(376014)(36860700013);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Nov 2025 17:06:53.8505 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9e3daf69-50cc-4641-8c44-08de2dd75d51 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00003F62.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB5673 Content-Type: text/plain; charset="utf-8" From: Ankit Agrawal Speculative prefetches from CPU to GPU memory until the GPU is ready after reset can cause harmless corrected RAS events to be logged on Grace systems. It is thus preferred that the mapping not be re-established until the GPU is ready post reset. The GPU readiness can be checked through BAR0 registers similar to the checking at the time of device probe. It can take several seconds for the GPU to be ready. So it is desirable that the time overlaps as much of the VM startup as possible to reduce impact on the VM bootup time. The GPU readiness state is thus checked on the first fault/huge_fault request or read/write access which amortizes the GPU readiness time. The first fault and read/write checks the GPU state when the reset_done flag - which denotes whether the GPU has just been reset. The memory_lock is taken across map/access to avoid races with GPU reset. Also check if the memory is enabled, before waiting for GPU to be ready. Otherwise the readiness check would block for 30s. Lastly added PM handling wrapping on read/write access. Cc: Shameer Kolothum Cc: Alex Williamson Cc: Jason Gunthorpe Cc: Vikram Sethi Reviewed-by: Shameer Kolothum Suggested-by: Alex Williamson Signed-off-by: Ankit Agrawal --- drivers/vfio/pci/nvgrace-gpu/main.c | 103 ++++++++++++++++++++++++---- drivers/vfio/pci/vfio_pci_config.c | 1 + drivers/vfio/pci/vfio_pci_priv.h | 1 - include/linux/vfio_pci_core.h | 1 + 4 files changed, 93 insertions(+), 13 deletions(-) diff --git a/drivers/vfio/pci/nvgrace-gpu/main.c b/drivers/vfio/pci/nvgrace= -gpu/main.c index bf0a3b65c72e..bf54d1c6bd73 100644 --- a/drivers/vfio/pci/nvgrace-gpu/main.c +++ b/drivers/vfio/pci/nvgrace-gpu/main.c @@ -7,6 +7,7 @@ #include #include #include +#include =20 /* * The device memory usable to the workloads running in the VM is cached @@ -104,6 +105,19 @@ static int nvgrace_gpu_open_device(struct vfio_device = *core_vdev) mutex_init(&nvdev->remap_lock); } =20 + /* + * GPU readiness is checked by reading the BAR0 registers. + * + * ioremap BAR0 to ensure that the BAR0 mapping is present before + * register reads on first fault before establishing any GPU + * memory mapping. + */ + ret =3D vfio_pci_core_setup_barmap(vdev, 0); + if (ret) { + vfio_pci_core_disable(vdev); + return ret; + } + vfio_pci_core_finish_enable(vdev); =20 return 0; @@ -146,6 +160,34 @@ static int nvgrace_gpu_wait_device_ready(void __iomem = *io) return -ETIME; } =20 +/* + * If the GPU memory is accessed by the CPU while the GPU is not ready + * after reset, it can cause harmless corrected RAS events to be logged. + * Make sure the GPU is ready before establishing the mappings. + */ +static int +nvgrace_gpu_check_device_ready(struct nvgrace_gpu_pci_core_device *nvdev) +{ + struct vfio_pci_core_device *vdev =3D &nvdev->core_device; + int ret; + + lockdep_assert_held_read(&vdev->memory_lock); + + if (!nvdev->reset_done) + return 0; + + if (!__vfio_pci_memory_enabled(vdev)) + return -EIO; + + ret =3D nvgrace_gpu_wait_device_ready(vdev->barmap[0]); + if (ret) + return ret; + + nvdev->reset_done =3D false; + + return 0; +} + static unsigned long addr_to_pgoff(struct vm_area_struct *vma, unsigned long addr) { @@ -175,8 +217,13 @@ static vm_fault_t nvgrace_gpu_vfio_pci_huge_fault(stru= ct vm_fault *vmf, pfn =3D PHYS_PFN(memregion->memphys) + addr_to_pgoff(vma, addr); =20 if (is_aligned_for_order(vma, addr, pfn, order)) { - scoped_guard(rwsem_read, &vdev->memory_lock) + scoped_guard(rwsem_read, &vdev->memory_lock) { + if (vdev->pm_runtime_engaged || + nvgrace_gpu_check_device_ready(nvdev)) + return VM_FAULT_SIGBUS; + ret =3D vfio_pci_vmf_insert_pfn(vdev, vmf, pfn, order); + } } =20 dev_dbg_ratelimited(&vdev->pdev->dev, @@ -563,6 +610,7 @@ static ssize_t nvgrace_gpu_read_mem(struct nvgrace_gpu_pci_core_device *nvdev, char __user *buf, size_t count, loff_t *ppos) { + struct vfio_pci_core_device *vdev =3D &nvdev->core_device; u64 offset =3D *ppos & VFIO_PCI_OFFSET_MASK; unsigned int index =3D VFIO_PCI_OFFSET_TO_INDEX(*ppos); struct mem_region *memregion; @@ -589,9 +637,15 @@ nvgrace_gpu_read_mem(struct nvgrace_gpu_pci_core_devic= e *nvdev, else mem_count =3D min(count, memregion->memlength - (size_t)offset); =20 - ret =3D nvgrace_gpu_map_and_read(nvdev, buf, mem_count, ppos); - if (ret) - return ret; + scoped_guard(rwsem_read, &vdev->memory_lock) { + ret =3D nvgrace_gpu_check_device_ready(nvdev); + if (ret) + return ret; + + ret =3D nvgrace_gpu_map_and_read(nvdev, buf, mem_count, ppos); + if (ret) + return ret; + } =20 /* * Only the device memory present on the hardware is mapped, which may @@ -616,9 +670,16 @@ nvgrace_gpu_read(struct vfio_device *core_vdev, struct nvgrace_gpu_pci_core_device *nvdev =3D container_of(core_vdev, struct nvgrace_gpu_pci_core_device, core_device.vdev); + struct vfio_pci_core_device *vdev =3D &nvdev->core_device; + int ret; =20 - if (nvgrace_gpu_memregion(index, nvdev)) - return nvgrace_gpu_read_mem(nvdev, buf, count, ppos); + if (nvgrace_gpu_memregion(index, nvdev)) { + if (pm_runtime_resume_and_get(&vdev->pdev->dev)) + return -EIO; + ret =3D nvgrace_gpu_read_mem(nvdev, buf, count, ppos); + pm_runtime_put(&vdev->pdev->dev); + return ret; + } =20 if (index =3D=3D VFIO_PCI_CONFIG_REGION_INDEX) return nvgrace_gpu_read_config_emu(core_vdev, buf, count, ppos); @@ -680,6 +741,7 @@ static ssize_t nvgrace_gpu_write_mem(struct nvgrace_gpu_pci_core_device *nvdev, size_t count, loff_t *ppos, const char __user *buf) { + struct vfio_pci_core_device *vdev =3D &nvdev->core_device; unsigned int index =3D VFIO_PCI_OFFSET_TO_INDEX(*ppos); u64 offset =3D *ppos & VFIO_PCI_OFFSET_MASK; struct mem_region *memregion; @@ -709,9 +771,15 @@ nvgrace_gpu_write_mem(struct nvgrace_gpu_pci_core_devi= ce *nvdev, */ mem_count =3D min(count, memregion->memlength - (size_t)offset); =20 - ret =3D nvgrace_gpu_map_and_write(nvdev, buf, mem_count, ppos); - if (ret) - return ret; + scoped_guard(rwsem_read, &vdev->memory_lock) { + ret =3D nvgrace_gpu_check_device_ready(nvdev); + if (ret) + return ret; + + ret =3D nvgrace_gpu_map_and_write(nvdev, buf, mem_count, ppos); + if (ret) + return ret; + } =20 exitfn: *ppos +=3D count; @@ -725,10 +793,17 @@ nvgrace_gpu_write(struct vfio_device *core_vdev, struct nvgrace_gpu_pci_core_device *nvdev =3D container_of(core_vdev, struct nvgrace_gpu_pci_core_device, core_device.vdev); + struct vfio_pci_core_device *vdev =3D &nvdev->core_device; unsigned int index =3D VFIO_PCI_OFFSET_TO_INDEX(*ppos); + int ret; =20 - if (nvgrace_gpu_memregion(index, nvdev)) - return nvgrace_gpu_write_mem(nvdev, count, ppos, buf); + if (nvgrace_gpu_memregion(index, nvdev)) { + if (pm_runtime_resume_and_get(&vdev->pdev->dev)) + return -EIO; + ret =3D nvgrace_gpu_write_mem(nvdev, count, ppos, buf); + pm_runtime_put(&vdev->pdev->dev); + return ret; + } =20 if (index =3D=3D VFIO_PCI_CONFIG_REGION_INDEX) return nvgrace_gpu_write_config_emu(core_vdev, buf, count, ppos); @@ -1051,7 +1126,11 @@ MODULE_DEVICE_TABLE(pci, nvgrace_gpu_vfio_pci_table); * faults and read/writes accesses to prevent potential RAS events logging. * * First fault or access after a reset needs to poll device readiness, - * flag that a reset has occurred. + * flag that a reset has occurred. The readiness test is done by holding + * the memory_lock read lock and we expect all vfio-pci initiated resets to + * hold the memory_lock write lock to avoid races. However, .reset_done + * extends beyond the scope of vfio-pci initiated resets therefore we + * cannot assert this behavior and use lockdep_assert_held_write. */ static void nvgrace_gpu_vfio_pci_reset_done(struct pci_dev *pdev) { diff --git a/drivers/vfio/pci/vfio_pci_config.c b/drivers/vfio/pci/vfio_pci= _config.c index 333fd149c21a..d0cc5f04a8f2 100644 --- a/drivers/vfio/pci/vfio_pci_config.c +++ b/drivers/vfio/pci/vfio_pci_config.c @@ -416,6 +416,7 @@ bool __vfio_pci_memory_enabled(struct vfio_pci_core_dev= ice *vdev) return pdev->current_state < PCI_D3hot && (pdev->no_command_memory || (cmd & PCI_COMMAND_MEMORY)); } +EXPORT_SYMBOL_GPL(__vfio_pci_memory_enabled); =20 /* * Restore the *real* BARs after we detect a FLR or backdoor reset. diff --git a/drivers/vfio/pci/vfio_pci_priv.h b/drivers/vfio/pci/vfio_pci_p= riv.h index a9972eacb293..7b1776bae802 100644 --- a/drivers/vfio/pci/vfio_pci_priv.h +++ b/drivers/vfio/pci/vfio_pci_priv.h @@ -60,7 +60,6 @@ void vfio_config_free(struct vfio_pci_core_device *vdev); int vfio_pci_set_power_state(struct vfio_pci_core_device *vdev, pci_power_t state); =20 -bool __vfio_pci_memory_enabled(struct vfio_pci_core_device *vdev); void vfio_pci_zap_and_down_write_memory_lock(struct vfio_pci_core_device *= vdev); u16 vfio_pci_memory_lock_and_enable(struct vfio_pci_core_device *vdev); void vfio_pci_memory_unlock_and_restore(struct vfio_pci_core_device *vdev, diff --git a/include/linux/vfio_pci_core.h b/include/linux/vfio_pci_core.h index 3117a390c4eb..6db13f66b5e4 100644 --- a/include/linux/vfio_pci_core.h +++ b/include/linux/vfio_pci_core.h @@ -137,6 +137,7 @@ ssize_t vfio_pci_core_do_io_rw(struct vfio_pci_core_dev= ice *vdev, bool test_mem, void __iomem *io, char __user *buf, loff_t off, size_t count, size_t x_start, size_t x_end, bool iswrite); +bool __vfio_pci_memory_enabled(struct vfio_pci_core_device *vdev); bool vfio_pci_core_range_intersect_range(loff_t buf_start, size_t buf_cnt, loff_t reg_start, size_t reg_cnt, loff_t *buf_offset, --=20 2.34.1