Lines Matching full:fence

52 				       struct dma_fence *fence)  in drm_sched_fence_set_parent()  argument
57 * fence's parent set before test_bit() in drm_sched_fence_set_parent()
59 smp_store_release(&s_fence->parent, dma_fence_get(fence)); in drm_sched_fence_set_parent()
62 dma_fence_set_deadline(fence, s_fence->deadline); in drm_sched_fence_set_parent()
65 void drm_sched_fence_scheduled(struct drm_sched_fence *fence, in drm_sched_fence_scheduled() argument
68 /* Set the parent before signaling the scheduled fence, such that, in drm_sched_fence_scheduled()
75 drm_sched_fence_set_parent(fence, parent); in drm_sched_fence_scheduled()
77 dma_fence_signal(&fence->scheduled); in drm_sched_fence_scheduled()
80 void drm_sched_fence_finished(struct drm_sched_fence *fence, int result) in drm_sched_fence_finished() argument
83 dma_fence_set_error(&fence->finished, result); in drm_sched_fence_finished()
84 dma_fence_signal(&fence->finished); in drm_sched_fence_finished()
87 static const char *drm_sched_fence_get_driver_name(struct dma_fence *fence) in drm_sched_fence_get_driver_name() argument
94 struct drm_sched_fence *fence = to_drm_sched_fence(f); in drm_sched_fence_get_timeline_name() local
95 return (const char *)fence->sched->name; in drm_sched_fence_get_timeline_name()
101 struct drm_sched_fence *fence = to_drm_sched_fence(f); in drm_sched_fence_free_rcu() local
103 if (!WARN_ON_ONCE(!fence)) in drm_sched_fence_free_rcu()
104 kmem_cache_free(sched_fence_slab, fence); in drm_sched_fence_free_rcu()
108 * drm_sched_fence_free - free up an uninitialized fence
110 * @fence: fence to free
112 * Free up the fence memory. Should only be used if drm_sched_fence_init()
115 void drm_sched_fence_free(struct drm_sched_fence *fence) in drm_sched_fence_free() argument
117 /* This function should not be called if the fence has been initialized. */ in drm_sched_fence_free()
118 if (!WARN_ON_ONCE(fence->sched)) in drm_sched_fence_free()
119 kmem_cache_free(sched_fence_slab, fence); in drm_sched_fence_free()
123 * drm_sched_fence_release_scheduled - callback that fence can be freed
125 * @f: fence
128 * It just RCU schedules freeing up the fence.
132 struct drm_sched_fence *fence = to_drm_sched_fence(f); in drm_sched_fence_release_scheduled() local
134 dma_fence_put(fence->parent); in drm_sched_fence_release_scheduled()
135 call_rcu(&fence->finished.rcu, drm_sched_fence_free_rcu); in drm_sched_fence_release_scheduled()
141 * @f: fence
143 * Drop the extra reference from the scheduled fence to the base fence.
147 struct drm_sched_fence *fence = to_drm_sched_fence(f); in drm_sched_fence_release_finished() local
149 dma_fence_put(&fence->scheduled); in drm_sched_fence_release_finished()
155 struct drm_sched_fence *fence = to_drm_sched_fence(f); in drm_sched_fence_set_deadline_finished() local
159 spin_lock_irqsave(&fence->lock, flags); in drm_sched_fence_set_deadline_finished()
163 ktime_before(fence->deadline, deadline)) { in drm_sched_fence_set_deadline_finished()
164 spin_unlock_irqrestore(&fence->lock, flags); in drm_sched_fence_set_deadline_finished()
168 fence->deadline = deadline; in drm_sched_fence_set_deadline_finished()
171 spin_unlock_irqrestore(&fence->lock, flags); in drm_sched_fence_set_deadline_finished()
178 parent = smp_load_acquire(&fence->parent); in drm_sched_fence_set_deadline_finished()
211 struct drm_sched_fence *fence = NULL; in drm_sched_fence_alloc() local
213 fence = kmem_cache_zalloc(sched_fence_slab, GFP_KERNEL); in drm_sched_fence_alloc()
214 if (fence == NULL) in drm_sched_fence_alloc()
217 fence->owner = owner; in drm_sched_fence_alloc()
218 spin_lock_init(&fence->lock); in drm_sched_fence_alloc()
220 return fence; in drm_sched_fence_alloc()
223 void drm_sched_fence_init(struct drm_sched_fence *fence, in drm_sched_fence_init() argument
228 fence->sched = entity->rq->sched; in drm_sched_fence_init()
230 dma_fence_init(&fence->scheduled, &drm_sched_fence_ops_scheduled, in drm_sched_fence_init()
231 &fence->lock, entity->fence_context, seq); in drm_sched_fence_init()
232 dma_fence_init(&fence->finished, &drm_sched_fence_ops_finished, in drm_sched_fence_init()
233 &fence->lock, entity->fence_context + 1, seq); in drm_sched_fence_init()