This patch series adds OP_MAP_REPEAT flag, which lets the user map a BO region over an address range repeatedly with just one map operation.
Sparse resources in the Vulkan API let the user leave regions of a resource unmapped (from the API perspective.) Accesses to such regions must not result in program termination, but loads produce undefined values. To implement this feature on Mali hardware, Vulkan sparse unmap is implemented by mapping the specified region to a "dummy bo" so that the accesses do not fault. A newly created sparse resource starts off unmapped, and therefore also has to be mapped to the "dummy bo". This "dummy bo" is small (a page size) in comparison to the sizes of va ranges that we might want to map to it, and a large number of vm_bind ops can be necessary. For example, if the user were to create a 100e6-byte sparse resident resource, we'd have to poke VM_BIND with ceil(100e6/0x1000)=24415 map operations. OP_MAP_REPEAT addresses this particular inefficiency by letting us implement a single Vulkan sparse unmap operation and sparse resident resource initialization with just one map operation. The panvk changes making use of this uapi can be found at https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35287 Changes in v4: - Fixed the warnings reported by the kernel test robot. https://lore.kernel.org/oe-kbuild-all/202507041635.wydu3tq1-...@intel.com/ - Fixed the warnings reported by the CI. https://patchwork.freedesktop.org/series/151264/ No changes in v3. Changes in v2: - Make panthor use this stuff. - Make it possible to express a repeated mappina of any suitably sized and aligned range of a BO, rather than strictly the page size -sized prefix, generalizing the API. Rename DRM_GPUVA_SINGLE_PAGE to DRM_GPUVA_REPEAT. - Clean up parts of drm/gpuvm affected by these changes. Link to v1: https://lore.kernel.org/lkml/20250202-gpuvm-single-page-v1-0-8cbd44fdc...@asahilina.net/ Asahi Lina (2): drm/gpuvm: Add a flags field to drm_gpuvm_map_req/drm_gpuva_op_map drm/gpuvm: Add DRM_GPUVA_REPEAT flag and logic Boris Brezillon (5): drm/panthor: Add support for atomic page table updates drm/gpuvm: Kill drm_gpuva_init() drm/gpuvm: Pass map arguments through a struct drm/gpuvm: Add a helper to check if two VA can be merged drm/panthor: Add support for repeated mappings drivers/gpu/drm/drm_gpuvm.c | 182 ++++++++++++++++++------- drivers/gpu/drm/imagination/pvr_vm.c | 15 +- drivers/gpu/drm/nouveau/nouveau_uvmm.c | 11 +- drivers/gpu/drm/panthor/panthor_drv.c | 3 +- drivers/gpu/drm/panthor/panthor_mmu.c | 154 +++++++++++++++++++-- drivers/gpu/drm/xe/xe_vm.c | 13 +- include/drm/drm_gpuvm.h | 101 +++++++++++--- include/uapi/drm/panthor_drm.h | 23 ++++ 8 files changed, 408 insertions(+), 94 deletions(-) base-commit: 482c7e296edc0f594e8869a789a40be53c49bd6a -- 2.47.2