Commit ad531f3d authored by Christian König's avatar Christian König
Browse files

dma-buf: rework stub fence initialisation v2



Instead of doing this on the first call of the function just initialize
the stub fence during kernel load.

This has the clear advantage of lower overhead and also doesn't rely on
the ops to not be NULL any more.

v2: use correct signal function

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@igalia.com>
Link: https://lore.kernel.org/r/20251031134442.113648-3-christian.koenig@amd.com
parent 6126a7f2
Loading
Loading
Loading
Loading
+15 −17
Original line number Diff line number Diff line
@@ -121,29 +121,27 @@ static const struct dma_fence_ops dma_fence_stub_ops = {
	.get_timeline_name = dma_fence_stub_get_name,
};

/**
 * dma_fence_get_stub - return a signaled fence
 *
 * Return a stub fence which is already signaled. The fence's
 * timestamp corresponds to the first time after boot this
 * function is called.
 */
struct dma_fence *dma_fence_get_stub(void)
static int __init dma_fence_init_stub(void)
{
	spin_lock(&dma_fence_stub_lock);
	if (!dma_fence_stub.ops) {
		dma_fence_init(&dma_fence_stub,
			       &dma_fence_stub_ops,
			       &dma_fence_stub_lock,
			       0, 0);
	dma_fence_init(&dma_fence_stub, &dma_fence_stub_ops,
		       &dma_fence_stub_lock, 0, 0);

	set_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT,
		&dma_fence_stub.flags);

		dma_fence_signal_locked(&dma_fence_stub);
	dma_fence_signal(&dma_fence_stub);
	return 0;
}
	spin_unlock(&dma_fence_stub_lock);
subsys_initcall(dma_fence_init_stub);

/**
 * dma_fence_get_stub - return a signaled fence
 *
 * Return a stub fence which is already signaled. The fence's timestamp
 * corresponds to the initialisation time of the linux kernel.
 */
struct dma_fence *dma_fence_get_stub(void)
{
	return dma_fence_get(&dma_fence_stub);
}
EXPORT_SYMBOL(dma_fence_get_stub);