[PATCH] drm/xe: Fix flushing of garbage collector work

Niranjana Vishwanathapura niranjana.vishwanathapura at intel.com
Wed May 7 17:52:16 UTC 2025


The svm garbage collector work structure is only initialized
if CONFIG_DRM_XE_GPUSVM is enabled. Add xe_svm_flush() and
use it to flush svm garbage collector work instead of directly
flushing it.

Signed-off-by: Niranjana Vishwanathapura <niranjana.vishwanathapura at intel.com>
---
 drivers/gpu/drm/xe/xe_svm.h | 7 +++++++
 drivers/gpu/drm/xe/xe_vm.c  | 2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
index 3d441eb1f7ea..bd831f6104fe 100644
--- a/drivers/gpu/drm/xe/xe_svm.h
+++ b/drivers/gpu/drm/xe/xe_svm.h
@@ -87,6 +87,9 @@ static inline bool xe_svm_range_has_dma_mapping(struct xe_svm_range *range)
 	return range->base.flags.has_dma_mapping;
 }
 
+#define xe_svm_flush(vm__) \
+	flush_work(&(vm__)->svm.garbage_collector.work)
+
 #define xe_svm_assert_in_notifier(vm__) \
 	lockdep_assert_held_write(&(vm__)->svm.gpusvm.notifier_lock)
 
@@ -170,6 +173,10 @@ void xe_svm_range_debug(struct xe_svm_range *range, const char *operation)
 {
 }
 
+static inline void xe_svm_flush(struct xe_vm *vm)
+{
+}
+
 #define xe_svm_assert_in_notifier(...) do {} while (0)
 #define xe_svm_range_has_dma_mapping(...) false
 
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 80e56e232685..7f848491ada5 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -3332,7 +3332,7 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 
 	/* Ensure all UNMAPs visible */
 	if (xe_vm_in_fault_mode(vm))
-		flush_work(&vm->svm.garbage_collector.work);
+		xe_svm_flush(vm);
 
 	err = down_write_killable(&vm->lock);
 	if (err)
-- 
2.43.0



More information about the Intel-xe mailing list