Commit 5cf8de6c authored by Thomas Zimmermann's avatar Thomas Zimmermann
Browse files

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: default avatarThomas Zimmermann <tzimmermann@suse.de>
Suggested-by: default avatarMatthew Wilcox <willy@infradead.org>
Reviewed-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
Link: https://patch.msgid.link/20260227114509.165572-4-tzimmermann@suse.de
parent cd40c12a
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -550,7 +550,7 @@ 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,
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
@@ -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);