Track page access/dirty status in gem-shmem for better integration with the overall memory management. Gem-shmem has long had two flag bits in struct drm_gem_shmem_object, named pages_mark_accessed_on_put and pages_mark_dirty_on_put, but never used them much; except for some odd cases in drivers. Therefore pages in gem-shmem where never marked correctly. (Other DRM memory managers do some course-grain tracking at least).
Patches 1 to 4 prepare the mmap page-fault handler for tracking page status easily. The pages are already available; only the mmap handling needs to be adapted. The way the shmem code interacts with huge-page support is also not optimal, hence refactor it slightly. Patch 5 adds tracking access and dirty status in mmap. With the earlier patches, this change simply falls into place. Patch 6 adds tracking access and dirty status in vmap. Because there's no fault handling here, we refer to the existing status bits in struct drm_gem_shmem_object. Each page's status will be updated by the page release in drm_gem_put_pages(). The imagination driver requires a small fix to make it work correctly. Tested with CONFIG_VM=y by running animations on DRM's bochs driver for several hours. This uses gem-shmem's mmap and vmap extensively. v3: - rewrite for VM_PFNMAP - do more preparational patches v2: - fix possible OOB access into page array (Matthew) - simplify fault-handler error handling (Boris) - simplify internal interfaces (Matthew) Thomas Zimmermann (6): drm/gem-shmem: Use obj directly where appropriate in fault handler drm/gem-shmem: Test for existence of page in mmap fault handler drm/gem-shmem: Return vm_fault_t from drm_gem_shmem_try_map_pmd() drm/gem-shmem: Refactor drm_gem_shmem_try_map_pmd() drm/gem-shmem: Track folio accessed/dirty status in mmap drm/gem-shmem: Track folio accessed/dirty status in vmap drivers/gpu/drm/drm_gem_shmem_helper.c | 77 ++++++++++++++++---------- drivers/gpu/drm/imagination/pvr_gem.c | 6 +- 2 files changed, 53 insertions(+), 30 deletions(-) base-commit: 0082025812a31eda451fb14f13f52683ed375c49 -- 2.52.0
