Lines Matching refs:fence
101 struct amdgpu_fence **fence) in amdgpu_fence_emit() argument
106 *fence = kmem_cache_alloc(amdgpu_fence_slab, GFP_KERNEL); in amdgpu_fence_emit()
107 if ((*fence) == NULL) { in amdgpu_fence_emit()
110 (*fence)->seq = ++ring->fence_drv.sync_seq[ring->idx]; in amdgpu_fence_emit()
111 (*fence)->ring = ring; in amdgpu_fence_emit()
112 (*fence)->owner = owner; in amdgpu_fence_emit()
113 fence_init(&(*fence)->base, &amdgpu_fence_ops, in amdgpu_fence_emit()
116 (*fence)->seq); in amdgpu_fence_emit()
118 (*fence)->seq, in amdgpu_fence_emit()
370 bool amdgpu_fence_need_sync(struct amdgpu_fence *fence, in amdgpu_fence_need_sync() argument
375 if (!fence) in amdgpu_fence_need_sync()
378 if (fence->ring == dst_ring) in amdgpu_fence_need_sync()
383 if (fence->seq <= fdrv->sync_seq[fence->ring->idx]) in amdgpu_fence_need_sync()
398 void amdgpu_fence_note_sync(struct amdgpu_fence *fence, in amdgpu_fence_note_sync() argument
404 if (!fence) in amdgpu_fence_note_sync()
407 if (fence->ring == dst_ring) in amdgpu_fence_note_sync()
411 src = &fence->ring->fence_drv; in amdgpu_fence_note_sync()
662 static const char *amdgpu_fence_get_driver_name(struct fence *fence) in amdgpu_fence_get_driver_name() argument
667 static const char *amdgpu_fence_get_timeline_name(struct fence *f) in amdgpu_fence_get_timeline_name()
669 struct amdgpu_fence *fence = to_amdgpu_fence(f); in amdgpu_fence_get_timeline_name() local
670 return (const char *)fence->ring->name; in amdgpu_fence_get_timeline_name()
681 static bool amdgpu_fence_is_signaled(struct fence *f) in amdgpu_fence_is_signaled()
683 struct amdgpu_fence *fence = to_amdgpu_fence(f); in amdgpu_fence_is_signaled() local
684 struct amdgpu_ring *ring = fence->ring; in amdgpu_fence_is_signaled()
686 if (atomic64_read(&ring->fence_drv.last_seq) >= fence->seq) in amdgpu_fence_is_signaled()
691 if (atomic64_read(&ring->fence_drv.last_seq) >= fence->seq) in amdgpu_fence_is_signaled()
706 struct amdgpu_fence *fence; in amdgpu_fence_check_signaled() local
711 fence = container_of(wait, struct amdgpu_fence, fence_wake); in amdgpu_fence_check_signaled()
712 adev = fence->ring->adev; in amdgpu_fence_check_signaled()
718 seq = atomic64_read(&fence->ring->fence_drv.last_seq); in amdgpu_fence_check_signaled()
719 if (seq >= fence->seq) { in amdgpu_fence_check_signaled()
720 ret = fence_signal_locked(&fence->base); in amdgpu_fence_check_signaled()
722 FENCE_TRACE(&fence->base, "signaled from irq context\n"); in amdgpu_fence_check_signaled()
724 FENCE_TRACE(&fence->base, "was already signaled\n"); in amdgpu_fence_check_signaled()
726 __remove_wait_queue(&fence->ring->fence_drv.fence_queue, &fence->fence_wake); in amdgpu_fence_check_signaled()
727 fence_put(&fence->base); in amdgpu_fence_check_signaled()
729 FENCE_TRACE(&fence->base, "pending\n"); in amdgpu_fence_check_signaled()
741 static bool amdgpu_fence_enable_signaling(struct fence *f) in amdgpu_fence_enable_signaling()
743 struct amdgpu_fence *fence = to_amdgpu_fence(f); in amdgpu_fence_enable_signaling() local
744 struct amdgpu_ring *ring = fence->ring; in amdgpu_fence_enable_signaling()
746 if (atomic64_read(&ring->fence_drv.last_seq) >= fence->seq) in amdgpu_fence_enable_signaling()
749 fence->fence_wake.flags = 0; in amdgpu_fence_enable_signaling()
750 fence->fence_wake.private = NULL; in amdgpu_fence_enable_signaling()
751 fence->fence_wake.func = amdgpu_fence_check_signaled; in amdgpu_fence_enable_signaling()
752 __add_wait_queue(&ring->fence_drv.fence_queue, &fence->fence_wake); in amdgpu_fence_enable_signaling()
756 FENCE_TRACE(&fence->base, "armed on ring %i!\n", ring->idx); in amdgpu_fence_enable_signaling()
760 static void amdgpu_fence_release(struct fence *f) in amdgpu_fence_release()
762 struct amdgpu_fence *fence = to_amdgpu_fence(f); in amdgpu_fence_release() local
763 kmem_cache_free(amdgpu_fence_slab, fence); in amdgpu_fence_release()