Lines Matching full:cursor
359 /* Restart the unlocked iteration by initializing the cursor object. */
360 static void dma_resv_iter_restart_unlocked(struct dma_resv_iter *cursor) in dma_resv_iter_restart_unlocked() argument
362 cursor->index = 0; in dma_resv_iter_restart_unlocked()
363 cursor->num_fences = 0; in dma_resv_iter_restart_unlocked()
364 cursor->fences = dma_resv_fences_list(cursor->obj); in dma_resv_iter_restart_unlocked()
365 if (cursor->fences) in dma_resv_iter_restart_unlocked()
366 cursor->num_fences = cursor->fences->num_fences; in dma_resv_iter_restart_unlocked()
367 cursor->is_restarted = true; in dma_resv_iter_restart_unlocked()
371 static void dma_resv_iter_walk_unlocked(struct dma_resv_iter *cursor) in dma_resv_iter_walk_unlocked() argument
373 if (!cursor->fences) in dma_resv_iter_walk_unlocked()
378 dma_fence_put(cursor->fence); in dma_resv_iter_walk_unlocked()
380 if (cursor->index >= cursor->num_fences) { in dma_resv_iter_walk_unlocked()
381 cursor->fence = NULL; in dma_resv_iter_walk_unlocked()
386 dma_resv_list_entry(cursor->fences, cursor->index++, in dma_resv_iter_walk_unlocked()
387 cursor->obj, &cursor->fence, in dma_resv_iter_walk_unlocked()
388 &cursor->fence_usage); in dma_resv_iter_walk_unlocked()
389 cursor->fence = dma_fence_get_rcu(cursor->fence); in dma_resv_iter_walk_unlocked()
390 if (!cursor->fence) { in dma_resv_iter_walk_unlocked()
391 dma_resv_iter_restart_unlocked(cursor); in dma_resv_iter_walk_unlocked()
395 if (!dma_fence_is_signaled(cursor->fence) && in dma_resv_iter_walk_unlocked()
396 cursor->usage >= cursor->fence_usage) in dma_resv_iter_walk_unlocked()
403 * @cursor: the cursor with the current position
413 struct dma_fence *dma_resv_iter_first_unlocked(struct dma_resv_iter *cursor) in dma_resv_iter_first_unlocked() argument
417 dma_resv_iter_restart_unlocked(cursor); in dma_resv_iter_first_unlocked()
418 dma_resv_iter_walk_unlocked(cursor); in dma_resv_iter_first_unlocked()
419 } while (dma_resv_fences_list(cursor->obj) != cursor->fences); in dma_resv_iter_first_unlocked()
422 return cursor->fence; in dma_resv_iter_first_unlocked()
428 * @cursor: the cursor with the current position
436 struct dma_fence *dma_resv_iter_next_unlocked(struct dma_resv_iter *cursor) in dma_resv_iter_next_unlocked() argument
441 cursor->is_restarted = false; in dma_resv_iter_next_unlocked()
442 restart = dma_resv_fences_list(cursor->obj) != cursor->fences; in dma_resv_iter_next_unlocked()
445 dma_resv_iter_restart_unlocked(cursor); in dma_resv_iter_next_unlocked()
446 dma_resv_iter_walk_unlocked(cursor); in dma_resv_iter_next_unlocked()
448 } while (dma_resv_fences_list(cursor->obj) != cursor->fences); in dma_resv_iter_next_unlocked()
451 return cursor->fence; in dma_resv_iter_next_unlocked()
457 * @cursor: cursor to record the current position
464 struct dma_fence *dma_resv_iter_first(struct dma_resv_iter *cursor) in dma_resv_iter_first() argument
468 dma_resv_assert_held(cursor->obj); in dma_resv_iter_first()
470 cursor->index = 0; in dma_resv_iter_first()
471 cursor->fences = dma_resv_fences_list(cursor->obj); in dma_resv_iter_first()
473 fence = dma_resv_iter_next(cursor); in dma_resv_iter_first()
474 cursor->is_restarted = true; in dma_resv_iter_first()
481 * @cursor: cursor to record the current position
486 struct dma_fence *dma_resv_iter_next(struct dma_resv_iter *cursor) in dma_resv_iter_next() argument
490 dma_resv_assert_held(cursor->obj); in dma_resv_iter_next()
492 cursor->is_restarted = false; in dma_resv_iter_next()
495 if (!cursor->fences || in dma_resv_iter_next()
496 cursor->index >= cursor->fences->num_fences) in dma_resv_iter_next()
499 dma_resv_list_entry(cursor->fences, cursor->index++, in dma_resv_iter_next()
500 cursor->obj, &fence, &cursor->fence_usage); in dma_resv_iter_next()
501 } while (cursor->fence_usage > cursor->usage); in dma_resv_iter_next()
516 struct dma_resv_iter cursor; in dma_resv_copy_fences() local
524 dma_resv_iter_begin(&cursor, src, DMA_RESV_USAGE_BOOKKEEP); in dma_resv_copy_fences()
525 dma_resv_for_each_fence_unlocked(&cursor, f) { in dma_resv_copy_fences()
527 if (dma_resv_iter_is_restarted(&cursor)) { in dma_resv_copy_fences()
530 list = dma_resv_list_alloc(cursor.num_fences); in dma_resv_copy_fences()
532 dma_resv_iter_end(&cursor); in dma_resv_copy_fences()
540 dma_resv_iter_usage(&cursor)); in dma_resv_copy_fences()
542 dma_resv_iter_end(&cursor); in dma_resv_copy_fences()
565 struct dma_resv_iter cursor; in dma_resv_get_fences() local
571 dma_resv_iter_begin(&cursor, obj, usage); in dma_resv_get_fences()
572 dma_resv_for_each_fence_unlocked(&cursor, fence) { in dma_resv_get_fences()
574 if (dma_resv_iter_is_restarted(&cursor)) { in dma_resv_get_fences()
581 count = cursor.num_fences + 1; in dma_resv_get_fences()
591 dma_resv_iter_end(&cursor); in dma_resv_get_fences()
599 dma_resv_iter_end(&cursor); in dma_resv_get_fences()
675 struct dma_resv_iter cursor; in dma_resv_wait_timeout() local
678 dma_resv_iter_begin(&cursor, obj, usage); in dma_resv_wait_timeout()
679 dma_resv_for_each_fence_unlocked(&cursor, fence) { in dma_resv_wait_timeout()
689 dma_resv_iter_end(&cursor); in dma_resv_wait_timeout()
707 struct dma_resv_iter cursor; in dma_resv_set_deadline() local
710 dma_resv_iter_begin(&cursor, obj, usage); in dma_resv_set_deadline()
711 dma_resv_for_each_fence_unlocked(&cursor, fence) { in dma_resv_set_deadline()
714 dma_resv_iter_end(&cursor); in dma_resv_set_deadline()
733 struct dma_resv_iter cursor; in dma_resv_test_signaled() local
736 dma_resv_iter_begin(&cursor, obj, usage); in dma_resv_test_signaled()
737 dma_resv_for_each_fence_unlocked(&cursor, fence) { in dma_resv_test_signaled()
738 dma_resv_iter_end(&cursor); in dma_resv_test_signaled()
741 dma_resv_iter_end(&cursor); in dma_resv_test_signaled()
757 struct dma_resv_iter cursor; in dma_resv_describe() local
760 dma_resv_for_each_fence(&cursor, obj, DMA_RESV_USAGE_READ, fence) { in dma_resv_describe()
762 usage[dma_resv_iter_usage(&cursor)]); in dma_resv_describe()