From: Thomas Zimmermann Date: Fri, 27 Feb 2026 11:42:08 +0000 (+0100) Subject: drm/gem-shmem: Return vm_fault_t from drm_gem_shmem_try_map_pmd() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5cf8de6cd1620baf64f188706ea34f0a7fbc1ed0;p=thirdparty%2Fkernel%2Flinux.git drm/gem-shmem: Return vm_fault_t from drm_gem_shmem_try_map_pmd() Return the exact VM_FAULT_ mask from drm_gem_shmem_try_map_pmd(). Gives the caller better insight into the result. Return 0 if nothing was done. If the caller sees VM_FAULT_NOPAGE, drm_gem_shmem_try_map_pmd() added a PMD entry to the page table. As before, return early from the page-fault handler in that case. Signed-off-by: Thomas Zimmermann Suggested-by: Matthew Wilcox Reviewed-by: Boris Brezillon Link: https://patch.msgid.link/20260227114509.165572-4-tzimmermann@suse.de --- diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index cf53619460307..3c261b53c9746 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -550,8 +550,8 @@ int drm_gem_shmem_dumb_create(struct drm_file *file, struct drm_device *dev, } EXPORT_SYMBOL_GPL(drm_gem_shmem_dumb_create); -static bool drm_gem_shmem_try_map_pmd(struct vm_fault *vmf, unsigned long addr, - struct page *page) +static vm_fault_t drm_gem_shmem_try_map_pmd(struct vm_fault *vmf, unsigned long addr, + struct page *page) { #ifdef CONFIG_ARCH_SUPPORTS_PMD_PFNMAP unsigned long pfn = page_to_pfn(page); @@ -562,12 +562,11 @@ static bool drm_gem_shmem_try_map_pmd(struct vm_fault *vmf, unsigned long addr, pmd_none(*vmf->pmd) && folio_test_pmd_mappable(page_folio(page))) { pfn &= PMD_MASK >> PAGE_SHIFT; - if (vmf_insert_pfn_pmd(vmf, pfn, false) == VM_FAULT_NOPAGE) - return true; + return vmf_insert_pfn_pmd(vmf, pfn, false); } #endif - return false; + return 0; } static vm_fault_t drm_gem_shmem_fault(struct vm_fault *vmf) @@ -593,10 +592,9 @@ static vm_fault_t drm_gem_shmem_fault(struct vm_fault *vmf) if (drm_WARN_ON_ONCE(dev, !page)) goto out; - if (drm_gem_shmem_try_map_pmd(vmf, vmf->address, page)) { - ret = VM_FAULT_NOPAGE; + ret = drm_gem_shmem_try_map_pmd(vmf, vmf->address, page); + if (ret == VM_FAULT_NOPAGE) goto out; - } pfn = page_to_pfn(page); ret = vmf_insert_pfn(vma, vmf->address, pfn);