Lines Matching refs:fence

52 				       struct dma_fence *fence)
57 * fence's parent set before test_bit()
59 smp_store_release(&s_fence->parent, dma_fence_get(fence));
62 dma_fence_set_deadline(fence, s_fence->deadline);
65 void drm_sched_fence_scheduled(struct drm_sched_fence *fence,
68 /* Set the parent before signaling the scheduled fence, such that,
75 drm_sched_fence_set_parent(fence, parent);
77 dma_fence_signal(&fence->scheduled);
80 void drm_sched_fence_finished(struct drm_sched_fence *fence, int result)
83 dma_fence_set_error(&fence->finished, result);
84 dma_fence_signal(&fence->finished);
87 static const char *drm_sched_fence_get_driver_name(struct dma_fence *fence)
94 struct drm_sched_fence *fence = to_drm_sched_fence(f);
95 return (const char *)fence->sched->name;
101 struct drm_sched_fence *fence = to_drm_sched_fence(f);
103 if (!WARN_ON_ONCE(!fence))
104 kmem_cache_free(sched_fence_slab, fence);
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)
117 /* This function should not be called if the fence has been initialized. */
118 if (!WARN_ON_ONCE(fence->sched))
119 kmem_cache_free(sched_fence_slab, fence);
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);
134 dma_fence_put(fence->parent);
135 call_rcu(&fence->finished.rcu, drm_sched_fence_free_rcu);
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);
149 dma_fence_put(&fence->scheduled);
155 struct drm_sched_fence *fence = to_drm_sched_fence(f);
159 spin_lock_irqsave(&fence->lock, flags);
163 ktime_before(fence->deadline, deadline)) {
164 spin_unlock_irqrestore(&fence->lock, flags);
168 fence->deadline = deadline;
171 spin_unlock_irqrestore(&fence->lock, flags);
178 parent = smp_load_acquire(&fence->parent);
211 struct drm_sched_fence *fence = NULL;
213 fence = kmem_cache_zalloc(sched_fence_slab, GFP_KERNEL);
214 if (fence == NULL)
217 fence->owner = owner;
218 spin_lock_init(&fence->lock);
220 return fence;
223 void drm_sched_fence_init(struct drm_sched_fence *fence,
228 fence->sched = entity->rq->sched;
230 dma_fence_init(&fence->scheduled, &drm_sched_fence_ops_scheduled,
231 &fence->lock, entity->fence_context, seq);
232 dma_fence_init(&fence->finished, &drm_sched_fence_ops_finished,
233 &fence->lock, entity->fence_context + 1, seq);