Commit 418cc6ca authored by Daniel Vetter's avatar Daniel Vetter

dma-fence: Make ->wait callback optional

Almost everyone uses dma_fence_default_wait.

v2: Also remove the BUG_ON(!ops->wait) (Chris).

Reviewed-by: Christian König <christian.koenig@amd.com> (v1)
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Sumit Semwal <sumit.semwal@linaro.org>
Cc: Gustavo Padovan <gustavo@padovan.org>
Cc: linux-media@vger.kernel.org
Cc: linaro-mm-sig@lists.linaro.org
Link: https://patchwork.freedesktop.org/patch/msgid/20180503142603.28513-5-daniel.vetter@ffwll.ch
parent 070473bc
...@@ -104,7 +104,6 @@ const struct dma_fence_ops dma_fence_array_ops = { ...@@ -104,7 +104,6 @@ const struct dma_fence_ops dma_fence_array_ops = {
.get_timeline_name = dma_fence_array_get_timeline_name, .get_timeline_name = dma_fence_array_get_timeline_name,
.enable_signaling = dma_fence_array_enable_signaling, .enable_signaling = dma_fence_array_enable_signaling,
.signaled = dma_fence_array_signaled, .signaled = dma_fence_array_signaled,
.wait = dma_fence_default_wait,
.release = dma_fence_array_release, .release = dma_fence_array_release,
}; };
EXPORT_SYMBOL(dma_fence_array_ops); EXPORT_SYMBOL(dma_fence_array_ops);
......
...@@ -158,7 +158,10 @@ dma_fence_wait_timeout(struct dma_fence *fence, bool intr, signed long timeout) ...@@ -158,7 +158,10 @@ dma_fence_wait_timeout(struct dma_fence *fence, bool intr, signed long timeout)
return -EINVAL; return -EINVAL;
trace_dma_fence_wait_start(fence); trace_dma_fence_wait_start(fence);
if (fence->ops->wait)
ret = fence->ops->wait(fence, intr, timeout); ret = fence->ops->wait(fence, intr, timeout);
else
ret = dma_fence_default_wait(fence, intr, timeout);
trace_dma_fence_wait_end(fence); trace_dma_fence_wait_end(fence);
return ret; return ret;
} }
...@@ -556,8 +559,7 @@ dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops, ...@@ -556,8 +559,7 @@ dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops,
spinlock_t *lock, u64 context, unsigned seqno) spinlock_t *lock, u64 context, unsigned seqno)
{ {
BUG_ON(!lock); BUG_ON(!lock);
BUG_ON(!ops || !ops->wait || BUG_ON(!ops || !ops->get_driver_name || !ops->get_timeline_name);
!ops->get_driver_name || !ops->get_timeline_name);
kref_init(&fence->refcount); kref_init(&fence->refcount);
fence->ops = ops; fence->ops = ops;
......
...@@ -188,7 +188,6 @@ static const struct dma_fence_ops timeline_fence_ops = { ...@@ -188,7 +188,6 @@ static const struct dma_fence_ops timeline_fence_ops = {
.get_timeline_name = timeline_fence_get_timeline_name, .get_timeline_name = timeline_fence_get_timeline_name,
.enable_signaling = timeline_fence_enable_signaling, .enable_signaling = timeline_fence_enable_signaling,
.signaled = timeline_fence_signaled, .signaled = timeline_fence_signaled,
.wait = dma_fence_default_wait,
.release = timeline_fence_release, .release = timeline_fence_release,
.fence_value_str = timeline_fence_value_str, .fence_value_str = timeline_fence_value_str,
.timeline_value_str = timeline_fence_timeline_value_str, .timeline_value_str = timeline_fence_timeline_value_str,
......
...@@ -191,11 +191,14 @@ struct dma_fence_ops { ...@@ -191,11 +191,14 @@ struct dma_fence_ops {
/** /**
* @wait: * @wait:
* *
* Custom wait implementation, or dma_fence_default_wait. * Custom wait implementation, defaults to dma_fence_default_wait() if
* not set.
* *
* Must not be NULL, set to dma_fence_default_wait for default implementation. * The dma_fence_default_wait implementation should work for any fence, as long
* the dma_fence_default_wait implementation should work for any fence, as long * as @enable_signaling works correctly. This hook allows drivers to
* as enable_signaling works correctly. * have an optimized version for the case where a process context is
* already available, e.g. if @enable_signaling for the general case
* needs to set up a worker thread.
* *
* Must return -ERESTARTSYS if the wait is intr = true and the wait was * Must return -ERESTARTSYS if the wait is intr = true and the wait was
* interrupted, and remaining jiffies if fence has signaled, or 0 if wait * interrupted, and remaining jiffies if fence has signaled, or 0 if wait
...@@ -203,7 +206,7 @@ struct dma_fence_ops { ...@@ -203,7 +206,7 @@ struct dma_fence_ops {
* which should be treated as if the fence is signaled. For example a hardware * which should be treated as if the fence is signaled. For example a hardware
* lockup could be reported like that. * lockup could be reported like that.
* *
* This callback is mandatory. * This callback is optional.
*/ */
signed long (*wait)(struct dma_fence *fence, signed long (*wait)(struct dma_fence *fence,
bool intr, signed long timeout); bool intr, signed long timeout);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment