Lines Matching refs:semaphore
35 struct radeon_semaphore **semaphore)
39 *semaphore = kmalloc(sizeof(struct radeon_semaphore), GFP_KERNEL);
40 if (*semaphore == NULL) {
44 &(*semaphore)->sa_bo, 8, 8);
46 kfree(*semaphore);
47 *semaphore = NULL;
50 (*semaphore)->waiters = 0;
51 (*semaphore)->gpu_addr = radeon_sa_bo_gpu_addr((*semaphore)->sa_bo);
53 *((uint64_t *)radeon_sa_bo_cpu_addr((*semaphore)->sa_bo)) = 0;
59 struct radeon_semaphore *semaphore)
63 trace_radeon_semaphore_signale(ridx, semaphore);
65 if (radeon_semaphore_ring_emit(rdev, ridx, ring, semaphore, false)) {
66 --semaphore->waiters;
69 ring->last_semaphore_signal_addr = semaphore->gpu_addr;
76 struct radeon_semaphore *semaphore)
80 trace_radeon_semaphore_wait(ridx, semaphore);
82 if (radeon_semaphore_ring_emit(rdev, ridx, ring, semaphore, true)) {
83 ++semaphore->waiters;
86 ring->last_semaphore_wait_addr = semaphore->gpu_addr;
93 struct radeon_semaphore **semaphore,
96 if (semaphore == NULL || *semaphore == NULL) {
99 if ((*semaphore)->waiters > 0) {
100 dev_err(rdev->dev, "semaphore %p has more waiters than signalers,"
101 " hardware lockup imminent!\n", *semaphore);
103 radeon_sa_bo_free(&(*semaphore)->sa_bo, fence);
104 kfree(*semaphore);
105 *semaphore = NULL;