Lines Matching full:fence

45 	struct xe_hw_fence *fence =  in fence_free()  local
48 if (!WARN_ON_ONCE(!fence)) in fence_free()
49 kmem_cache_free(xe_hw_fence_slab, fence); in fence_free()
55 struct xe_hw_fence *fence, *next; in hw_fence_irq_run_cb() local
61 list_for_each_entry_safe(fence, next, &irq->pending, irq_link) { in hw_fence_irq_run_cb()
62 struct dma_fence *dma_fence = &fence->dma; in hw_fence_irq_run_cb()
64 trace_xe_hw_fence_try_signal(fence); in hw_fence_irq_run_cb()
66 trace_xe_hw_fence_signal(fence); in hw_fence_irq_run_cb()
67 list_del_init(&fence->irq_link); in hw_fence_irq_run_cb()
86 struct xe_hw_fence *fence, *next; in xe_hw_fence_irq_finish() local
94 list_for_each_entry_safe(fence, next, &irq->pending, irq_link) { in xe_hw_fence_irq_finish()
95 list_del_init(&fence->irq_link); in xe_hw_fence_irq_finish()
96 err = dma_fence_signal_locked(&fence->dma); in xe_hw_fence_irq_finish()
97 dma_fence_put(&fence->dma); in xe_hw_fence_irq_finish()
140 static struct xe_hw_fence *to_xe_hw_fence(struct dma_fence *fence);
142 static struct xe_hw_fence_irq *xe_hw_fence_irq(struct xe_hw_fence *fence) in xe_hw_fence_irq() argument
144 return container_of(fence->dma.lock, struct xe_hw_fence_irq, lock); in xe_hw_fence_irq()
149 struct xe_hw_fence *fence = to_xe_hw_fence(dma_fence); in xe_hw_fence_get_driver_name() local
151 return dev_name(fence->xe->drm.dev); in xe_hw_fence_get_driver_name()
156 struct xe_hw_fence *fence = to_xe_hw_fence(dma_fence); in xe_hw_fence_get_timeline_name() local
158 return fence->name; in xe_hw_fence_get_timeline_name()
163 struct xe_hw_fence *fence = to_xe_hw_fence(dma_fence); in xe_hw_fence_signaled() local
164 struct xe_device *xe = fence->xe; in xe_hw_fence_signaled()
165 u32 seqno = xe_map_rd(xe, &fence->seqno_map, 0, u32); in xe_hw_fence_signaled()
173 struct xe_hw_fence *fence = to_xe_hw_fence(dma_fence); in xe_hw_fence_enable_signaling() local
174 struct xe_hw_fence_irq *irq = xe_hw_fence_irq(fence); in xe_hw_fence_enable_signaling()
177 list_add_tail(&fence->irq_link, &irq->pending); in xe_hw_fence_enable_signaling()
179 /* SW completed (no HW IRQ) so kick handler to signal fence */ in xe_hw_fence_enable_signaling()
188 struct xe_hw_fence *fence = to_xe_hw_fence(dma_fence); in xe_hw_fence_release() local
190 XE_WARN_ON(!list_empty(&fence->irq_link)); in xe_hw_fence_release()
202 static struct xe_hw_fence *to_xe_hw_fence(struct dma_fence *fence) in to_xe_hw_fence() argument
204 if (XE_WARN_ON(fence->ops != &xe_hw_fence_ops)) in to_xe_hw_fence()
207 return container_of(fence, struct xe_hw_fence, dma); in to_xe_hw_fence()
211 * xe_hw_fence_alloc() - Allocate an hw fence.
213 * Allocate but don't initialize an hw fence.
215 * Return: Pointer to the allocated fence or
229 * xe_hw_fence_free() - Free an hw fence.
230 * @fence: Pointer to the fence to free.
232 * Frees an hw fence that hasn't yet been
235 void xe_hw_fence_free(struct dma_fence *fence) in xe_hw_fence_free() argument
237 fence_free(&fence->rcu); in xe_hw_fence_free()
241 * xe_hw_fence_init() - Initialize an hw fence.
242 * @fence: Pointer to the fence to initialize.
243 * @ctx: Pointer to the struct xe_hw_fence_ctx fence context.
246 * Initializes a pre-allocated hw fence.
247 * After initialization, the fence is subject to normal
248 * dma-fence refcounting.
250 void xe_hw_fence_init(struct dma_fence *fence, struct xe_hw_fence_ctx *ctx, in xe_hw_fence_init() argument
254 container_of(fence, typeof(*hw_fence), dma); in xe_hw_fence_init()
261 dma_fence_init(fence, &xe_hw_fence_ops, &ctx->irq->lock, in xe_hw_fence_init()