mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
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
This commit is contained in:
parent
cd40c12a9e
commit
5cf8de6cd1
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user