[PATCH 0/1] Fix user-fence race issue

Zbigniew Kempczyński zbigniew.kempczynski at intel.com
Tue Aug 19 18:44:03 UTC 2025


I'm adding this cover-letter to explain the reproduction path which
might be useful for reviewers.

Following patch immediately triggers the race. Delay introduced after
writing to signal user-fence reveals it influences on next vm-bind
operation, especially if it is in a sequence:

vm-bind(MAP, addr, ..., ufence)
wait_ufence(ufence)
vm-bind(UNMAP, addr, ..., NULL)

UNMAP operation may start before ufence is released (because it is
part of user_fence_worker()) so we get -EBUSY trying to operate on
same vma (this happens on MAP).

diff --git a/drivers/gpu/drm/xe/xe_sync.c b/drivers/gpu/drm/xe/xe_sync.c
index 8becc3755649..d980b447b014 100644
--- a/drivers/gpu/drm/xe/xe_sync.c
+++ b/drivers/gpu/drm/xe/xe_sync.c
@@ -9,6 +9,7 @@
 #include <linux/kthread.h>
 #include <linux/sched/mm.h>
 #include <linux/uaccess.h>
+#include <linux/delay.h>
 
 #include <drm/drm_print.h>
 #include <drm/drm_syncobj.h>
@@ -81,6 +82,7 @@ static void user_fence_worker(struct work_struct *w)
                kthread_use_mm(ufence->mm);
                if (copy_to_user(ufence->addr, &ufence->value, sizeof(ufence->value)))
                        XE_WARN_ON("Copy to user failed");
+               usleep_range(25000, 30000);
                kthread_unuse_mm(ufence->mm);
                mmput(ufence->mm);
        } else {

Cc: Matthew Brost <matthew.brost at intel.com>
Cc: Matthew Auld <matthew.auld at intel.com>

Zbigniew Kempczyński (1):
  drm/xe/xe_sync: avoid race during ufence signaling

 drivers/gpu/drm/xe/xe_sync.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

-- 
2.43.0



More information about the Intel-xe mailing list