]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm, drm/xe: Fix xe userptr in the absence of CONFIG_DEVICE_PRIVATE
authorThomas Hellström <thomas.hellstrom@linux.intel.com>
Wed, 21 Jan 2026 09:10:47 +0000 (10:10 +0100)
committerThomas Hellström <thomas.hellstrom@linux.intel.com>
Thu, 22 Jan 2026 09:41:18 +0000 (10:41 +0100)
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>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Link: https://patch.msgid.link/20260121091048.41371-2-thomas.hellstrom@linux.intel.com
(cherry picked from commit 1e372b246199ca7a35f930177fea91b557dac16e)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
drivers/gpu/drm/Kconfig
drivers/gpu/drm/Makefile
drivers/gpu/drm/xe/Kconfig
include/drm/drm_pagemap.h

index 7e6bc0b3a589ce8a5ffc9894f02e076a4bfbd5c2..ed85d0ceee3ba59532cdbcfdd683b231670e9b4e 100644 (file)
@@ -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
index 0e1c668b46d2119c166430ac99996bc155c026c5..d261917174280ba99a2a5904e2a218efcc27e3c2 100644 (file)
@@ -108,8 +108,10 @@ 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
+
 obj-$(CONFIG_DRM_GPUSVM) += drm_gpusvm_helper.o
 
 obj-$(CONFIG_DRM_BUDDY) += drm_buddy.o
index 4b288eb3f5b0e5c0489f9e7301cad22459d8ef0a..c34be1be155b39aef9afd404214e93c4fe8b334d 100644 (file)
@@ -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
index 70a7991f784f9b06afddd74238c0bb8274d94337..eb29e5309f0ab6a03a0b2c874e975c621b266550 100644 (file)
@@ -209,6 +209,19 @@ struct drm_pagemap_devmem_ops {
                           struct dma_fence *pre_migrate_fence);
 };
 
+#if IS_ENABLED(CONFIG_ZONE_DEVICE)
+
+struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page);
+
+#else
+
+static inline struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page)
+{
+       return NULL;
+}
+
+#endif /* IS_ENABLED(CONFIG_ZONE_DEVICE) */
+
 /**
  * struct drm_pagemap_devmem - Structure representing a GPU SVM device memory allocation
  *
@@ -233,6 +246,8 @@ struct drm_pagemap_devmem {
        struct dma_fence *pre_migrate_fence;
 };
 
+#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,
@@ -243,8 +258,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,
@@ -256,4 +269,6 @@ int drm_pagemap_populate_mm(struct drm_pagemap *dpagemap,
                            struct mm_struct *mm,
                            unsigned long timeslice_ms);
 
+#endif /* IS_ENABLED(CONFIG_ZONE_DEVICE) */
+
 #endif