Lines Matching refs:fence

130 		      struct radeon_fence **fence,  in radeon_fence_emit()  argument
136 *fence = kmalloc(sizeof(struct radeon_fence), GFP_KERNEL); in radeon_fence_emit()
137 if ((*fence) == NULL) { in radeon_fence_emit()
140 (*fence)->rdev = rdev; in radeon_fence_emit()
141 (*fence)->seq = seq = ++rdev->fence_drv[ring].sync_seq[ring]; in radeon_fence_emit()
142 (*fence)->ring = ring; in radeon_fence_emit()
143 (*fence)->is_vm_update = false; in radeon_fence_emit()
144 dma_fence_init(&(*fence)->base, &radeon_fence_ops, in radeon_fence_emit()
148 radeon_fence_ring_emit(rdev, ring, *fence); in radeon_fence_emit()
149 trace_radeon_fence_emit(rdev->ddev, ring, (*fence)->seq); in radeon_fence_emit()
163 struct radeon_fence *fence; in radeon_fence_check_signaled() local
166 fence = container_of(wait, struct radeon_fence, fence_wake); in radeon_fence_check_signaled()
172 seq = atomic64_read(&fence->rdev->fence_drv[fence->ring].last_seq); in radeon_fence_check_signaled()
173 if (seq >= fence->seq) { in radeon_fence_check_signaled()
174 int ret = dma_fence_signal_locked(&fence->base); in radeon_fence_check_signaled()
177 DMA_FENCE_TRACE(&fence->base, "signaled from irq context\n"); in radeon_fence_check_signaled()
179 DMA_FENCE_TRACE(&fence->base, "was already signaled\n"); in radeon_fence_check_signaled()
181 radeon_irq_kms_sw_irq_put(fence->rdev, fence->ring); in radeon_fence_check_signaled()
182 __remove_wait_queue(&fence->rdev->fence_queue, &fence->fence_wake); in radeon_fence_check_signaled()
183 dma_fence_put(&fence->base); in radeon_fence_check_signaled()
185 DMA_FENCE_TRACE(&fence->base, "pending\n"); in radeon_fence_check_signaled()
358 struct radeon_fence *fence = to_radeon_fence(f); in radeon_fence_is_signaled() local
359 struct radeon_device *rdev = fence->rdev; in radeon_fence_is_signaled()
360 unsigned ring = fence->ring; in radeon_fence_is_signaled()
361 u64 seq = fence->seq; in radeon_fence_is_signaled()
388 struct radeon_fence *fence = to_radeon_fence(f); in radeon_fence_enable_signaling() local
389 struct radeon_device *rdev = fence->rdev; in radeon_fence_enable_signaling()
391 if (atomic64_read(&rdev->fence_drv[fence->ring].last_seq) >= fence->seq) in radeon_fence_enable_signaling()
395 radeon_irq_kms_sw_irq_get(rdev, fence->ring); in radeon_fence_enable_signaling()
397 if (radeon_fence_activity(rdev, fence->ring)) in radeon_fence_enable_signaling()
401 if (atomic64_read(&rdev->fence_drv[fence->ring].last_seq) >= fence->seq) { in radeon_fence_enable_signaling()
402 radeon_irq_kms_sw_irq_put(rdev, fence->ring); in radeon_fence_enable_signaling()
410 if (radeon_irq_kms_sw_irq_get_delayed(rdev, fence->ring)) in radeon_fence_enable_signaling()
411 rdev->fence_drv[fence->ring].delayed_irq = true; in radeon_fence_enable_signaling()
412 radeon_fence_schedule_check(rdev, fence->ring); in radeon_fence_enable_signaling()
415 fence->fence_wake.flags = 0; in radeon_fence_enable_signaling()
416 fence->fence_wake.private = NULL; in radeon_fence_enable_signaling()
417 fence->fence_wake.func = radeon_fence_check_signaled; in radeon_fence_enable_signaling()
418 __add_wait_queue(&rdev->fence_queue, &fence->fence_wake); in radeon_fence_enable_signaling()
421 DMA_FENCE_TRACE(&fence->base, "armed on ring %i!\n", fence->ring); in radeon_fence_enable_signaling()
433 bool radeon_fence_signaled(struct radeon_fence *fence) in radeon_fence_signaled() argument
435 if (!fence) in radeon_fence_signaled()
438 if (radeon_fence_seq_signaled(fence->rdev, fence->seq, fence->ring)) { in radeon_fence_signaled()
441 ret = dma_fence_signal(&fence->base); in radeon_fence_signaled()
443 DMA_FENCE_TRACE(&fence->base, "signaled from radeon_fence_signaled\n"); in radeon_fence_signaled()
544 long radeon_fence_wait_timeout(struct radeon_fence *fence, bool intr, long timeout) in radeon_fence_wait_timeout() argument
556 if (WARN_ON_ONCE(!to_radeon_fence(&fence->base))) in radeon_fence_wait_timeout()
557 return dma_fence_wait(&fence->base, intr); in radeon_fence_wait_timeout()
559 seq[fence->ring] = fence->seq; in radeon_fence_wait_timeout()
560 r = radeon_fence_wait_seq_timeout(fence->rdev, seq, intr, timeout); in radeon_fence_wait_timeout()
565 r_sig = dma_fence_signal(&fence->base); in radeon_fence_wait_timeout()
567 DMA_FENCE_TRACE(&fence->base, "signaled from fence_wait\n"); in radeon_fence_wait_timeout()
582 int radeon_fence_wait(struct radeon_fence *fence, bool intr) in radeon_fence_wait() argument
584 long r = radeon_fence_wait_timeout(fence, intr, MAX_SCHEDULE_TIMEOUT); in radeon_fence_wait()
700 struct radeon_fence *radeon_fence_ref(struct radeon_fence *fence) in radeon_fence_ref() argument
702 dma_fence_get(&fence->base); in radeon_fence_ref()
703 return fence; in radeon_fence_ref()
713 void radeon_fence_unref(struct radeon_fence **fence) in radeon_fence_unref() argument
715 struct radeon_fence *tmp = *fence; in radeon_fence_unref()
717 *fence = NULL; in radeon_fence_unref()
761 bool radeon_fence_need_sync(struct radeon_fence *fence, int dst_ring) in radeon_fence_need_sync() argument
765 if (!fence) { in radeon_fence_need_sync()
769 if (fence->ring == dst_ring) { in radeon_fence_need_sync()
774 fdrv = &fence->rdev->fence_drv[dst_ring]; in radeon_fence_need_sync()
775 if (fence->seq <= fdrv->sync_seq[fence->ring]) { in radeon_fence_need_sync()
791 void radeon_fence_note_sync(struct radeon_fence *fence, int dst_ring) in radeon_fence_note_sync() argument
796 if (!fence) { in radeon_fence_note_sync()
800 if (fence->ring == dst_ring) { in radeon_fence_note_sync()
805 src = &fence->rdev->fence_drv[fence->ring]; in radeon_fence_note_sync()
806 dst = &fence->rdev->fence_drv[dst_ring]; in radeon_fence_note_sync()
1033 static const char *radeon_fence_get_driver_name(struct dma_fence *fence) in radeon_fence_get_driver_name() argument
1040 struct radeon_fence *fence = to_radeon_fence(f); in radeon_fence_get_timeline_name() local
1041 switch (fence->ring) { in radeon_fence_get_timeline_name()
1054 static inline bool radeon_test_signaled(struct radeon_fence *fence) in radeon_test_signaled() argument
1056 return test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->base.flags); in radeon_test_signaled()
1065 radeon_fence_wait_cb(struct dma_fence *fence, struct dma_fence_cb *cb) in radeon_fence_wait_cb() argument
1076 struct radeon_fence *fence = to_radeon_fence(f); in radeon_fence_default_wait() local
1077 struct radeon_device *rdev = fence->rdev; in radeon_fence_default_wait()
1095 if (radeon_test_signaled(fence)) in radeon_fence_default_wait()