Lines Matching refs:fc
119 static int fence_chains_init(struct fence_chains *fc, unsigned int count, in fence_chains_init() argument
125 fc->chains = kvmalloc_array(count, sizeof(*fc->chains), in fence_chains_init()
127 if (!fc->chains) in fence_chains_init()
130 fc->fences = kvmalloc_array(count, sizeof(*fc->fences), in fence_chains_init()
132 if (!fc->fences) { in fence_chains_init()
137 fc->tail = NULL; in fence_chains_init()
139 fc->fences[i] = mock_fence(); in fence_chains_init()
140 if (!fc->fences[i]) { in fence_chains_init()
145 fc->chains[i] = mock_chain(fc->tail, in fence_chains_init()
146 fc->fences[i], in fence_chains_init()
148 if (!fc->chains[i]) { in fence_chains_init()
153 fc->tail = fc->chains[i]; in fence_chains_init()
156 fc->chain_length = i; in fence_chains_init()
161 dma_fence_put(fc->fences[i]); in fence_chains_init()
162 dma_fence_put(fc->chains[i]); in fence_chains_init()
164 kvfree(fc->fences); in fence_chains_init()
166 kvfree(fc->chains); in fence_chains_init()
170 static void fence_chains_fini(struct fence_chains *fc) in fence_chains_fini() argument
174 for (i = 0; i < fc->chain_length; i++) { in fence_chains_fini()
175 dma_fence_signal(fc->fences[i]); in fence_chains_fini()
176 dma_fence_put(fc->fences[i]); in fence_chains_fini()
178 kvfree(fc->fences); in fence_chains_fini()
180 for (i = 0; i < fc->chain_length; i++) in fence_chains_fini()
181 dma_fence_put(fc->chains[i]); in fence_chains_fini()
182 kvfree(fc->chains); in fence_chains_fini()
187 struct fence_chains fc; in find_seqno() local
192 err = fence_chains_init(&fc, 64, seqno_inc); in find_seqno()
196 fence = dma_fence_get(fc.tail); in find_seqno()
204 for (i = 0; i < fc.chain_length; i++) { in find_seqno()
205 fence = dma_fence_get(fc.tail); in find_seqno()
210 err, fc.chain_length + 1, i + 1); in find_seqno()
213 if (fence != fc.chains[i]) { in find_seqno()
215 fc.chain_length + 1, i + 1); in find_seqno()
227 if (fence != fc.chains[i]) { in find_seqno()
250 if (i > 0 && fence != fc.chains[i - 1]) { in find_seqno()
259 fence_chains_fini(&fc); in find_seqno()
265 struct fence_chains fc; in find_signaled() local
269 err = fence_chains_init(&fc, 2, seqno_inc); in find_signaled()
273 dma_fence_signal(fc.fences[0]); in find_signaled()
275 fence = dma_fence_get(fc.tail); in find_signaled()
283 if (fence && fence != fc.chains[0]) { in find_signaled()
297 fence_chains_fini(&fc); in find_signaled()
303 struct fence_chains fc; in find_out_of_order() local
307 err = fence_chains_init(&fc, 3, seqno_inc); in find_out_of_order()
311 dma_fence_signal(fc.fences[1]); in find_out_of_order()
313 fence = dma_fence_get(fc.tail); in find_out_of_order()
328 if (fence != fc.chains[0]) { in find_out_of_order()
336 fence_chains_fini(&fc); in find_out_of_order()
347 struct fence_chains fc; in find_gap() local
352 err = fence_chains_init(&fc, 64, seqno_inc2); in find_gap()
356 for (i = 0; i < fc.chain_length; i++) { in find_gap()
357 fence = dma_fence_get(fc.tail); in find_gap()
362 err, fc.chain_length + 1, 2 * i + 1); in find_gap()
365 if (fence != fc.chains[i]) { in find_gap()
368 fc.chain_length + 1, in find_gap()
381 if (fence != fc.chains[i]) { in find_gap()
389 fence_chains_fini(&fc); in find_gap()
394 struct fence_chains fc; member
404 struct dma_fence *fence = dma_fence_get(data->fc.tail); in __find_race()
407 seqno = prandom_u32_max(data->fc.chain_length) + 1; in __find_race()
436 seqno = prandom_u32_max(data->fc.chain_length - 1); in __find_race()
437 dma_fence_signal(data->fc.fences[seqno]); in __find_race()
455 err = fence_chains_init(&data.fc, CHAIN_SZ, seqno_inc); in find_race()
491 for (i = 0; i < data.fc.chain_length; i++) in find_race()
492 if (dma_fence_is_signaled(data.fc.fences[i])) in find_race()
497 fence_chains_fini(&data.fc); in find_race()
503 struct fence_chains fc; in signal_forward() local
507 err = fence_chains_init(&fc, 64, seqno_inc); in signal_forward()
511 for (i = 0; i < fc.chain_length; i++) { in signal_forward()
512 dma_fence_signal(fc.fences[i]); in signal_forward()
514 if (!dma_fence_is_signaled(fc.chains[i])) { in signal_forward()
520 if (i + 1 < fc.chain_length && in signal_forward()
521 dma_fence_is_signaled(fc.chains[i + 1])) { in signal_forward()
529 fence_chains_fini(&fc); in signal_forward()
535 struct fence_chains fc; in signal_backward() local
539 err = fence_chains_init(&fc, 64, seqno_inc); in signal_backward()
543 for (i = fc.chain_length; i--; ) { in signal_backward()
544 dma_fence_signal(fc.fences[i]); in signal_backward()
546 if (i > 0 && dma_fence_is_signaled(fc.chains[i])) { in signal_backward()
553 for (i = 0; i < fc.chain_length; i++) { in signal_backward()
554 if (!dma_fence_is_signaled(fc.chains[i])) { in signal_backward()
562 fence_chains_fini(&fc); in signal_backward()
568 struct fence_chains *fc = arg; in __wait_fence_chains() local
570 if (dma_fence_wait(fc->tail, false)) in __wait_fence_chains()
578 struct fence_chains fc; in wait_forward() local
583 err = fence_chains_init(&fc, CHAIN_SZ, seqno_inc); in wait_forward()
587 tsk = kthread_run(__wait_fence_chains, &fc, "dmabuf/wait"); in wait_forward()
595 for (i = 0; i < fc.chain_length; i++) in wait_forward()
596 dma_fence_signal(fc.fences[i]); in wait_forward()
602 fence_chains_fini(&fc); in wait_forward()
608 struct fence_chains fc; in wait_backward() local
613 err = fence_chains_init(&fc, CHAIN_SZ, seqno_inc); in wait_backward()
617 tsk = kthread_run(__wait_fence_chains, &fc, "dmabuf/wait"); in wait_backward()
625 for (i = fc.chain_length; i--; ) in wait_backward()
626 dma_fence_signal(fc.fences[i]); in wait_backward()
632 fence_chains_fini(&fc); in wait_backward()
636 static void randomise_fences(struct fence_chains *fc) in randomise_fences() argument
638 unsigned int count = fc->chain_length; in randomise_fences()
648 swap(fc->fences[count], fc->fences[swp]); in randomise_fences()
654 struct fence_chains fc; in wait_random() local
659 err = fence_chains_init(&fc, CHAIN_SZ, seqno_inc); in wait_random()
663 randomise_fences(&fc); in wait_random()
665 tsk = kthread_run(__wait_fence_chains, &fc, "dmabuf/wait"); in wait_random()
673 for (i = 0; i < fc.chain_length; i++) in wait_random()
674 dma_fence_signal(fc.fences[i]); in wait_random()
680 fence_chains_fini(&fc); in wait_random()