Hi Thomas, Thanks for your patch. I'm working on DSI support for RZ/G3E from this morning rebasing on top of next-20260311 I'm seeing that weston hang on my side:
Reverting this patch fix the issue. (git revert 28e3918179aa) I'm wondering if anyone encountered this issue? Thanks in advance. Kind Regards, Tommaso On Fri, Feb 27, 2026 at 12:42:10PM +0100, Thomas Zimmermann wrote: > Invoke folio_mark_accessed() in mmap page faults to add the folio to > the memory manager's LRU list. Userspace invokes mmap to get the memory > for software rendering. Compositors do the same when creating the final > on-screen image, so keeping the pages in LRU makes sense. Avoids paging > out graphics buffers when under memory pressure. > > In pfn_mkwrite, further invoke the folio_mark_dirty() to add the folio > for writeback should the underlying file be paged out from system memory. > This rarely happens in practice, yet it would corrupt the buffer content. > > This has little effect on a system's hardware-accelerated rendering, which > only mmaps for an initial setup of textures, meshes, shaders, etc. > > v4: > - test for VM_FAULT_NOPAGE before marking folio as accessed (Boris) > - test page-array bounds in mkwrite handler (Boris) > v3: > - rewrite for VM_PFNMAP > v2: > - adapt to changes in drm_gem_shmem_try_mmap_pmd() > > Signed-off-by: Thomas Zimmermann <[email protected]> > Reviewed-by: Boris Brezillon <[email protected]> > --- > drivers/gpu/drm/drm_gem_shmem_helper.c | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c > b/drivers/gpu/drm/drm_gem_shmem_helper.c > index cefa50eaf7a4..1ab2bbd3860c 100644 > --- a/drivers/gpu/drm/drm_gem_shmem_helper.c > +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c > @@ -598,6 +598,9 @@ static vm_fault_t drm_gem_shmem_fault(struct vm_fault > *vmf) > if (ret != VM_FAULT_NOPAGE) > ret = vmf_insert_pfn(vma, vmf->address, pfn); > > + if (ret == VM_FAULT_NOPAGE) > + folio_mark_accessed(folio); > + > out: > dma_resv_unlock(obj->resv); > > @@ -638,10 +641,29 @@ static void drm_gem_shmem_vm_close(struct > vm_area_struct *vma) > drm_gem_vm_close(vma); > } > > +static vm_fault_t drm_gem_shmem_pfn_mkwrite(struct vm_fault *vmf) > +{ > + struct vm_area_struct *vma = vmf->vma; > + struct drm_gem_object *obj = vma->vm_private_data; > + struct drm_gem_shmem_object *shmem = to_drm_gem_shmem_obj(obj); > + loff_t num_pages = obj->size >> PAGE_SHIFT; > + pgoff_t page_offset = vmf->pgoff - vma->vm_pgoff; /* page offset within > VMA */ > + > + if (drm_WARN_ON(obj->dev, !shmem->pages || page_offset >= num_pages)) > + return VM_FAULT_SIGBUS; > + > + file_update_time(vma->vm_file); > + > + folio_mark_dirty(page_folio(shmem->pages[page_offset])); > + > + return 0; > +} > + > const struct vm_operations_struct drm_gem_shmem_vm_ops = { > .fault = drm_gem_shmem_fault, > .open = drm_gem_shmem_vm_open, > .close = drm_gem_shmem_vm_close, > + .pfn_mkwrite = drm_gem_shmem_pfn_mkwrite, > }; > EXPORT_SYMBOL_GPL(drm_gem_shmem_vm_ops); > > -- > 2.52.0 >
