On 6/26/2026 4:29 PM, Matthew Brost wrote:
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.
Really sorry about that, will sent to [email protected] to
trigger the CI in next version.
Regards,
Honglei
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