]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/gem-shmem: Return vm_fault_t from drm_gem_shmem_try_map_pmd()
authorThomas Zimmermann <tzimmermann@suse.de>
Fri, 27 Feb 2026 11:42:08 +0000 (12:42 +0100)
committerThomas Zimmermann <tzimmermann@suse.de>
Wed, 11 Mar 2026 08:33:42 +0000 (09:33 +0100)
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 <tzimmermann@suse.de>
Suggested-by: Matthew Wilcox <willy@infradead.org>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Link: https://patch.msgid.link/20260227114509.165572-4-tzimmermann@suse.de
drivers/gpu/drm/drm_gem_shmem_helper.c

index cf53619460307d4f031bcd6b6e0faa3e58221bbb..3c261b53c97460d470c5ac0a0f08cbcc4eedc4ca 100644 (file)
@@ -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);