On Wed, Feb 04, 2026 at 12:39:30PM +0100, Thomas Zimmermann wrote:
> + ret = drm_gem_shmem_try_map_pmd(vmf, vmf->address, page);
> + if (ret != VM_FAULT_NOPAGE) {
> + struct folio *folio = page_folio(page);
> +
> + get_page(page);
folio_get(folio);
> - pfn = page_to_pfn(pages[page_offset]);
> - ret = vmf_insert_pfn(vma, vmf->address, pfn);
> + folio_lock(folio);
> +
> + vmf->page = page;
> + ret = VM_FAULT_LOCKED;
> + }
>
> - out:
> +out:
> dma_resv_unlock(shmem->base.resv);
>
> return ret;
> @@ -689,7 +698,7 @@ int drm_gem_shmem_mmap(struct drm_gem_shmem_object
> *shmem, struct vm_area_struct
> if (ret)
> return ret;
>
> - vm_flags_set(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP);
> + vm_flags_mod(vma, VM_DONTEXPAND | VM_DONTDUMP, VM_PFNMAP);
Do you need to explicitly clear VM_PFNMAP here? I'm not familiar with
the DRM stack; maybe that's set for you higher in the stack.