On Thu, Jun 18, 2026 at 04:08:57PM +0800, Honglei Huang wrote:
> From: Honglei Huang <[email protected]>
> 
> The intent of this series is to make drm_gpusvm more flexible and give
> drivers more freedom over how they assemble the MM related and device
> side operations. It implements the direction Matt suggested in [1]:
> Mirror MR in gitlab: [4]
> 
>   - Move struct drm_gpusvm_pages out of struct drm_gpusvm_range.
>   - Embed a struct drm_device in struct drm_gpusvm_pages and drive all
>     DMA through it.
>   - Drop struct drm_device from struct drm_gpusvm.
>   - Have the driver's range structure embed one or more struct
>     drm_gpusvm_pages in addition to struct drm_gpusvm_range.
>   - Drop the range-based helpers (drm_gpusvm_range_pages_valid,
>     drm_gpusvm_range_get_pages, drm_gpusvm_range_unmap_pages) and update
>     drivers to use the drm_gpusvm_pages helpers instead.
> 
> In essence the series does only two abstractions, plus the xe
> adaptation that follows from them:
> 
>   - range vs pages: split drm_gpusvm_range (MM / VA range state) from
>     drm_gpusvm_pages (device physical related), so the two sides can
>     have independent lifetimes and ownership.
>   - drm_gpusvm vs drm_device: make drm_gpusvm pure MM level and push
>     the device side down onto drm_gpusvm_pages, which is where DMA
>     actually happens.
>   - xe is updated to fit the modifications, no functional change
>     intended.
> 
> V3:
>   - Fix a kernel-doc/Sphinx warning from the kernel test robot: use
>     ".. code-block:: c" for the drm_gpusvm_pages example in DOC: overview.
>   - drm_gpusvm_range_set_unmapped(): use WRITE_ONCE() on the whole
>     pages[i].flags.__flags word to pair with the lockless READ_ONCE()
>     readers and avoid a data race.
>   - xe_userptr_setup(): call drm_gpusvm_init_pages() before
>     mmu_interval_notifier_insert() to avoid exposing uninitialized
>     pages.drm to invalidation callbacks.
>   - Fix per commit build of the set_unmapped() pages.
> 
> V2:
>   - Followed in Matt's v0 review fixups [2]:
>      - keep unmapped flag in pages structures.
>      - add pages_count to drm_gpusvm_range_set_unmapped() to set the pages
>        unmapped flag, so the framework can check unmapped status in
>        drm_gpusvm_get_pages().
>   - Add drm_gpusvm_init_pages to init the drm_device and sequence number.
>   - Remove drm_device from drm_gpusvm_get_pages() parameters.
>   - Reworked the DOC: overview and usage examples to describe the new
>     model: struct drm_gpusvm_pages, the 1:1 / N:1 driver layouts, and
>     examples that operate on a driver embedded pages object by the
>     drm_gpusvm_pages helpers and etc.
>   - remove WARN_ON_ONCE in __drm_gpusvm_unmap_pages.
>   - Dropped RFC.
> 
> Follow-up (not in this series):
> 
>   - modify drm_gpusvm_get_pages() to support one time hmm range fault
>     and multi drm device dma mapping.
>   - Add no dma device support for drm_gpusvm_get_pages().
> 
> tests:
> AMDGPU:
>   based on amdgpu adaptation patch in [3], but still SVM:DRM = 1:1,
>   1:n is on going needs many modifications and testings.
> 
>   Tested on gfx943 (MI300X) and gfx906 (MI60) with XNACK on/off:
>   - KFD test: 95%+ passed.
>   - ROCR test: all passed.
>   - HIP catch test: gfx943 (MI300X): 99% passed.
>                     gfx906 (MI60): 99% passed.
> INTEL XE:
>   Waiting for the xe driver git lab CI result: [4]

Sending to the Xe list ([email protected]) is enough to
trigger CI, and the results will appear in the Patchwork link [5].
However, I am not seeing this series there, even though Xe was CC’d.

Perhaps the patch must be sent *to* the list, rather than just CC’d, to
trigger CI?

Anyways, I think you will need one more spin here, so hopefully you get
results in the next rev and then it will be good to merge. If not for
some reason I'll apply the patches and give it a quick test run.

Mastt

[5] 
https://patchwork.freedesktop.org/project/intel-xe/series/?ordering=-last_updated

> 
> links:
> [1] 
> https://lore.kernel.org/amd-gfx/acRgr7QwdULsn6G2@gsse-cloud1/#:~:text=I%20think%20roughly,drm_gpusvm_pages%0A%20%20helpers%20instead.
> [2] 
> https://gitlab.freedesktop.org/mbrost/xe-kernel-driver-svn-perf-6-15-2025/-/commit/623f6a50c037d9e44f6c9fbe6859a0ba7ad50177
> [3] 
> https://lore.kernel.org/amd-gfx/[email protected]/
> [4] https://gitlab.freedesktop.org/drm/xe/kernel/-/merge_requests/360
> 
> Honglei Huang (5):
>   drm/gpusvm: split MM state flags out of drm_gpusvm_pages_flags
>   drm/gpusvm: embed struct drm_device into drm_gpusvm_pages
>   drm/xe: have xe_svm_range embed one drm_gpusvm_pages
>   drm/gpusvm: move struct drm_gpusvm_pages out of struct
>     drm_gpusvm_range
>   drm/gpusvm: let the drm_gpusvm core context purely MM level
> 
>  drivers/gpu/drm/drm_gpusvm.c    | 230 ++++++++++++++++++--------------
>  drivers/gpu/drm/xe/xe_pt.c      |   2 +-
>  drivers/gpu/drm/xe/xe_svm.c     |  37 +++--
>  drivers/gpu/drm/xe/xe_svm.h     |   8 +-
>  drivers/gpu/drm/xe/xe_userptr.c |   5 +-
>  include/drm/drm_gpusvm.h        |  66 ++++++---
>  6 files changed, 209 insertions(+), 139 deletions(-)
> 
> 
> base-commit: b9297d19d9df5d4b6c994648570c5dcd1cac68ff
> -- 
> 2.34.1
> 

Reply via email to