From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 7F5D43ACA41; Wed, 8 Apr 2026 18:25:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775672711; cv=none; b=hWAeCW9YgecfqGZnNI3w/5eyri+c8zfzNCClzTQTS55IjAEZA8ITSw/h2iy9MXKALgQWvXsiQbFmtJ/8Ag/7kv3v7GxMryWd54QTUw9DQql0rqvfMjcRutbgDxHOXlrOLx2mTZFPNJAWshU05pEz7pPPlL0vAPvujAQpKOX9CWU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775672711; c=relaxed/simple; bh=d1vOaSmNtomZiZhsixRxFjOAPpiJlTqsbT3Gvk9+onk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ef3mUO+2CbOsXVqUpFZ9cOWDdYwO64/kaPhp1JtDKDzW2XaX87Z2O7df7VJ/hfz2iDK1ptIBcS/Wsa1zODEH7VfzFAc6baA4Y6k3dipNr+4Sn/vCioaHy/4KGLWP1C0J3aBunj/2mIjSsi+77QDhCDBoI5FV4/9gYSi5hb9gIf4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b=X8vtV0W5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.b="X8vtV0W5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DCE7AC19421; Wed, 8 Apr 2026 18:25:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1775672711; bh=d1vOaSmNtomZiZhsixRxFjOAPpiJlTqsbT3Gvk9+onk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=X8vtV0W5lCq4xgq/EA1J91O1ZEGpmyUIhYQ2ExIg7e0NKaoY/2qNYTYQBZZvvPd6y xcPl9Ow4BsOWRFDp0ndAi8uYF0aNn5IYgAzxH7djz5fJMvhOAFJN/IZJ1CWncRD92/ SofK/8rgxBGbdBrU8FRDy0u7o+NNROWPFSAxK7AE= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Yan Zhao , Alex Williamson , Axel Rasmussen , Tugrul Kukul , Florian Fainelli , "Pavel Machek (CIP)" , Ron Economos , "Justin M. Forbes" , Mark Brown , Conor Dooley , Jon Hunter , Shuah Khan , Peter Schneider , Alex Williamson , Sasha Levin Subject: [PATCH 6.6 113/160] vfio/pci: Insert full vma on mmapd MMIO fault Date: Wed, 8 Apr 2026 20:03:20 +0200 Message-ID: <20260408175917.401861766@linuxfoundation.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260408175913.177092714@linuxfoundation.org> References: <20260408175913.177092714@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore Precedence: bulk X-Mailing-List: stable@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 6.6-stable review patch. If anyone has any objections, please let me know. ------------------ From: Alex Williamson commit d71a989cf5d961989c273093cdff2550acdde314 upstream. In order to improve performance of typical scenarios we can try to insert the entire vma on fault. This accelerates typical cases, such as when the MMIO region is DMA mapped by QEMU. The vfio_iommu_type1 driver will fault in the entire DMA mapped range through fixup_user_fault(). In synthetic testing, this improves the time required to walk a PCI BAR mapping from userspace by roughly 1/3rd. This is likely an interim solution until vmf_insert_pfn_{pmd,pud}() gain support for pfnmaps. Suggested-by: Yan Zhao Link: https://lore.kernel.org/all/Zl6XdUkt%2FzMMGOLF@yzhao56-desk.sh.intel.com/ Reviewed-by: Yan Zhao Link: https://lore.kernel.org/r/20240607035213.2054226-1-alex.williamson@redhat.com Signed-off-by: Alex Williamson Signed-off-by: Axel Rasmussen Signed-off-by: Tugrul Kukul Tested-by: Florian Fainelli Tested-by: Pavel Machek (CIP) Tested-by: Ron Economos Tested-by: Justin M. Forbes Tested-by: Mark Brown Tested-by: Conor Dooley Tested-by: Jon Hunter Tested-by: Shuah Khan Tested-by: Peter Schneider Reviewed-by: Alex Williamson Acked-by: Alex Williamson Signed-off-by: Sasha Levin --- drivers/vfio/pci/vfio_pci_core.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/vfio/pci/vfio_pci_core.c b/drivers/vfio/pci/vfio_pci_core.c index e05d6ee9d4cab..55e28feba475e 100644 --- a/drivers/vfio/pci/vfio_pci_core.c +++ b/drivers/vfio/pci/vfio_pci_core.c @@ -1651,6 +1651,7 @@ static vm_fault_t vfio_pci_mmap_fault(struct vm_fault *vmf) struct vm_area_struct *vma = vmf->vma; struct vfio_pci_core_device *vdev = vma->vm_private_data; unsigned long pfn, pgoff = vmf->pgoff - vma->vm_pgoff; + unsigned long addr = vma->vm_start; vm_fault_t ret = VM_FAULT_SIGBUS; pfn = vma_to_pfn(vma); @@ -1658,11 +1659,25 @@ static vm_fault_t vfio_pci_mmap_fault(struct vm_fault *vmf) down_read(&vdev->memory_lock); if (vdev->pm_runtime_engaged || !__vfio_pci_memory_enabled(vdev)) - goto out_disabled; + goto out_unlock; ret = vmf_insert_pfn(vma, vmf->address, pfn + pgoff); + if (ret & VM_FAULT_ERROR) + goto out_unlock; -out_disabled: + /* + * Pre-fault the remainder of the vma, abort further insertions and + * supress error if fault is encountered during pre-fault. + */ + for (; addr < vma->vm_end; addr += PAGE_SIZE, pfn++) { + if (addr == vmf->address) + continue; + + if (vmf_insert_pfn(vma, addr, pfn) & VM_FAULT_ERROR) + break; + } + +out_unlock: up_read(&vdev->memory_lock); return ret; -- 2.53.0