summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2026-02-27 14:42:08 +0300
committerThomas Zimmermann <tzimmermann@suse.de>2026-03-11 11:33:42 +0300
commit5cf8de6cd1620baf64f188706ea34f0a7fbc1ed0 (patch)
tree060889882e682e8b99dc6f999b02636aee49af06
parentcd40c12a9e8c3551a61e84ed3ad53ff43e12ca3b (diff)
downloadlinux-5cf8de6cd1620baf64f188706ea34f0a7fbc1ed0.tar.xz
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 <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
-rw-r--r--drivers/gpu/drm/drm_gem_shmem_helper.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c
index cf5361946030..3c261b53c974 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);