* [PATCH v2 1/2] drm, drm/xe: Fix xe userptr in the absence of CONFIG_DEVICE_PRIVATE [not found] <20260120143459.9485-1-thomas.hellstrom@linux.intel.com> @ 2026-01-20 14:34 ` Thomas Hellström 2026-01-20 18:05 ` Matthew Brost 0 siblings, 1 reply; 3+ messages in thread From: Thomas Hellström @ 2026-01-20 14:34 UTC (permalink / raw) To: intel-xe Cc: Thomas Hellström, Matthew Auld, Himal Prasad Ghimiray, Matthew Brost, Rodrigo Vivi, dri-devel, stable CONFIG_DEVICE_PRIVATE is not selected by default by some distros, for example Fedora, and that leads to a regression in the xe driver since userptr support gets compiled out. It turns out that DRM_GPUSVM, which is needed for xe userptr support compiles also without CONFIG_DEVICE_PRIVATE, but doesn't compile without CONFIG_ZONE_DEVICE. Exclude the drm_pagemap files from compilation with !CONFIG_ZONE_DEVICE, and remove the CONFIG_DEVICE_PRIVATE dependency from CONFIG_DRM_GPUSVM and the xe driver's selection of it, re-enabling xe userptr for those configs. v2: - Don't compile the drm_pagemap files unless CONFIG_ZONE_DEVICE is set. - Adjust the drm_pagemap.h header accordingly. Fixes: 9e9787414882 ("drm/xe/userptr: replace xe_hmm with gpusvm") Cc: Matthew Auld <matthew.auld@intel.com> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: dri-devel@lists.freedesktop.org Cc: <stable@vger.kernel.org> # v6.18+ Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> --- drivers/gpu/drm/Kconfig | 2 +- drivers/gpu/drm/Makefile | 4 +++- drivers/gpu/drm/xe/Kconfig | 2 +- include/drm/drm_pagemap.h | 18 ++++++++++++++---- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index a33b90251530..d3d52310c9cc 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -210,7 +210,7 @@ config DRM_GPUVM config DRM_GPUSVM tristate - depends on DRM && DEVICE_PRIVATE + depends on DRM select HMM_MIRROR select MMU_NOTIFIER help diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index 0deee72ef935..0c21029c446f 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -108,9 +108,11 @@ obj-$(CONFIG_DRM_EXEC) += drm_exec.o obj-$(CONFIG_DRM_GPUVM) += drm_gpuvm.o drm_gpusvm_helper-y := \ - drm_gpusvm.o\ + drm_gpusvm.o +drm_gpusvm_helper-$(CONFIG_ZONE_DEVICE) += \ drm_pagemap.o\ drm_pagemap_util.o + obj-$(CONFIG_DRM_GPUSVM) += drm_gpusvm_helper.o obj-$(CONFIG_DRM_BUDDY) += drm_buddy.o diff --git a/drivers/gpu/drm/xe/Kconfig b/drivers/gpu/drm/xe/Kconfig index 4b288eb3f5b0..c34be1be155b 100644 --- a/drivers/gpu/drm/xe/Kconfig +++ b/drivers/gpu/drm/xe/Kconfig @@ -39,7 +39,7 @@ config DRM_XE select DRM_TTM select DRM_TTM_HELPER select DRM_EXEC - select DRM_GPUSVM if !UML && DEVICE_PRIVATE + select DRM_GPUSVM if !UML select DRM_GPUVM select DRM_SCHED select MMU_NOTIFIER diff --git a/include/drm/drm_pagemap.h b/include/drm/drm_pagemap.h index 46e9c58f09e0..2baf0861f78f 100644 --- a/include/drm/drm_pagemap.h +++ b/include/drm/drm_pagemap.h @@ -243,6 +243,8 @@ struct drm_pagemap_devmem_ops { struct dma_fence *pre_migrate_fence); }; +#if IS_ENABLED(CONFIG_ZONE_DEVICE) + int drm_pagemap_init(struct drm_pagemap *dpagemap, struct dev_pagemap *pagemap, struct drm_device *drm, @@ -252,17 +254,22 @@ struct drm_pagemap *drm_pagemap_create(struct drm_device *drm, struct dev_pagemap *pagemap, const struct drm_pagemap_ops *ops); -#if IS_ENABLED(CONFIG_DRM_GPUSVM) +struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page); void drm_pagemap_put(struct drm_pagemap *dpagemap); #else +static inline struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page) +{ + return NULL; +} + static inline void drm_pagemap_put(struct drm_pagemap *dpagemap) { } -#endif /* IS_ENABLED(CONFIG_DRM_GPUSVM) */ +#endif /* IS_ENABLED(CONFIG_ZONE_DEVICE) */ /** * drm_pagemap_get() - Obtain a reference on a struct drm_pagemap @@ -334,6 +341,8 @@ struct drm_pagemap_migrate_details { u32 source_peer_migrates : 1; }; +#if IS_ENABLED(CONFIG_ZONE_DEVICE) + int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, struct mm_struct *mm, unsigned long start, unsigned long end, @@ -343,8 +352,6 @@ int drm_pagemap_evict_to_ram(struct drm_pagemap_devmem *devmem_allocation); const struct dev_pagemap_ops *drm_pagemap_pagemap_ops_get(void); -struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page); - void drm_pagemap_devmem_init(struct drm_pagemap_devmem *devmem_allocation, struct device *dev, struct mm_struct *mm, const struct drm_pagemap_devmem_ops *ops, @@ -359,4 +366,7 @@ int drm_pagemap_populate_mm(struct drm_pagemap *dpagemap, void drm_pagemap_destroy(struct drm_pagemap *dpagemap, bool is_atomic_or_reclaim); int drm_pagemap_reinit(struct drm_pagemap *dpagemap); + +#endif /* IS_ENABLED(CONFIG_ZONE_DEVICE) */ + #endif -- 2.52.0 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2 1/2] drm, drm/xe: Fix xe userptr in the absence of CONFIG_DEVICE_PRIVATE 2026-01-20 14:34 ` [PATCH v2 1/2] drm, drm/xe: Fix xe userptr in the absence of CONFIG_DEVICE_PRIVATE Thomas Hellström @ 2026-01-20 18:05 ` Matthew Brost 2026-01-23 13:34 ` Thomas Hellström 0 siblings, 1 reply; 3+ messages in thread From: Matthew Brost @ 2026-01-20 18:05 UTC (permalink / raw) To: Thomas Hellström Cc: intel-xe, Matthew Auld, Himal Prasad Ghimiray, Rodrigo Vivi, dri-devel, stable On Tue, Jan 20, 2026 at 03:34:58PM +0100, Thomas Hellström wrote: > CONFIG_DEVICE_PRIVATE is not selected by default by some distros, > for example Fedora, and that leads to a regression in the xe driver > since userptr support gets compiled out. > > It turns out that DRM_GPUSVM, which is needed for xe userptr support > compiles also without CONFIG_DEVICE_PRIVATE, but doesn't compile > without CONFIG_ZONE_DEVICE. > Exclude the drm_pagemap files from compilation with !CONFIG_ZONE_DEVICE, > and remove the CONFIG_DEVICE_PRIVATE dependency from CONFIG_DRM_GPUSVM and > the xe driver's selection of it, re-enabling xe userptr for those configs. > > v2: > - Don't compile the drm_pagemap files unless CONFIG_ZONE_DEVICE is set. > - Adjust the drm_pagemap.h header accordingly. > > Fixes: 9e9787414882 ("drm/xe/userptr: replace xe_hmm with gpusvm") > Cc: Matthew Auld <matthew.auld@intel.com> > Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> > Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> > Cc: Matthew Brost <matthew.brost@intel.com> > Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com> > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> > Cc: dri-devel@lists.freedesktop.org > Cc: <stable@vger.kernel.org> # v6.18+ > Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> > --- > drivers/gpu/drm/Kconfig | 2 +- > drivers/gpu/drm/Makefile | 4 +++- > drivers/gpu/drm/xe/Kconfig | 2 +- > include/drm/drm_pagemap.h | 18 ++++++++++++++---- > 4 files changed, 19 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig > index a33b90251530..d3d52310c9cc 100644 > --- a/drivers/gpu/drm/Kconfig > +++ b/drivers/gpu/drm/Kconfig > @@ -210,7 +210,7 @@ config DRM_GPUVM > > config DRM_GPUSVM > tristate > - depends on DRM && DEVICE_PRIVATE > + depends on DRM > select HMM_MIRROR > select MMU_NOTIFIER > help > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile > index 0deee72ef935..0c21029c446f 100644 > --- a/drivers/gpu/drm/Makefile > +++ b/drivers/gpu/drm/Makefile > @@ -108,9 +108,11 @@ obj-$(CONFIG_DRM_EXEC) += drm_exec.o > obj-$(CONFIG_DRM_GPUVM) += drm_gpuvm.o > > drm_gpusvm_helper-y := \ > - drm_gpusvm.o\ > + drm_gpusvm.o > +drm_gpusvm_helper-$(CONFIG_ZONE_DEVICE) += \ > drm_pagemap.o\ > drm_pagemap_util.o > + > obj-$(CONFIG_DRM_GPUSVM) += drm_gpusvm_helper.o > > obj-$(CONFIG_DRM_BUDDY) += drm_buddy.o > diff --git a/drivers/gpu/drm/xe/Kconfig b/drivers/gpu/drm/xe/Kconfig > index 4b288eb3f5b0..c34be1be155b 100644 > --- a/drivers/gpu/drm/xe/Kconfig > +++ b/drivers/gpu/drm/xe/Kconfig > @@ -39,7 +39,7 @@ config DRM_XE > select DRM_TTM > select DRM_TTM_HELPER > select DRM_EXEC > - select DRM_GPUSVM if !UML && DEVICE_PRIVATE > + select DRM_GPUSVM if !UML > select DRM_GPUVM > select DRM_SCHED > select MMU_NOTIFIER > diff --git a/include/drm/drm_pagemap.h b/include/drm/drm_pagemap.h > index 46e9c58f09e0..2baf0861f78f 100644 > --- a/include/drm/drm_pagemap.h > +++ b/include/drm/drm_pagemap.h > @@ -243,6 +243,8 @@ struct drm_pagemap_devmem_ops { > struct dma_fence *pre_migrate_fence); > }; > > +#if IS_ENABLED(CONFIG_ZONE_DEVICE) > + What happens if we select ZONE_DEVICE but not DEVICE_PRIVATE? Matt > int drm_pagemap_init(struct drm_pagemap *dpagemap, > struct dev_pagemap *pagemap, > struct drm_device *drm, > @@ -252,17 +254,22 @@ struct drm_pagemap *drm_pagemap_create(struct drm_device *drm, > struct dev_pagemap *pagemap, > const struct drm_pagemap_ops *ops); > > -#if IS_ENABLED(CONFIG_DRM_GPUSVM) > +struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page); > > void drm_pagemap_put(struct drm_pagemap *dpagemap); > > #else > > +static inline struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page) > +{ > + return NULL; > +} > + > static inline void drm_pagemap_put(struct drm_pagemap *dpagemap) > { > } > > -#endif /* IS_ENABLED(CONFIG_DRM_GPUSVM) */ > +#endif /* IS_ENABLED(CONFIG_ZONE_DEVICE) */ > > /** > * drm_pagemap_get() - Obtain a reference on a struct drm_pagemap > @@ -334,6 +341,8 @@ struct drm_pagemap_migrate_details { > u32 source_peer_migrates : 1; > }; > > +#if IS_ENABLED(CONFIG_ZONE_DEVICE) > + > int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > struct mm_struct *mm, > unsigned long start, unsigned long end, > @@ -343,8 +352,6 @@ int drm_pagemap_evict_to_ram(struct drm_pagemap_devmem *devmem_allocation); > > const struct dev_pagemap_ops *drm_pagemap_pagemap_ops_get(void); > > -struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page); > - > void drm_pagemap_devmem_init(struct drm_pagemap_devmem *devmem_allocation, > struct device *dev, struct mm_struct *mm, > const struct drm_pagemap_devmem_ops *ops, > @@ -359,4 +366,7 @@ int drm_pagemap_populate_mm(struct drm_pagemap *dpagemap, > void drm_pagemap_destroy(struct drm_pagemap *dpagemap, bool is_atomic_or_reclaim); > > int drm_pagemap_reinit(struct drm_pagemap *dpagemap); > + > +#endif /* IS_ENABLED(CONFIG_ZONE_DEVICE) */ > + > #endif > -- > 2.52.0 > ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2 1/2] drm, drm/xe: Fix xe userptr in the absence of CONFIG_DEVICE_PRIVATE 2026-01-20 18:05 ` Matthew Brost @ 2026-01-23 13:34 ` Thomas Hellström 0 siblings, 0 replies; 3+ messages in thread From: Thomas Hellström @ 2026-01-23 13:34 UTC (permalink / raw) To: Matthew Brost Cc: intel-xe, Matthew Auld, Himal Prasad Ghimiray, Rodrigo Vivi, dri-devel, stable On Tue, 2026-01-20 at 10:05 -0800, Matthew Brost wrote: > On Tue, Jan 20, 2026 at 03:34:58PM +0100, Thomas Hellström wrote: > > CONFIG_DEVICE_PRIVATE is not selected by default by some distros, > > for example Fedora, and that leads to a regression in the xe driver > > since userptr support gets compiled out. > > > > It turns out that DRM_GPUSVM, which is needed for xe userptr > > support > > compiles also without CONFIG_DEVICE_PRIVATE, but doesn't compile > > without CONFIG_ZONE_DEVICE. > > Exclude the drm_pagemap files from compilation with > > !CONFIG_ZONE_DEVICE, > > and remove the CONFIG_DEVICE_PRIVATE dependency from > > CONFIG_DRM_GPUSVM and > > the xe driver's selection of it, re-enabling xe userptr for those > > configs. > > > > v2: > > - Don't compile the drm_pagemap files unless CONFIG_ZONE_DEVICE is > > set. > > - Adjust the drm_pagemap.h header accordingly. > > > > Fixes: 9e9787414882 ("drm/xe/userptr: replace xe_hmm with gpusvm") > > Cc: Matthew Auld <matthew.auld@intel.com> > > Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> > > Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> > > Cc: Matthew Brost <matthew.brost@intel.com> > > Cc: "Thomas Hellström" <thomas.hellstrom@linux.intel.com> > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> > > Cc: dri-devel@lists.freedesktop.org > > Cc: <stable@vger.kernel.org> # v6.18+ > > Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> > > --- > > drivers/gpu/drm/Kconfig | 2 +- > > drivers/gpu/drm/Makefile | 4 +++- > > drivers/gpu/drm/xe/Kconfig | 2 +- > > include/drm/drm_pagemap.h | 18 ++++++++++++++---- > > 4 files changed, 19 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig > > index a33b90251530..d3d52310c9cc 100644 > > --- a/drivers/gpu/drm/Kconfig > > +++ b/drivers/gpu/drm/Kconfig > > @@ -210,7 +210,7 @@ config DRM_GPUVM > > > > config DRM_GPUSVM > > tristate > > - depends on DRM && DEVICE_PRIVATE > > + depends on DRM > > select HMM_MIRROR > > select MMU_NOTIFIER > > help > > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile > > index 0deee72ef935..0c21029c446f 100644 > > --- a/drivers/gpu/drm/Makefile > > +++ b/drivers/gpu/drm/Makefile > > @@ -108,9 +108,11 @@ obj-$(CONFIG_DRM_EXEC) += drm_exec.o > > obj-$(CONFIG_DRM_GPUVM) += drm_gpuvm.o > > > > drm_gpusvm_helper-y := \ > > - drm_gpusvm.o\ > > + drm_gpusvm.o > > +drm_gpusvm_helper-$(CONFIG_ZONE_DEVICE) += \ > > drm_pagemap.o\ > > drm_pagemap_util.o > > + > > obj-$(CONFIG_DRM_GPUSVM) += drm_gpusvm_helper.o > > > > obj-$(CONFIG_DRM_BUDDY) += drm_buddy.o > > diff --git a/drivers/gpu/drm/xe/Kconfig > > b/drivers/gpu/drm/xe/Kconfig > > index 4b288eb3f5b0..c34be1be155b 100644 > > --- a/drivers/gpu/drm/xe/Kconfig > > +++ b/drivers/gpu/drm/xe/Kconfig > > @@ -39,7 +39,7 @@ config DRM_XE > > select DRM_TTM > > select DRM_TTM_HELPER > > select DRM_EXEC > > - select DRM_GPUSVM if !UML && DEVICE_PRIVATE > > + select DRM_GPUSVM if !UML > > select DRM_GPUVM > > select DRM_SCHED > > select MMU_NOTIFIER > > diff --git a/include/drm/drm_pagemap.h b/include/drm/drm_pagemap.h > > index 46e9c58f09e0..2baf0861f78f 100644 > > --- a/include/drm/drm_pagemap.h > > +++ b/include/drm/drm_pagemap.h > > @@ -243,6 +243,8 @@ struct drm_pagemap_devmem_ops { > > struct dma_fence *pre_migrate_fence); > > }; > > > > +#if IS_ENABLED(CONFIG_ZONE_DEVICE) > > + > > What happens if we select ZONE_DEVICE but not DEVICE_PRIVATE? This code builds, and in theory would work for DEVICE_COHERENT but the device-private checks in the code always return false as I understand it. So should be safe for our userptr code, and SVM still requires / selects DEVICE_PRIVATE. Thomas > > Matt > > > int drm_pagemap_init(struct drm_pagemap *dpagemap, > > struct dev_pagemap *pagemap, > > struct drm_device *drm, > > @@ -252,17 +254,22 @@ struct drm_pagemap *drm_pagemap_create(struct > > drm_device *drm, > > struct dev_pagemap > > *pagemap, > > const struct > > drm_pagemap_ops *ops); > > > > -#if IS_ENABLED(CONFIG_DRM_GPUSVM) > > +struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page > > *page); > > > > void drm_pagemap_put(struct drm_pagemap *dpagemap); > > > > #else > > > > +static inline struct drm_pagemap > > *drm_pagemap_page_to_dpagemap(struct page *page) > > +{ > > + return NULL; > > +} > > + > > static inline void drm_pagemap_put(struct drm_pagemap *dpagemap) > > { > > } > > > > -#endif /* IS_ENABLED(CONFIG_DRM_GPUSVM) */ > > +#endif /* IS_ENABLED(CONFIG_ZONE_DEVICE) */ > > > > /** > > * drm_pagemap_get() - Obtain a reference on a struct drm_pagemap > > @@ -334,6 +341,8 @@ struct drm_pagemap_migrate_details { > > u32 source_peer_migrates : 1; > > }; > > > > +#if IS_ENABLED(CONFIG_ZONE_DEVICE) > > + > > int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem > > *devmem_allocation, > > struct mm_struct *mm, > > unsigned long start, unsigned > > long end, > > @@ -343,8 +352,6 @@ int drm_pagemap_evict_to_ram(struct > > drm_pagemap_devmem *devmem_allocation); > > > > const struct dev_pagemap_ops *drm_pagemap_pagemap_ops_get(void); > > > > -struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page > > *page); > > - > > void drm_pagemap_devmem_init(struct drm_pagemap_devmem > > *devmem_allocation, > > struct device *dev, struct mm_struct > > *mm, > > const struct drm_pagemap_devmem_ops > > *ops, > > @@ -359,4 +366,7 @@ int drm_pagemap_populate_mm(struct drm_pagemap > > *dpagemap, > > void drm_pagemap_destroy(struct drm_pagemap *dpagemap, bool > > is_atomic_or_reclaim); > > > > int drm_pagemap_reinit(struct drm_pagemap *dpagemap); > > + > > +#endif /* IS_ENABLED(CONFIG_ZONE_DEVICE) */ > > + > > #endif > > -- > > 2.52.0 > > ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-01-23 13:34 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260120143459.9485-1-thomas.hellstrom@linux.intel.com>
2026-01-20 14:34 ` [PATCH v2 1/2] drm, drm/xe: Fix xe userptr in the absence of CONFIG_DEVICE_PRIVATE Thomas Hellström
2026-01-20 18:05 ` Matthew Brost
2026-01-23 13:34 ` Thomas Hellström
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox