Lines Matching defs:ufence

35 	struct xe_user_fence *ufence = container_of(kref, struct xe_user_fence,
38 mmdrop(ufence->mm);
39 kfree(ufence);
42 static void user_fence_get(struct xe_user_fence *ufence)
44 kref_get(&ufence->refcount);
47 static void user_fence_put(struct xe_user_fence *ufence)
49 kref_put(&ufence->refcount, user_fence_destroy);
55 struct xe_user_fence *ufence;
62 ufence = kzalloc(sizeof(*ufence), GFP_KERNEL);
63 if (!ufence)
66 ufence->xe = xe;
67 kref_init(&ufence->refcount);
68 ufence->addr = ptr;
69 ufence->value = value;
70 ufence->mm = current->mm;
71 mmgrab(ufence->mm);
73 return ufence;
78 struct xe_user_fence *ufence = container_of(w, struct xe_user_fence, worker);
80 if (mmget_not_zero(ufence->mm)) {
81 kthread_use_mm(ufence->mm);
82 if (copy_to_user(ufence->addr, &ufence->value, sizeof(ufence->value)))
84 kthread_unuse_mm(ufence->mm);
85 mmput(ufence->mm);
87 drm_dbg(&ufence->xe->drm, "mmget_not_zero() failed, ufence wasn't signaled\n");
91 * Wake up waiters only after updating the ufence state, allowing the UMD
92 * to safely reuse the same ufence without encountering -EBUSY errors.
94 WRITE_ONCE(ufence->signalled, 1);
95 wake_up_all(&ufence->xe->ufence_wq);
96 user_fence_put(ufence);
99 static void kick_ufence(struct xe_user_fence *ufence, struct dma_fence *fence)
101 INIT_WORK(&ufence->worker, user_fence_worker);
102 queue_work(ufence->xe->ordered_wq, &ufence->worker);
108 struct xe_user_fence *ufence = container_of(cb, struct xe_user_fence, cb);
110 kick_ufence(ufence, fence);
195 sync->ufence = user_fence_create(xe, sync_in.addr,
197 if (XE_IOCTL_DBG(xe, IS_ERR(sync->ufence)))
198 return PTR_ERR(sync->ufence);
239 } else if (sync->ufence) {
243 user_fence_get(sync->ufence);
244 err = dma_fence_add_callback(fence, &sync->ufence->cb,
247 kick_ufence(sync->ufence, fence);
250 user_fence_put(sync->ufence);
262 if (sync->ufence)
263 user_fence_put(sync->ufence);
338 * @ufence: input user fence
344 struct xe_user_fence *__xe_sync_ufence_get(struct xe_user_fence *ufence)
346 user_fence_get(ufence);
348 return ufence;
361 user_fence_get(sync->ufence);
363 return sync->ufence;
368 * @ufence: user fence reference
371 void xe_sync_ufence_put(struct xe_user_fence *ufence)
373 user_fence_put(ufence);
378 * @ufence: user fence
382 int xe_sync_ufence_get_status(struct xe_user_fence *ufence)
384 return READ_ONCE(ufence->signalled);