[PATCH 1/2] dma-fence: Rename dma_fence_is_signaled()
Philipp Stanner
phasta at kernel.org
Wed Apr 9 12:06:37 UTC 2025
dma_fence_is_signaled()'s name strongly reads as if this function were
intended for checking whether a fence is already signaled. Also the
boolean it returns hints at that.
The function's behavior, however, is more complex: it can check with a
driver callback whether the hardware's sequence number indicates that
the fence can already be treated as signaled, although the hardware's /
driver's interrupt handler has not signaled it yet. If that's the case,
the function also signals the fence.
(Presumably) this has caused a bug in Nouveau (unknown commit), where
nouveau_fence_done() uses the function to check a fence, which causes a
race.
Give the function a more obvious name.
Signed-off-by: Philipp Stanner <phasta at kernel.org>
---
drivers/dma-buf/dma-fence-array.c | 2 +-
drivers/dma-buf/dma-fence-chain.c | 6 +++---
drivers/dma-buf/dma-fence-unwrap.c | 4 ++--
drivers/dma-buf/dma-fence.c | 6 +++---
drivers/dma-buf/dma-resv.c | 6 +++---
drivers/dma-buf/st-dma-fence-chain.c | 10 ++++-----
drivers/dma-buf/st-dma-fence.c | 8 +++----
drivers/dma-buf/sw_sync.c | 2 +-
drivers/dma-buf/sync_file.c | 4 ++--
.../gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c | 2 +-
.../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 8 +++----
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 4 ++--
drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c | 4 ++--
drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 8 +++----
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 6 +++---
drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c | 10 ++++-----
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 6 +++---
drivers/gpu/drm/amd/amdkfd/kfd_device.c | 2 +-
drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 2 +-
drivers/gpu/drm/drm_suballoc.c | 6 +++---
drivers/gpu/drm/drm_syncobj.c | 6 +++---
drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 2 +-
drivers/gpu/drm/etnaviv/etnaviv_sched.c | 2 +-
drivers/gpu/drm/i915/gem/i915_gem_wait.c | 4 ++--
.../drm/i915/gem/selftests/i915_gem_migrate.c | 2 +-
drivers/gpu/drm/i915/i915_deps.c | 6 +++---
drivers/gpu/drm/i915/i915_request.c | 6 +++---
drivers/gpu/drm/i915/i915_sw_fence.c | 4 ++--
drivers/gpu/drm/i915/i915_vma.c | 2 +-
drivers/gpu/drm/i915/selftests/i915_request.c | 4 ++--
drivers/gpu/drm/imagination/pvr_queue.c | 10 ++++-----
drivers/gpu/drm/lima/lima_sched.c | 4 ++--
drivers/gpu/drm/msm/msm_gpu.c | 2 +-
drivers/gpu/drm/nouveau/nouveau_drm.c | 2 +-
drivers/gpu/drm/nouveau/nouveau_fence.c | 2 +-
drivers/gpu/drm/panfrost/panfrost_job.c | 4 ++--
drivers/gpu/drm/qxl/qxl_release.c | 2 +-
drivers/gpu/drm/scheduler/sched_entity.c | 2 +-
drivers/gpu/drm/scheduler/sched_main.c | 4 ++--
drivers/gpu/drm/ttm/ttm_bo.c | 2 +-
drivers/gpu/drm/v3d/v3d_sched.c | 4 ++--
drivers/gpu/drm/vgem/vgem_fence.c | 2 +-
drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 6 +++---
drivers/gpu/drm/xe/xe_bo.c | 2 +-
drivers/gpu/drm/xe/xe_guc_submit.c | 4 ++--
drivers/gpu/drm/xe/xe_hw_fence.c | 2 +-
drivers/gpu/drm/xe/xe_pt.c | 2 +-
drivers/gpu/drm/xe/xe_range_fence.c | 2 +-
include/linux/dma-fence.h | 21 +++++++++----------
51 files changed, 113 insertions(+), 114 deletions(-)
diff --git a/drivers/dma-buf/dma-fence-array.c b/drivers/dma-buf/dma-fence-array.c
index 6657d4b30af9..4ac682716827 100644
--- a/drivers/dma-buf/dma-fence-array.c
+++ b/drivers/dma-buf/dma-fence-array.c
@@ -127,7 +127,7 @@ static bool dma_fence_array_signaled(struct dma_fence *fence)
}
for (i = 0; i < array->num_fences; ++i) {
- if (dma_fence_is_signaled(array->fences[i]) && !--num_pending)
+ if (dma_fence_check_and_signal(array->fences[i]) && !--num_pending)
goto signal;
}
return false;
diff --git a/drivers/dma-buf/dma-fence-chain.c b/drivers/dma-buf/dma-fence-chain.c
index 9663ba1bb6ac..66f58716e3a4 100644
--- a/drivers/dma-buf/dma-fence-chain.c
+++ b/drivers/dma-buf/dma-fence-chain.c
@@ -51,12 +51,12 @@ struct dma_fence *dma_fence_chain_walk(struct dma_fence *fence)
prev_chain = to_dma_fence_chain(prev);
if (prev_chain) {
- if (!dma_fence_is_signaled(prev_chain->fence))
+ if (!dma_fence_check_and_signal(prev_chain->fence))
break;
replacement = dma_fence_chain_get_prev(prev_chain);
} else {
- if (!dma_fence_is_signaled(prev))
+ if (!dma_fence_check_and_signal(prev))
break;
replacement = NULL;
@@ -166,7 +166,7 @@ static bool dma_fence_chain_signaled(struct dma_fence *fence)
dma_fence_chain_for_each(fence, fence) {
struct dma_fence *f = dma_fence_chain_contained(fence);
- if (!dma_fence_is_signaled(f)) {
+ if (!dma_fence_check_and_signal(f)) {
dma_fence_put(fence);
return false;
}
diff --git a/drivers/dma-buf/dma-fence-unwrap.c b/drivers/dma-buf/dma-fence-unwrap.c
index 2a059ac0ed27..f2ed128ccd93 100644
--- a/drivers/dma-buf/dma-fence-unwrap.c
+++ b/drivers/dma-buf/dma-fence-unwrap.c
@@ -93,7 +93,7 @@ struct dma_fence *__dma_fence_unwrap_merge(unsigned int num_fences,
timestamp = ns_to_ktime(0);
for (i = 0; i < num_fences; ++i) {
dma_fence_unwrap_for_each(tmp, &iter[i], fences[i]) {
- if (!dma_fence_is_signaled(tmp)) {
+ if (!dma_fence_check_and_signal(tmp)) {
dma_fence_put(unsignaled);
unsignaled = dma_fence_get(tmp);
++count;
@@ -127,7 +127,7 @@ struct dma_fence *__dma_fence_unwrap_merge(unsigned int num_fences,
count = 0;
for (i = 0; i < num_fences; ++i) {
dma_fence_unwrap_for_each(tmp, &iter[i], fences[i]) {
- if (!dma_fence_is_signaled(tmp)) {
+ if (!dma_fence_check_and_signal(tmp)) {
array[count++] = dma_fence_get(tmp);
} else {
ktime_t t = dma_fence_timestamp(tmp);
diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
index f0cdd3e99d36..686a28beab5b 100644
--- a/drivers/dma-buf/dma-fence.c
+++ b/drivers/dma-buf/dma-fence.c
@@ -857,7 +857,7 @@ dma_fence_wait_any_timeout(struct dma_fence **fences, uint32_t count,
if (timeout == 0) {
for (i = 0; i < count; ++i)
- if (dma_fence_is_signaled(fences[i])) {
+ if (dma_fence_check_and_signal(fences[i])) {
if (idx)
*idx = i;
return 1;
@@ -968,7 +968,7 @@ EXPORT_SYMBOL(dma_fence_wait_any_timeout);
*/
void dma_fence_set_deadline(struct dma_fence *fence, ktime_t deadline)
{
- if (fence->ops->set_deadline && !dma_fence_is_signaled(fence))
+ if (fence->ops->set_deadline && !dma_fence_check_and_signal(fence))
fence->ops->set_deadline(fence, deadline);
}
EXPORT_SYMBOL(dma_fence_set_deadline);
@@ -985,7 +985,7 @@ void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq)
seq_printf(seq, "%s %s seq %llu %ssignalled\n",
fence->ops->get_driver_name(fence),
fence->ops->get_timeline_name(fence), fence->seqno,
- dma_fence_is_signaled(fence) ? "" : "un");
+ dma_fence_check_and_signal(fence) ? "" : "un");
}
EXPORT_SYMBOL(dma_fence_describe);
diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c
index 5f8d010516f0..73cc7b25dde4 100644
--- a/drivers/dma-buf/dma-resv.c
+++ b/drivers/dma-buf/dma-resv.c
@@ -217,7 +217,7 @@ int dma_resv_reserve_fences(struct dma_resv *obj, unsigned int num_fences)
struct dma_fence *fence;
dma_resv_list_entry(old, i, obj, &fence, &usage);
- if (dma_fence_is_signaled(fence))
+ if (dma_fence_check_and_signal(fence))
RCU_INIT_POINTER(new->table[--k], fence);
else
dma_resv_list_set(new, j++, fence, usage);
@@ -309,7 +309,7 @@ void dma_resv_add_fence(struct dma_resv *obj, struct dma_fence *fence,
dma_resv_list_entry(fobj, i, obj, &old, &old_usage);
if ((old->context == fence->context && old_usage >= usage &&
dma_fence_is_later_or_same(fence, old)) ||
- dma_fence_is_signaled(old)) {
+ dma_fence_check_and_signal(old)) {
dma_resv_list_set(fobj, i, fence, usage);
dma_fence_put(old);
return;
@@ -398,7 +398,7 @@ static void dma_resv_iter_walk_unlocked(struct dma_resv_iter *cursor)
continue;
}
- if (!dma_fence_is_signaled(cursor->fence) &&
+ if (!dma_fence_check_and_signal(cursor->fence) &&
cursor->usage >= cursor->fence_usage)
break;
} while (true);
diff --git a/drivers/dma-buf/st-dma-fence-chain.c b/drivers/dma-buf/st-dma-fence-chain.c
index ed4b323886e4..38f0e2105286 100644
--- a/drivers/dma-buf/st-dma-fence-chain.c
+++ b/drivers/dma-buf/st-dma-fence-chain.c
@@ -484,7 +484,7 @@ static int find_race(void *arg)
count = 0;
for (i = 0; i < data.fc.chain_length; i++)
- if (dma_fence_is_signaled(data.fc.fences[i]))
+ if (dma_fence_check_and_signal(data.fc.fences[i]))
count++;
pr_info("Completed %lu cycles\n", count);
@@ -506,14 +506,14 @@ static int signal_forward(void *arg)
for (i = 0; i < fc.chain_length; i++) {
dma_fence_signal(fc.fences[i]);
- if (!dma_fence_is_signaled(fc.chains[i])) {
+ if (!dma_fence_check_and_signal(fc.chains[i])) {
pr_err("chain[%d] not signaled!\n", i);
err = -EINVAL;
goto err;
}
if (i + 1 < fc.chain_length &&
- dma_fence_is_signaled(fc.chains[i + 1])) {
+ dma_fence_check_and_signal(fc.chains[i + 1])) {
pr_err("chain[%d] is signaled!\n", i);
err = -EINVAL;
goto err;
@@ -538,7 +538,7 @@ static int signal_backward(void *arg)
for (i = fc.chain_length; i--; ) {
dma_fence_signal(fc.fences[i]);
- if (i > 0 && dma_fence_is_signaled(fc.chains[i])) {
+ if (i > 0 && dma_fence_check_and_signal(fc.chains[i])) {
pr_err("chain[%d] is signaled!\n", i);
err = -EINVAL;
goto err;
@@ -546,7 +546,7 @@ static int signal_backward(void *arg)
}
for (i = 0; i < fc.chain_length; i++) {
- if (!dma_fence_is_signaled(fc.chains[i])) {
+ if (!dma_fence_check_and_signal(fc.chains[i])) {
pr_err("chain[%d] was not signaled!\n", i);
err = -EINVAL;
goto err;
diff --git a/drivers/dma-buf/st-dma-fence.c b/drivers/dma-buf/st-dma-fence.c
index cf2ce3744ce6..76100f3f21e5 100644
--- a/drivers/dma-buf/st-dma-fence.c
+++ b/drivers/dma-buf/st-dma-fence.c
@@ -121,7 +121,7 @@ static int test_signaling(void *arg)
dma_fence_enable_sw_signaling(f);
- if (dma_fence_is_signaled(f)) {
+ if (dma_fence_check_and_signal(f)) {
pr_err("Fence unexpectedly signaled on creation\n");
goto err_free;
}
@@ -131,7 +131,7 @@ static int test_signaling(void *arg)
goto err_free;
}
- if (!dma_fence_is_signaled(f)) {
+ if (!dma_fence_check_and_signal(f)) {
pr_err("Fence not reporting signaled\n");
goto err_free;
}
@@ -427,7 +427,7 @@ static int test_stub(void *arg)
for (i = 0; i < ARRAY_SIZE(f); i++) {
f[i] = dma_fence_get_stub();
- if (!dma_fence_is_signaled(f[i])) {
+ if (!dma_fence_check_and_signal(f[i])) {
pr_err("Obtained unsignaled stub fence!\n");
goto err;
}
@@ -505,7 +505,7 @@ static int thread_signal_callback(void *arg)
pr_err("Callback not seen on thread %d, pass %lu (%lu misses), signaling %s add_callback; fence signaled? %s\n",
t->id, pass, miss,
t->before ? "before" : "after",
- dma_fence_is_signaled(f2) ? "yes" : "no");
+ dma_fence_check_and_signal(f2) ? "yes" : "no");
err = -EINVAL;
}
diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c
index 849280ae79a9..10f27533ff7a 100644
--- a/drivers/dma-buf/sw_sync.c
+++ b/drivers/dma-buf/sw_sync.c
@@ -261,7 +261,7 @@ static struct sync_pt *sync_pt_create(struct sync_timeline *obj,
INIT_LIST_HEAD(&pt->link);
spin_lock_irq(&obj->lock);
- if (!dma_fence_is_signaled_locked(&pt->base)) {
+ if (!dma_fence_check_and_signal_locked(&pt->base)) {
struct rb_node **p = &obj->pt_tree.rb_node;
struct rb_node *parent = NULL;
diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c
index d9b1c1b2a72b..dfc30fcc15c8 100644
--- a/drivers/dma-buf/sync_file.c
+++ b/drivers/dma-buf/sync_file.c
@@ -201,7 +201,7 @@ static __poll_t sync_file_poll(struct file *file, poll_table *wait)
wake_up_all(&sync_file->wq);
}
- return dma_fence_is_signaled(sync_file->fence) ? EPOLLIN : 0;
+ return dma_fence_check_and_signal(sync_file->fence) ? EPOLLIN : 0;
}
static long sync_file_ioctl_merge(struct sync_file *sync_file,
@@ -269,7 +269,7 @@ static int sync_fill_fence_info(struct dma_fence *fence,
info->status = dma_fence_get_status(fence);
info->timestamp_ns =
- dma_fence_is_signaled(fence) ?
+ dma_fence_check_and_signal(fence) ?
ktime_to_ns(dma_fence_timestamp(fence)) :
ktime_set(0, 0);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
index 1ef758ac5076..63d5f0d80f68 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
@@ -123,7 +123,7 @@ static bool amdkfd_fence_enable_signaling(struct dma_fence *f)
if (!fence)
return false;
- if (dma_fence_is_signaled(f))
+ if (dma_fence_check_and_signal(f))
return true;
if (!fence->svm_bo) {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
index 1e998f972c30..cc7761f6ffc9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
@@ -1864,7 +1864,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
} else {
mutex_lock(&avm->process_info->lock);
if (avm->process_info->eviction_fence &&
- !dma_fence_is_signaled(&avm->process_info->eviction_fence->base))
+ !dma_fence_check_and_signal(&avm->process_info->eviction_fence->base))
ret = amdgpu_amdkfd_bo_validate_and_fence(bo, domain,
&avm->process_info->eviction_fence->base);
mutex_unlock(&avm->process_info->lock);
@@ -2425,7 +2425,7 @@ static int import_obj_create(struct amdgpu_device *adev,
mutex_lock(&avm->process_info->lock);
if (avm->process_info->eviction_fence &&
- !dma_fence_is_signaled(&avm->process_info->eviction_fence->base))
+ !dma_fence_check_and_signal(&avm->process_info->eviction_fence->base))
ret = amdgpu_amdkfd_bo_validate_and_fence(bo, (*mem)->domain,
&avm->process_info->eviction_fence->base);
mutex_unlock(&avm->process_info->lock);
@@ -2875,7 +2875,7 @@ static void replace_eviction_fence(struct dma_fence __rcu **ef,
* replace the fence in restore_work that only gets scheduled after
* eviction work signaled the fence.
*/
- WARN_ONCE(!dma_fence_is_signaled(old_ef),
+ WARN_ONCE(!dma_fence_check_and_signal(old_ef),
"Replacing unsignaled eviction fence");
dma_fence_put(old_ef);
}
@@ -3049,7 +3049,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu *
* Anyone signaling an eviction fence must stop the queues first
* and schedule another restore worker.
*/
- if (dma_fence_is_signaled(&process_info->eviction_fence->base)) {
+ if (dma_fence_check_and_signal(&process_info->eviction_fence->base)) {
struct amdgpu_amdkfd_fence *new_fence =
amdgpu_amdkfd_fence_create(
process_info->eviction_fence->base.context,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
index c43d1b6e5d66..dadcf75b0174 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c
@@ -765,7 +765,7 @@ uint64_t amdgpu_ctx_add_fence(struct amdgpu_ctx *ctx,
idx = seq & (amdgpu_sched_jobs - 1);
other = centity->fences[idx];
- WARN_ON(other && !dma_fence_is_signaled(other));
+ WARN_ON(other && !dma_fence_check_and_signal(other));
dma_fence_get(fence);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
index 49ca8c814455..598cb0148b63 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c
@@ -1895,7 +1895,7 @@ static void amdgpu_ib_preempt_mark_partial_job(struct amdgpu_ring *ring)
no_preempt:
spin_lock(&sched->job_list_lock);
list_for_each_entry_safe(s_job, tmp, &sched->pending_list, list) {
- if (dma_fence_is_signaled(&s_job->s_fence->finished)) {
+ if (dma_fence_check_and_signal(&s_job->s_fence->finished)) {
/* remove job from ring_mirror_list */
list_del_init(&s_job->list);
sched->ops->free_job(s_job);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 24ba52d76045..29a9cddcab93 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -6000,7 +6000,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
*
* job->base holds a reference to parent fence
*/
- if (job && dma_fence_is_signaled(&job->hw_fence)) {
+ if (job && dma_fence_check_and_signal(&job->hw_fence)) {
job_signaled = true;
dev_info(adev->dev, "Guilty job already signaled, skipping HW reset");
goto skip_hw_reset;
@@ -6860,7 +6860,7 @@ struct dma_fence *amdgpu_device_switch_gang(struct amdgpu_device *adev,
if (old == gang)
break;
- if (!dma_fence_is_signaled(old))
+ if (!dma_fence_check_and_signal(old))
return old;
} while (cmpxchg((struct dma_fence __force **)&adev->gang_submit,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
index 2f24a6aa13bf..20e0fac01594 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_fence.c
@@ -719,7 +719,7 @@ void amdgpu_fence_driver_clear_job_fences(struct amdgpu_ring *ring)
* and they will remain unsignaled during sa_bo free.
*/
job = container_of(old, struct amdgpu_job, hw_fence);
- if (!job->base.s_fence && !dma_fence_is_signaled(old))
+ if (!job->base.s_fence && !dma_fence_check_and_signal(old))
dma_fence_signal(old);
RCU_INIT_POINTER(*ptr, NULL);
dma_fence_put(old);
@@ -745,7 +745,7 @@ void amdgpu_fence_driver_set_error(struct amdgpu_ring *ring, int error)
fence = rcu_dereference_protected(drv->fences[i],
lockdep_is_held(&drv->lock));
- if (fence && !dma_fence_is_signaled_locked(fence))
+ if (fence && !dma_fence_check_and_signal_locked(fence))
dma_fence_set_error(fence, error);
}
spin_unlock_irqrestore(&drv->lock, flags);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
index 8e712a11aba5..604e3f07a951 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
@@ -204,7 +204,7 @@ static int amdgpu_vmid_grab_idle(struct amdgpu_ring *ring,
struct dma_fence **fences;
unsigned i;
- if (!dma_fence_is_signaled(ring->vmid_wait)) {
+ if (!dma_fence_check_and_signal(ring->vmid_wait)) {
*fence = dma_fence_get(ring->vmid_wait);
return 0;
}
@@ -287,14 +287,14 @@ static int amdgpu_vmid_grab_reserved(struct amdgpu_vm *vm,
(*id)->flushed_updates < updates ||
!(*id)->last_flush ||
((*id)->last_flush->context != fence_context &&
- !dma_fence_is_signaled((*id)->last_flush))) {
+ !dma_fence_check_and_signal((*id)->last_flush))) {
struct dma_fence *tmp;
/* Wait for the gang to be assembled before using a
* reserved VMID or otherwise the gang could deadlock.
*/
tmp = amdgpu_device_get_gang(adev);
- if (!dma_fence_is_signaled(tmp) && tmp != job->gang_submit) {
+ if (!dma_fence_check_and_signal(tmp) && tmp != job->gang_submit) {
*id = NULL;
*fence = tmp;
return 0;
@@ -372,7 +372,7 @@ static int amdgpu_vmid_grab_used(struct amdgpu_vm *vm,
if (!(*id)->last_flush ||
((*id)->last_flush->context != fence_context &&
- !dma_fence_is_signaled((*id)->last_flush)))
+ !dma_fence_check_and_signal((*id)->last_flush)))
needs_flush = true;
if ((*id)->flushed_updates < updates)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index a6e28fe3f8d6..529e5ed31b4d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -464,16 +464,16 @@ bool amdgpu_ring_soft_recovery(struct amdgpu_ring *ring, unsigned int vmid,
return false;
spin_lock_irqsave(fence->lock, flags);
- if (!dma_fence_is_signaled_locked(fence))
+ if (!dma_fence_check_and_signal_locked(fence))
dma_fence_set_error(fence, -ENODATA);
spin_unlock_irqrestore(fence->lock, flags);
atomic_inc(&ring->adev->gpu_reset_counter);
- while (!dma_fence_is_signaled(fence) &&
+ while (!dma_fence_check_and_signal(fence) &&
ktime_to_ns(ktime_sub(deadline, ktime_get())) > 0)
ring->funcs->soft_recovery(ring, vmid);
- return dma_fence_is_signaled(fence);
+ return dma_fence_check_and_signal(fence);
}
/*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
index c586ab4c911b..ec2293b70855 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sync.c
@@ -318,7 +318,7 @@ struct dma_fence *amdgpu_sync_peek_fence(struct amdgpu_sync *sync,
struct dma_fence *f = e->fence;
struct drm_sched_fence *s_fence = to_drm_sched_fence(f);
- if (dma_fence_is_signaled(f)) {
+ if (dma_fence_check_and_signal(f)) {
amdgpu_sync_entry_free(e);
continue;
}
@@ -327,7 +327,7 @@ struct dma_fence *amdgpu_sync_peek_fence(struct amdgpu_sync *sync,
* when they are scheduled.
*/
if (s_fence->sched == &ring->sched) {
- if (dma_fence_is_signaled(&s_fence->scheduled))
+ if (dma_fence_check_and_signal(&s_fence->scheduled))
continue;
return &s_fence->scheduled;
@@ -361,7 +361,7 @@ struct dma_fence *amdgpu_sync_get_fence(struct amdgpu_sync *sync)
hash_del(&e->node);
kmem_cache_free(amdgpu_sync_slab, e);
- if (!dma_fence_is_signaled(f))
+ if (!dma_fence_check_and_signal(f))
return f;
dma_fence_put(f);
@@ -387,7 +387,7 @@ int amdgpu_sync_clone(struct amdgpu_sync *source, struct amdgpu_sync *clone)
hash_for_each_safe(source->fences, i, tmp, e, node) {
f = e->fence;
- if (!dma_fence_is_signaled(f)) {
+ if (!dma_fence_check_and_signal(f)) {
r = amdgpu_sync_fence(clone, f);
if (r)
return r;
@@ -415,7 +415,7 @@ int amdgpu_sync_push_to_job(struct amdgpu_sync *sync, struct amdgpu_job *job)
hash_for_each_safe(sync->fences, i, tmp, e, node) {
f = e->fence;
- if (dma_fence_is_signaled(f)) {
+ if (dma_fence_check_and_signal(f)) {
amdgpu_sync_entry_free(e);
continue;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 5c07777d3239..72bcb18d21ac 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -775,7 +775,7 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job,
mutex_lock(&id_mgr->lock);
if (id->pasid != job->pasid || !id->pasid_mapping ||
- !dma_fence_is_signaled(id->pasid_mapping))
+ !dma_fence_check_and_signal(id->pasid_mapping))
pasid_mapping_needed = true;
mutex_unlock(&id_mgr->lock);
@@ -1110,7 +1110,7 @@ int amdgpu_vm_update_range(struct amdgpu_device *adev, struct amdgpu_vm *vm,
goto error_free;
}
- if (!unlocked && !dma_fence_is_signaled(vm->last_unlocked)) {
+ if (!unlocked && !dma_fence_check_and_signal(vm->last_unlocked)) {
struct dma_fence *tmp = dma_fence_get_stub();
amdgpu_bo_fence(vm->root.bo, vm->last_unlocked, true);
@@ -2200,7 +2200,7 @@ bool amdgpu_vm_evictable(struct amdgpu_bo *bo)
return false;
/* Don't evict VM page tables while they are updated */
- if (!dma_fence_is_signaled(bo_base->vm->last_unlocked)) {
+ if (!dma_fence_check_and_signal(bo_base->vm->last_unlocked)) {
amdgpu_vm_eviction_unlock(bo_base->vm);
return false;
}
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index a29374c86405..d33d219882a0 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -1165,7 +1165,7 @@ int kgd2kfd_schedule_evict_and_restore_process(struct mm_struct *mm,
if (!fence)
return -EINVAL;
- if (dma_fence_is_signaled(fence))
+ if (dma_fence_check_and_signal(fence))
return 0;
p = kfd_lookup_process_by_mm(mm);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
index bd3e20d981e0..b622fcc7864c 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_svm.c
@@ -426,7 +426,7 @@ static void svm_range_bo_release(struct kref *kref)
mmput(mm);
}
- if (!dma_fence_is_signaled(&svm_bo->eviction_fence->base))
+ if (!dma_fence_check_and_signal(&svm_bo->eviction_fence->base))
/* We're not in the eviction worker. Signal the fence. */
dma_fence_signal(&svm_bo->eviction_fence->base);
dma_fence_put(&svm_bo->eviction_fence->base);
diff --git a/drivers/gpu/drm/drm_suballoc.c b/drivers/gpu/drm/drm_suballoc.c
index 38cc7a123819..2515c5a5726e 100644
--- a/drivers/gpu/drm/drm_suballoc.c
+++ b/drivers/gpu/drm/drm_suballoc.c
@@ -133,7 +133,7 @@ static void drm_suballoc_try_free(struct drm_suballoc_manager *sa_manager)
sa = list_entry(sa_manager->hole->next, struct drm_suballoc, olist);
list_for_each_entry_safe_from(sa, tmp, &sa_manager->olist, olist) {
- if (!sa->fence || !dma_fence_is_signaled(sa->fence))
+ if (!sa->fence || !dma_fence_check_and_signal(sa->fence))
return;
drm_suballoc_remove_locked(sa);
@@ -253,7 +253,7 @@ static bool drm_suballoc_next_hole(struct drm_suballoc_manager *sa_manager,
sa = list_first_entry(&sa_manager->flist[i],
struct drm_suballoc, flist);
- if (!dma_fence_is_signaled(sa->fence)) {
+ if (!dma_fence_check_and_signal(sa->fence)) {
fences[i] = sa->fence;
continue;
}
@@ -406,7 +406,7 @@ void drm_suballoc_free(struct drm_suballoc *suballoc,
sa_manager = suballoc->manager;
spin_lock(&sa_manager->wq.lock);
- if (fence && !dma_fence_is_signaled(fence)) {
+ if (fence && !dma_fence_check_and_signal(fence)) {
u32 idx;
suballoc->fence = dma_fence_get(fence);
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index 636cd83ca29e..47d77ca239c0 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -1120,7 +1120,7 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs,
entries[i].fence = dma_fence_get_stub();
if ((flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE) ||
- dma_fence_is_signaled(entries[i].fence)) {
+ dma_fence_check_and_signal(entries[i].fence)) {
if (signaled_count == 0 && idx)
*idx = i;
signaled_count++;
@@ -1164,7 +1164,7 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs,
continue;
if ((flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE) ||
- dma_fence_is_signaled(fence) ||
+ dma_fence_check_and_signal(fence) ||
(!entries[i].fence_cb.func &&
dma_fence_add_callback(fence,
&entries[i].fence_cb,
@@ -1723,7 +1723,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
dma_fence_put(last_signaled);
last_signaled = dma_fence_get(iter);
}
- point = dma_fence_is_signaled(last_signaled) ?
+ point = dma_fence_check_and_signal(last_signaled) ?
last_signaled->seqno :
to_dma_fence_chain(last_signaled)->prev_seqno;
}
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
index cf0d9049bcf1..f3a5a2af3b0c 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
@@ -1284,7 +1284,7 @@ int etnaviv_gpu_wait_fence_interruptible(struct etnaviv_gpu *gpu,
if (!timeout) {
/* No timeout was requested: just test for completion */
- ret = dma_fence_is_signaled(fence) ? 0 : -EBUSY;
+ ret = dma_fence_check_and_signal(fence) ? 0 : -EBUSY;
} else {
unsigned long remaining = etnaviv_timeout_to_jiffies(timeout);
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_sched.c b/drivers/gpu/drm/etnaviv/etnaviv_sched.c
index 76a3a3e517d8..816237edb219 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_sched.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_sched.c
@@ -43,7 +43,7 @@ static enum drm_gpu_sched_stat etnaviv_sched_timedout_job(struct drm_sched_job
* If the GPU managed to complete this jobs fence, the timout is
* spurious. Bail out.
*/
- if (dma_fence_is_signaled(submit->out_fence))
+ if (dma_fence_check_and_signal(submit->out_fence))
goto out_no_timeout;
/*
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_wait.c b/drivers/gpu/drm/i915/gem/i915_gem_wait.c
index 1f55e62044a4..c882c10c9bd6 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_wait.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_wait.c
@@ -95,7 +95,7 @@ static void fence_set_priority(struct dma_fence *fence,
struct i915_request *rq;
struct intel_engine_cs *engine;
- if (dma_fence_is_signaled(fence) || !dma_fence_is_i915(fence))
+ if (dma_fence_check_and_signal(fence) || !dma_fence_is_i915(fence))
return;
rq = to_request(fence);
@@ -115,7 +115,7 @@ static inline bool __dma_fence_is_chain(const struct dma_fence *fence)
void i915_gem_fence_wait_priority(struct dma_fence *fence,
const struct i915_sched_attr *attr)
{
- if (dma_fence_is_signaled(fence))
+ if (dma_fence_check_and_signal(fence))
return;
local_bh_disable();
diff --git a/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c b/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c
index d8f4a10d71de..ce20e6b15881 100644
--- a/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c
+++ b/drivers/gpu/drm/i915/gem/selftests/i915_gem_migrate.c
@@ -258,7 +258,7 @@ static int __igt_lmem_pages_migrate(struct intel_gt *gt,
goto out_put;
if (spin) {
- if (dma_fence_is_signaled(spin_fence)) {
+ if (dma_fence_check_and_signal(spin_fence)) {
pr_err("Spinner was terminated by hangcheck.\n");
err = -EBUSY;
goto out_unlock;
diff --git a/drivers/gpu/drm/i915/i915_deps.c b/drivers/gpu/drm/i915/i915_deps.c
index 91c61864285a..44e73dfac38b 100644
--- a/drivers/gpu/drm/i915/i915_deps.c
+++ b/drivers/gpu/drm/i915/i915_deps.c
@@ -97,7 +97,7 @@ static int i915_deps_grow(struct i915_deps *deps, struct dma_fence *fence,
return 0;
sync:
- if (ctx->no_wait_gpu && !dma_fence_is_signaled(fence)) {
+ if (ctx->no_wait_gpu && !dma_fence_check_and_signal(fence)) {
ret = -EBUSY;
goto unref;
}
@@ -136,7 +136,7 @@ int i915_deps_sync(const struct i915_deps *deps, const struct ttm_operation_ctx
int ret = 0;
for (i = 0; i < deps->num_deps; ++i, ++fences) {
- if (ctx->no_wait_gpu && !dma_fence_is_signaled(*fences)) {
+ if (ctx->no_wait_gpu && !dma_fence_check_and_signal(*fences)) {
ret = -EBUSY;
break;
}
@@ -183,7 +183,7 @@ int i915_deps_add_dependency(struct i915_deps *deps,
if (!fence)
return 0;
- if (dma_fence_is_signaled(fence)) {
+ if (dma_fence_check_and_signal(fence)) {
ret = fence->error;
if (ret)
i915_deps_fini(deps);
diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c
index 8f62cfa23fb7..231e31d5b4ca 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -1932,7 +1932,7 @@ static bool __i915_spin_request(struct i915_request * const rq, int state)
timeout_ns = READ_ONCE(rq->engine->props.max_busywait_duration_ns);
timeout_ns += local_clock_ns(&cpu);
do {
- if (dma_fence_is_signaled(&rq->fence))
+ if (dma_fence_check_and_signal(&rq->fence))
return true;
if (signal_pending_state(state, current))
@@ -1989,7 +1989,7 @@ long i915_request_wait_timeout(struct i915_request *rq,
might_sleep();
GEM_BUG_ON(timeout < 0);
- if (dma_fence_is_signaled(&rq->fence))
+ if (dma_fence_check_and_signal(&rq->fence))
return timeout ?: 1;
if (!timeout)
@@ -2072,7 +2072,7 @@ long i915_request_wait_timeout(struct i915_request *rq,
for (;;) {
set_current_state(state);
- if (dma_fence_is_signaled(&rq->fence))
+ if (dma_fence_check_and_signal(&rq->fence))
break;
if (signal_pending_state(state, current)) {
diff --git a/drivers/gpu/drm/i915/i915_sw_fence.c b/drivers/gpu/drm/i915/i915_sw_fence.c
index 1d4cc91c0e40..73cd6717d83d 100644
--- a/drivers/gpu/drm/i915/i915_sw_fence.c
+++ b/drivers/gpu/drm/i915/i915_sw_fence.c
@@ -483,7 +483,7 @@ int i915_sw_fence_await_dma_fence(struct i915_sw_fence *fence,
debug_fence_assert(fence);
might_sleep_if(gfpflags_allow_blocking(gfp));
- if (dma_fence_is_signaled(dma)) {
+ if (dma_fence_check_and_signal(dma)) {
i915_sw_fence_set_error_once(fence, dma->error);
return 0;
}
@@ -551,7 +551,7 @@ int __i915_sw_fence_await_dma_fence(struct i915_sw_fence *fence,
debug_fence_assert(fence);
- if (dma_fence_is_signaled(dma)) {
+ if (dma_fence_check_and_signal(dma)) {
i915_sw_fence_set_error_once(fence, dma->error);
return 0;
}
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 776f8cc51b2f..8b87707d6fec 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -430,7 +430,7 @@ static int i915_vma_verify_bind_complete(struct i915_vma *vma)
if (!fence)
return 0;
- if (dma_fence_is_signaled(fence))
+ if (dma_fence_check_and_signal(fence))
err = fence->error;
else
err = -EBUSY;
diff --git a/drivers/gpu/drm/i915/selftests/i915_request.c b/drivers/gpu/drm/i915/selftests/i915_request.c
index 88870844b5bd..913b3164928e 100644
--- a/drivers/gpu/drm/i915/selftests/i915_request.c
+++ b/drivers/gpu/drm/i915/selftests/i915_request.c
@@ -170,7 +170,7 @@ static int igt_fence_wait(void *arg)
i915_request_add(request);
- if (dma_fence_is_signaled(&request->fence)) {
+ if (dma_fence_check_and_signal(&request->fence)) {
pr_err("fence signaled immediately!\n");
goto out;
}
@@ -185,7 +185,7 @@ static int igt_fence_wait(void *arg)
goto out;
}
- if (!dma_fence_is_signaled(&request->fence)) {
+ if (!dma_fence_check_and_signal(&request->fence)) {
pr_err("fence unsignaled after waiting!\n");
goto out;
}
diff --git a/drivers/gpu/drm/imagination/pvr_queue.c b/drivers/gpu/drm/imagination/pvr_queue.c
index 21c185d18bb2..ab4ca3dad5b0 100644
--- a/drivers/gpu/drm/imagination/pvr_queue.c
+++ b/drivers/gpu/drm/imagination/pvr_queue.c
@@ -365,7 +365,7 @@ static unsigned long job_count_remaining_native_deps(struct pvr_job *job)
if (!jfence)
continue;
- if (!dma_fence_is_signaled(&jfence->base))
+ if (!dma_fence_check_and_signal(&jfence->base))
remaining_count++;
}
@@ -470,7 +470,7 @@ pvr_queue_get_paired_frag_job_dep(struct pvr_queue *queue, struct pvr_job *job)
xa_for_each(&frag_job->base.dependencies, index, f) {
/* Skip already signaled fences. */
- if (dma_fence_is_signaled(f))
+ if (dma_fence_check_and_signal(f))
continue;
/* Skip our own fence. */
@@ -625,7 +625,7 @@ static void pvr_queue_submit_job_to_cccb(struct pvr_job *job)
&job->paired_job->base.s_fence->scheduled == fence)
continue;
- if (dma_fence_is_signaled(&jfence->base))
+ if (dma_fence_check_and_signal(&jfence->base))
continue;
pvr_fw_object_get_fw_addr(jfence->queue->timeline_ufo.fw_obj,
@@ -768,7 +768,7 @@ static void pvr_queue_start(struct pvr_queue *queue)
*queue->timeline_ufo.value = atomic_read(&queue->job_fence_ctx.seqno);
list_for_each_entry(job, &queue->scheduler.pending_list, base.list) {
- if (dma_fence_is_signaled(job->done_fence)) {
+ if (dma_fence_check_and_signal(job->done_fence)) {
/* Jobs might have completed after drm_sched_stop() was called.
* In that case, re-assign the parent field to the done_fence.
*/
@@ -910,7 +910,7 @@ pvr_queue_signal_done_fences(struct pvr_queue *queue)
if ((int)(cur_seqno - lower_32_bits(job->done_fence->seqno)) < 0)
break;
- if (!dma_fence_is_signaled(job->done_fence)) {
+ if (!dma_fence_check_and_signal(job->done_fence)) {
dma_fence_signal(job->done_fence);
pvr_job_release_pm_ref(job);
atomic_dec(&queue->in_flight_job_count);
diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c
index 7934098e651b..13cfe6daeeda 100644
--- a/drivers/gpu/drm/lima/lima_sched.c
+++ b/drivers/gpu/drm/lima/lima_sched.c
@@ -408,7 +408,7 @@ static enum drm_gpu_sched_stat lima_sched_timedout_job(struct drm_sched_job *job
* If the GPU managed to complete this jobs fence, the timeout is
* spurious. Bail out.
*/
- if (dma_fence_is_signaled(task->fence)) {
+ if (dma_fence_check_and_signal(task->fence)) {
DRM_WARN("%s spurious timeout\n", lima_ip_name(ip));
return DRM_GPU_SCHED_STAT_NOMINAL;
}
@@ -425,7 +425,7 @@ static enum drm_gpu_sched_stat lima_sched_timedout_job(struct drm_sched_job *job
if (pipe->bcast_processor)
synchronize_irq(pipe->bcast_processor->irq);
- if (dma_fence_is_signaled(task->fence)) {
+ if (dma_fence_check_and_signal(task->fence)) {
DRM_WARN("%s unexpectedly high interrupt latency\n", lima_ip_name(ip));
return DRM_GPU_SCHED_STAT_NOMINAL;
}
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 8557998e0c92..5dd662dee01b 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -717,7 +717,7 @@ static void retire_submits(struct msm_gpu *gpu)
* been signalled, then later submits are not signalled
* either, so we are also done.
*/
- if (submit && dma_fence_is_signaled(submit->hw_fence)) {
+ if (submit && dma_fence_check_and_signal(submit->hw_fence)) {
retire_submit(gpu, ring, submit);
} else {
break;
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c
index 2a2b319dca5f..de8afc3f94c7 100644
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
@@ -159,7 +159,7 @@ nouveau_cli_work_ready(struct dma_fence *fence)
bool ret = true;
spin_lock_irq(fence->lock);
- if (!dma_fence_is_signaled_locked(fence))
+ if (!dma_fence_check_and_signal_locked(fence))
ret = false;
spin_unlock_irq(fence->lock);
diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c b/drivers/gpu/drm/nouveau/nouveau_fence.c
index 7cc84472cece..99d6f128ab2c 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fence.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fence.c
@@ -274,7 +274,7 @@ nouveau_fence_done(struct nouveau_fence *fence)
nvif_event_block(&fctx->event);
spin_unlock_irqrestore(&fctx->lock, flags);
}
- return dma_fence_is_signaled(&fence->base);
+ return dma_fence_check_and_signal(&fence->base);
}
static long
diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c
index 5657106c2f7d..f50e08428300 100644
--- a/drivers/gpu/drm/panfrost/panfrost_job.c
+++ b/drivers/gpu/drm/panfrost/panfrost_job.c
@@ -754,7 +754,7 @@ static enum drm_gpu_sched_stat panfrost_job_timedout(struct drm_sched_job
* If the GPU managed to complete this jobs fence, the timeout is
* spurious. Bail out.
*/
- if (dma_fence_is_signaled(job->done_fence))
+ if (dma_fence_check_and_signal(job->done_fence))
return DRM_GPU_SCHED_STAT_NOMINAL;
/*
@@ -768,7 +768,7 @@ static enum drm_gpu_sched_stat panfrost_job_timedout(struct drm_sched_job
*/
synchronize_irq(pfdev->js->irq);
- if (dma_fence_is_signaled(job->done_fence)) {
+ if (dma_fence_check_and_signal(job->done_fence)) {
dev_warn(pfdev->dev, "unexpectedly high interrupt latency\n");
return DRM_GPU_SCHED_STAT_NOMINAL;
}
diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c
index 05204a6a3fa8..f75f8c5289c6 100644
--- a/drivers/gpu/drm/qxl/qxl_release.c
+++ b/drivers/gpu/drm/qxl/qxl_release.c
@@ -63,7 +63,7 @@ static long qxl_fence_wait(struct dma_fence *fence, bool intr,
qdev = container_of(fence->lock, struct qxl_device, release_lock);
if (!wait_event_timeout(qdev->release_event,
- (dma_fence_is_signaled(fence) ||
+ (dma_fence_check_and_signal(fence) ||
(qxl_io_notify_oom(qdev), 0)),
timeout))
return 0;
diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
index a6d2a4722d82..ba4054fc818b 100644
--- a/drivers/gpu/drm/scheduler/sched_entity.c
+++ b/drivers/gpu/drm/scheduler/sched_entity.c
@@ -548,7 +548,7 @@ void drm_sched_entity_select_rq(struct drm_sched_entity *entity)
fence = rcu_dereference_check(entity->last_scheduled, true);
/* stay on the same engine if the previous job hasn't finished */
- if (fence && !dma_fence_is_signaled(fence))
+ if (fence && !dma_fence_check_and_signal(fence))
return;
spin_lock(&entity->lock);
diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
index c0420e90c468..03a18288e8c1 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -382,7 +382,7 @@ static void drm_sched_run_free_queue(struct drm_gpu_scheduler *sched)
spin_lock(&sched->job_list_lock);
job = list_first_entry_or_null(&sched->pending_list,
struct drm_sched_job, list);
- if (job && dma_fence_is_signaled(&job->s_fence->finished))
+ if (job && dma_fence_check_and_signal(&job->s_fence->finished))
__drm_sched_run_free_queue(sched);
spin_unlock(&sched->job_list_lock);
}
@@ -1118,7 +1118,7 @@ drm_sched_get_finished_job(struct drm_gpu_scheduler *sched)
job = list_first_entry_or_null(&sched->pending_list,
struct drm_sched_job, list);
- if (job && dma_fence_is_signaled(&job->s_fence->finished)) {
+ if (job && dma_fence_check_and_signal(&job->s_fence->finished)) {
/* remove job from pending_list */
list_del_init(&job->list);
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index e218a7ce490e..d5841820c859 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -672,7 +672,7 @@ static int ttm_bo_add_move_fence(struct ttm_buffer_object *bo,
return 0;
if (no_wait_gpu) {
- ret = dma_fence_is_signaled(fence) ? 0 : -EBUSY;
+ ret = dma_fence_check_and_signal(fence) ? 0 : -EBUSY;
dma_fence_put(fence);
return ret;
}
diff --git a/drivers/gpu/drm/v3d/v3d_sched.c b/drivers/gpu/drm/v3d/v3d_sched.c
index 34bd2b14f932..2bdc7d72f5f6 100644
--- a/drivers/gpu/drm/v3d/v3d_sched.c
+++ b/drivers/gpu/drm/v3d/v3d_sched.c
@@ -519,7 +519,7 @@ v3d_copy_query_results(struct v3d_cpu_job *job)
for (i = 0; i < timestamp_query->count; i++) {
fence = drm_syncobj_fence_get(queries[i].syncobj);
- available = fence ? dma_fence_is_signaled(fence) : false;
+ available = fence ? dma_fence_check_and_signal(fence) : false;
write_result = available || copy->do_partial;
if (write_result) {
@@ -623,7 +623,7 @@ v3d_copy_performance_query(struct v3d_cpu_job *job)
for (int i = 0; i < performance_query->count; i++) {
fence = drm_syncobj_fence_get(performance_query->queries[i].syncobj);
- available = fence ? dma_fence_is_signaled(fence) : false;
+ available = fence ? dma_fence_check_and_signal(fence) : false;
write_result = available || copy->do_partial;
if (write_result)
diff --git a/drivers/gpu/drm/vgem/vgem_fence.c b/drivers/gpu/drm/vgem/vgem_fence.c
index 5298d995faa7..551760e44e81 100644
--- a/drivers/gpu/drm/vgem/vgem_fence.c
+++ b/drivers/gpu/drm/vgem/vgem_fence.c
@@ -207,7 +207,7 @@ int vgem_fence_signal_ioctl(struct drm_device *dev,
if (IS_ERR(fence))
return PTR_ERR(fence);
- if (dma_fence_is_signaled(fence))
+ if (dma_fence_check_and_signal(fence))
ret = -ETIMEDOUT;
dma_fence_signal(fence);
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
index 588d50ababf6..9525df31f4bc 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
@@ -443,7 +443,7 @@ static bool vmw_fence_goal_check_locked(struct vmw_fence_obj *fence)
struct vmw_fence_manager *fman = fman_from_fence(fence);
u32 goal_seqno;
- if (dma_fence_is_signaled_locked(&fence->base))
+ if (dma_fence_check_and_signal_locked(&fence->base))
return false;
goal_seqno = vmw_fence_goal_read(fman->dev_priv);
@@ -513,7 +513,7 @@ bool vmw_fence_obj_signaled(struct vmw_fence_obj *fence)
vmw_fences_update(fman);
- return dma_fence_is_signaled(&fence->base);
+ return dma_fence_check_and_signal(&fence->base);
}
int vmw_fence_obj_wait(struct vmw_fence_obj *fence, bool lazy,
@@ -886,7 +886,7 @@ static void vmw_fence_obj_add_action(struct vmw_fence_obj *fence,
spin_lock(&fman->lock);
fman->pending_actions[action->type]++;
- if (dma_fence_is_signaled_locked(&fence->base)) {
+ if (dma_fence_check_and_signal_locked(&fence->base)) {
struct list_head action_list;
INIT_LIST_HEAD(&action_list);
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 2827cb4618e6..69926b6c401d 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1235,7 +1235,7 @@ static void xe_ttm_bo_release_notify(struct ttm_buffer_object *ttm_bo)
dma_resv_for_each_fence(&cursor, ttm_bo->base.resv,
DMA_RESV_USAGE_BOOKKEEP, fence) {
if (xe_fence_is_xe_preempt(fence) &&
- !dma_fence_is_signaled(fence)) {
+ !dma_fence_check_and_signal(fence)) {
if (!replacement)
replacement = dma_fence_get_stub();
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index 913c74d6e2ae..0256a5126663 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -2202,9 +2202,9 @@ xe_guc_exec_queue_snapshot_capture(struct xe_exec_queue *q)
snapshot->pending_list[i].seqno =
xe_sched_job_seqno(job_iter);
snapshot->pending_list[i].fence =
- dma_fence_is_signaled(job_iter->fence) ? 1 : 0;
+ dma_fence_check_and_signal(job_iter->fence) ? 1 : 0;
snapshot->pending_list[i].finished =
- dma_fence_is_signaled(&job_iter->drm.s_fence->finished)
+ dma_fence_check_and_signal(&job_iter->drm.s_fence->finished)
? 1 : 0;
i++;
}
diff --git a/drivers/gpu/drm/xe/xe_hw_fence.c b/drivers/gpu/drm/xe/xe_hw_fence.c
index 0b4f12be3692..b55f4a4c9a4f 100644
--- a/drivers/gpu/drm/xe/xe_hw_fence.c
+++ b/drivers/gpu/drm/xe/xe_hw_fence.c
@@ -62,7 +62,7 @@ static void hw_fence_irq_run_cb(struct irq_work *work)
struct dma_fence *dma_fence = &fence->dma;
trace_xe_hw_fence_try_signal(fence);
- if (dma_fence_is_signaled_locked(dma_fence)) {
+ if (dma_fence_check_and_signal_locked(dma_fence)) {
trace_xe_hw_fence_signal(fence);
list_del_init(&fence->irq_link);
dma_fence_put(dma_fence);
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index 1ddcc7e79a93..195fa2bf9d44 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -1127,7 +1127,7 @@ static int xe_pt_vm_dependencies(struct xe_sched_job *job,
while (rtfence) {
fence = rtfence->fence;
- if (!dma_fence_is_signaled(fence)) {
+ if (!dma_fence_check_and_signal(fence)) {
/*
* Is this a CPU update? GPU is busy updating, so return
* an error
diff --git a/drivers/gpu/drm/xe/xe_range_fence.c b/drivers/gpu/drm/xe/xe_range_fence.c
index 372378e89e98..8ad267bf8948 100644
--- a/drivers/gpu/drm/xe/xe_range_fence.c
+++ b/drivers/gpu/drm/xe/xe_range_fence.c
@@ -60,7 +60,7 @@ int xe_range_fence_insert(struct xe_range_fence_tree *tree,
__xe_range_fence_tree_cleanup(tree);
- if (dma_fence_is_signaled(fence))
+ if (dma_fence_check_and_signal(fence))
goto free;
rfence->ops = ops;
diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h
index b12776883d14..dc2ad171458b 100644
--- a/include/linux/dma-fence.h
+++ b/include/linux/dma-fence.h
@@ -201,7 +201,7 @@ struct dma_fence_ops {
* once indicates as signalled must always return true from this
* callback. This callback may return false even if the fence has
* completed already, in this case information hasn't propogated throug
- * the system yet. See also dma_fence_is_signaled().
+ * the system yet. See also dma_fence_check_and_signal().
*
* May set &dma_fence.error if returning true.
*
@@ -382,8 +382,7 @@ bool dma_fence_remove_callback(struct dma_fence *fence,
void dma_fence_enable_sw_signaling(struct dma_fence *fence);
/**
- * dma_fence_is_signaled_locked - Return an indication if the fence
- * is signaled yet.
+ * dma_fence_check_and_signal_locked - Checks a fence and signals it if necessary
* @fence: the fence to check
*
* Returns true if the fence was already signaled, false if not. Since this
@@ -393,10 +392,10 @@ void dma_fence_enable_sw_signaling(struct dma_fence *fence);
*
* This function requires &dma_fence.lock to be held.
*
- * See also dma_fence_is_signaled().
+ * See also dma_fence_check_and_signal().
*/
static inline bool
-dma_fence_is_signaled_locked(struct dma_fence *fence)
+dma_fence_check_and_signal_locked(struct dma_fence *fence)
{
if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
return true;
@@ -410,7 +409,7 @@ dma_fence_is_signaled_locked(struct dma_fence *fence)
}
/**
- * dma_fence_is_signaled - Return an indication if the fence is signaled yet.
+ * dma_fence_check_and_signal - Checks a fence and signals it if necessary
* @fence: the fence to check
*
* Returns true if the fence was already signaled, false if not. Since this
@@ -423,10 +422,10 @@ dma_fence_is_signaled_locked(struct dma_fence *fence)
* wraparound between time of issue and time of use by checking the return
* value of this function before calling hardware-specific wait instructions.
*
- * See also dma_fence_is_signaled_locked().
+ * See also dma_fence_check_and_signal_locked().
*/
static inline bool
-dma_fence_is_signaled(struct dma_fence *fence)
+dma_fence_check_and_signal(struct dma_fence *fence)
{
if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
return true;
@@ -514,9 +513,9 @@ static inline struct dma_fence *dma_fence_later(struct dma_fence *f1,
* here is overkill.
*/
if (dma_fence_is_later(f1, f2))
- return dma_fence_is_signaled(f1) ? NULL : f1;
+ return dma_fence_check_and_signal(f1) ? NULL : f1;
else
- return dma_fence_is_signaled(f2) ? NULL : f2;
+ return dma_fence_check_and_signal(f2) ? NULL : f2;
}
/**
@@ -535,7 +534,7 @@ static inline struct dma_fence *dma_fence_later(struct dma_fence *f1,
*/
static inline int dma_fence_get_status_locked(struct dma_fence *fence)
{
- if (dma_fence_is_signaled_locked(fence))
+ if (dma_fence_check_and_signal_locked(fence))
return fence->error ?: 1;
else
return 0;
--
2.48.1
More information about the Freedreno
mailing list