in st-dma-resv.c [61:107]
static int test_signaling(void *arg, bool shared)
{
struct dma_resv resv;
struct dma_fence *f;
int r;
f = alloc_fence();
if (!f)
return -ENOMEM;
dma_resv_init(&resv);
r = dma_resv_lock(&resv, NULL);
if (r) {
pr_err("Resv locking failed\n");
goto err_free;
}
if (shared) {
r = dma_resv_reserve_shared(&resv, 1);
if (r) {
pr_err("Resv shared slot allocation failed\n");
goto err_unlock;
}
dma_resv_add_shared_fence(&resv, f);
} else {
dma_resv_add_excl_fence(&resv, f);
}
if (dma_resv_test_signaled(&resv, shared)) {
pr_err("Resv unexpectedly signaled\n");
r = -EINVAL;
goto err_unlock;
}
dma_fence_signal(f);
if (!dma_resv_test_signaled(&resv, shared)) {
pr_err("Resv not reporting signaled\n");
r = -EINVAL;
goto err_unlock;
}
err_unlock:
dma_resv_unlock(&resv);
err_free:
dma_resv_fini(&resv);
dma_fence_put(f);
return r;
}