Lines Matching refs:chain

21 static struct dma_fence *dma_fence_chain_get_prev(struct dma_fence_chain *chain)  in dma_fence_chain_get_prev()  argument
26 prev = dma_fence_get_rcu_safe(&chain->prev); in dma_fence_chain_get_prev()
41 struct dma_fence_chain *chain, *prev_chain; in dma_fence_chain_walk() local
44 chain = to_dma_fence_chain(fence); in dma_fence_chain_walk()
45 if (!chain) { in dma_fence_chain_walk()
50 while ((prev = dma_fence_chain_get_prev(chain))) { in dma_fence_chain_walk()
65 tmp = unrcu_pointer(cmpxchg(&chain->prev, RCU_INITIALIZER(prev), in dma_fence_chain_walk()
92 struct dma_fence_chain *chain; in dma_fence_chain_find_seqno() local
97 chain = to_dma_fence_chain(*pfence); in dma_fence_chain_find_seqno()
98 if (!chain || chain->base.seqno < seqno) in dma_fence_chain_find_seqno()
101 dma_fence_chain_for_each(*pfence, &chain->base) { in dma_fence_chain_find_seqno()
102 if ((*pfence)->context != chain->base.context || in dma_fence_chain_find_seqno()
106 dma_fence_put(&chain->base); in dma_fence_chain_find_seqno()
124 struct dma_fence_chain *chain; in dma_fence_chain_irq_work() local
126 chain = container_of(work, typeof(*chain), work); in dma_fence_chain_irq_work()
129 if (!dma_fence_chain_enable_signaling(&chain->base)) in dma_fence_chain_irq_work()
131 dma_fence_signal(&chain->base); in dma_fence_chain_irq_work()
132 dma_fence_put(&chain->base); in dma_fence_chain_irq_work()
137 struct dma_fence_chain *chain; in dma_fence_chain_cb() local
139 chain = container_of(cb, typeof(*chain), cb); in dma_fence_chain_cb()
140 init_irq_work(&chain->work, dma_fence_chain_irq_work); in dma_fence_chain_cb()
141 irq_work_queue(&chain->work); in dma_fence_chain_cb()
180 struct dma_fence_chain *chain = to_dma_fence_chain(fence); in dma_fence_chain_release() local
186 while ((prev = rcu_dereference_protected(chain->prev, true))) { in dma_fence_chain_release()
199 chain->prev = prev_chain->prev; in dma_fence_chain_release()
205 dma_fence_put(chain->fence); in dma_fence_chain_release()
229 void dma_fence_chain_init(struct dma_fence_chain *chain, in dma_fence_chain_init() argument
237 spin_lock_init(&chain->lock); in dma_fence_chain_init()
238 rcu_assign_pointer(chain->prev, prev); in dma_fence_chain_init()
239 chain->fence = fence; in dma_fence_chain_init()
240 chain->prev_seqno = 0; in dma_fence_chain_init()
245 chain->prev_seqno = prev->seqno; in dma_fence_chain_init()
253 dma_fence_init(&chain->base, &dma_fence_chain_ops, in dma_fence_chain_init()
254 &chain->lock, context, seqno); in dma_fence_chain_init()