This patchset modifies the migration part of drm_gpusvm to drm_pagemap and adds a populate_mm() op to drm_pagemap.
The idea is that the device that receives a pagefault determines if it wants to migrate content and to where. It then calls the populate_mm() method of relevant drm_pagemap. This functionality was mostly already in place, but hard-coded for xe only without going through a pagemap op. Since we might be dealing with separate devices moving forward, it also now becomes the responsibilit of the populate_mm() op to grab any necessary local device runtime pm references and keep them held while its pages are present in an mm (struct mm_struct). On thing to decide here is whether the populate_mm() callback should sit on a struct drm_pagemap for now while we sort multi-device usability out or whether we should add it (or something equivalent) to struct dev_pagemap. v2: - Rebase. Matthew Brost (1): drm/gpusvm, drm/pagemap: Move migration functionality to drm_pagemap Thomas Hellström (2): drm/pagemap: Add a populate_mm op drm/xe: Implement and use the drm_pagemap populate_mm op Documentation/gpu/rfc/gpusvm.rst | 12 +- drivers/gpu/drm/Makefile | 6 +- drivers/gpu/drm/drm_gpusvm.c | 760 +----------------------- drivers/gpu/drm/drm_pagemap.c | 846 +++++++++++++++++++++++++++ drivers/gpu/drm/xe/Kconfig | 10 +- drivers/gpu/drm/xe/xe_bo_types.h | 2 +- drivers/gpu/drm/xe/xe_device_types.h | 2 +- drivers/gpu/drm/xe/xe_svm.c | 129 ++-- drivers/gpu/drm/xe/xe_svm.h | 10 +- drivers/gpu/drm/xe/xe_tile.h | 11 + drivers/gpu/drm/xe/xe_vm.c | 2 +- include/drm/drm_gpusvm.h | 96 --- include/drm/drm_pagemap.h | 135 +++++ 13 files changed, 1107 insertions(+), 914 deletions(-) create mode 100644 drivers/gpu/drm/drm_pagemap.c -- 2.49.0