Track page access/dirty status in gem-shmem for better integration with the overall memory management. Gem-shmem has long had two flags 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).
Patch 1 switches from PFN-based mapping to page mapping. The pages are already available; only the mmap handling needs to be adapted. Patch 2 adds tracking access and dirty status in mmap. Patch 3 adds tracking access and dirty status in vmap. Becasue 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 imagiantion 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. Thomas Zimmermann (3): drm/gem-shmem: Map pages in mmap fault handler 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 | 78 ++++++++++++++++++-------- drivers/gpu/drm/imagination/pvr_gem.c | 6 +- 2 files changed, 59 insertions(+), 25 deletions(-) -- 2.52.0
