(Cc: Caterina) On Tue Jul 22, 2025 at 3:35 PM CEST, Himal Prasad Ghimiray wrote: > - DRM_GPUVM_SM_MAP_NOT_MADVISE: Default sm_map operations for the input > range. > > - DRM_GPUVM_SKIP_GEM_OBJ_VA_SPLIT_MADVISE: This flag is used by > drm_gpuvm_sm_map_ops_create to iterate over GPUVMA's in the > user-provided range and split the existing non-GEM object VMA if the > start or end of the input range lies within it. The operations can > create up to 2 REMAPS and 2 MAPs. The purpose of this operation is to be > used by the Xe driver to assign attributes to GPUVMA's within the > user-defined range. Unlike drm_gpuvm_sm_map_ops_flags in default mode, > the operation with this flag will never have UNMAPs and > merges, and can be without any final operations. > > v2 > - use drm_gpuvm_sm_map_ops_create with flags instead of defining new > ops_create (Danilo) > - Add doc (Danilo) > > v3 > - Fix doc > - Fix unmapping check > > v4 > - Fix mapping for non madvise ops > > Cc: Danilo Krummrich <d...@redhat.com> > Cc: Matthew Brost <matthew.br...@intel.com> > Cc: Boris Brezillon <bbrezil...@kernel.org> > Cc: <dri-devel@lists.freedesktop.org> > Signed-off-by: Himal Prasad Ghimiray<himal.prasad.ghimi...@intel.com> > --- > drivers/gpu/drm/drm_gpuvm.c | 93 ++++++++++++++++++++------ > drivers/gpu/drm/nouveau/nouveau_uvmm.c | 1 + > drivers/gpu/drm/xe/xe_vm.c | 1 +
What about the other drivers using GPUVM, aren't they affected by the changes? > include/drm/drm_gpuvm.h | 25 ++++++- > 4 files changed, 98 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/drm_gpuvm.c b/drivers/gpu/drm/drm_gpuvm.c > index e89b932e987c..c7779588ea38 100644 > --- a/drivers/gpu/drm/drm_gpuvm.c > +++ b/drivers/gpu/drm/drm_gpuvm.c > @@ -2103,10 +2103,13 @@ static int > __drm_gpuvm_sm_map(struct drm_gpuvm *gpuvm, > const struct drm_gpuvm_ops *ops, void *priv, > u64 req_addr, u64 req_range, > + enum drm_gpuvm_sm_map_ops_flags flags, Please coordinate with Boris and Caterina here. They're adding a new request structure, struct drm_gpuvm_map_req. I think we can define it as struct drm_gpuvm_map_req { struct drm_gpuva_op_map map; struct drm_gpuvm_sm_map_ops_flags flags; } eventually. Please also coordinate on the changes in __drm_gpuvm_sm_map() below regarding Caterina's series [1], it looks like they're conflicting. [1] https://lore.kernel.org/all/20250707170442.1437009-1-caterina.shab...@collabora.com/ > +/** > + * enum drm_gpuvm_sm_map_ops_flags - flags for drm_gpuvm split/merge ops > + */ > +enum drm_gpuvm_sm_map_ops_flags { > + /** > + * @DRM_GPUVM_SM_MAP_NOT_MADVISE: DEFAULT sm_map ops > + */ > + DRM_GPUVM_SM_MAP_NOT_MADVISE = 0, Why would we name this "NOT_MADVISE"? What if we add more flags for other purposes? > + /** > + * @DRM_GPUVM_SKIP_GEM_OBJ_VA_SPLIT_MADVISE: This flag is used by > + * drm_gpuvm_sm_map_ops_create to iterate over GPUVMA's in the > + * user-provided range and split the existing non-GEM object VMA if the > + * start or end of the input range lies within it. The operations can > + * create up to 2 REMAPS and 2 MAPs. Unlike drm_gpuvm_sm_map_ops_flags > + * in default mode, the operation with this flag will never have UNMAPs > and > + * merges, and can be without any final operations. > + */ > + DRM_GPUVM_SKIP_GEM_OBJ_VA_SPLIT_MADVISE = BIT(0), > +};