From: Daniel Vetter <daniel.vetter@ffwll.ch> To: DRI Development <dri-devel@lists.freedesktop.org> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>, Daniel Vetter <daniel.vetter@ffwll.ch>, Chris Wilson <chris@chris-wilson.co.uk>, Sumit Semwal <sumit.semwal@linaro.org>, Gustavo Padovan <gustavo@padovan.org>, linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org Subject: [PATCH 04/15] dma-fence: Make ->wait callback optional Date: Thu, 3 May 2018 16:25:52 +0200 [thread overview] Message-ID: <20180503142603.28513-5-daniel.vetter@ffwll.ch> (raw) In-Reply-To: <20180503142603.28513-1-daniel.vetter@ffwll.ch> 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: Daniel 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 --- drivers/dma-buf/dma-fence-array.c | 1 - drivers/dma-buf/dma-fence.c | 8 +++++--- drivers/dma-buf/sw_sync.c | 1 - include/linux/dma-fence.h | 13 ++++++++----- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/dma-buf/dma-fence-array.c b/drivers/dma-buf/dma-fence-array.c index dd1edfb27b61..a8c254497251 100644 --- a/drivers/dma-buf/dma-fence-array.c +++ b/drivers/dma-buf/dma-fence-array.c @@ -104,7 +104,6 @@ const struct dma_fence_ops dma_fence_array_ops = { .get_timeline_name = dma_fence_array_get_timeline_name, .enable_signaling = dma_fence_array_enable_signaling, .signaled = dma_fence_array_signaled, - .wait = dma_fence_default_wait, .release = dma_fence_array_release, }; EXPORT_SYMBOL(dma_fence_array_ops); diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index 59049375bd19..41ec19c9efc7 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -158,7 +158,10 @@ dma_fence_wait_timeout(struct dma_fence *fence, bool intr, signed long timeout) return -EINVAL; trace_dma_fence_wait_start(fence); - ret = fence->ops->wait(fence, intr, timeout); + if (fence->ops->wait) + ret = fence->ops->wait(fence, intr, timeout); + else + ret = dma_fence_default_wait(fence, intr, timeout); trace_dma_fence_wait_end(fence); return ret; } @@ -562,8 +565,7 @@ dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops, spinlock_t *lock, u64 context, unsigned seqno) { BUG_ON(!lock); - BUG_ON(!ops || !ops->wait || - !ops->get_driver_name || !ops->get_timeline_name); + BUG_ON(!ops || !ops->get_driver_name || !ops->get_timeline_name); kref_init(&fence->refcount); fence->ops = ops; diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c index 3d78ca89a605..53c1d6d36a64 100644 --- a/drivers/dma-buf/sw_sync.c +++ b/drivers/dma-buf/sw_sync.c @@ -188,7 +188,6 @@ static const struct dma_fence_ops timeline_fence_ops = { .get_timeline_name = timeline_fence_get_timeline_name, .enable_signaling = timeline_fence_enable_signaling, .signaled = timeline_fence_signaled, - .wait = dma_fence_default_wait, .release = timeline_fence_release, .fence_value_str = timeline_fence_value_str, .timeline_value_str = timeline_fence_timeline_value_str, diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index c053d19e1e24..02dba8cd033d 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h @@ -191,11 +191,14 @@ struct dma_fence_ops { /** * @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 - * as enable_signaling works correctly. + * The dma_fence_default_wait implementation should work for any fence, as long + * as @enable_signaling works correctly. This hook allows drivers to + * 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 * interrupted, and remaining jiffies if fence has signaled, or 0 if wait @@ -203,7 +206,7 @@ struct dma_fence_ops { * which should be treated as if the fence is signaled. For example a hardware * lockup could be reported like that. * - * This callback is mandatory. + * This callback is optional. */ signed long (*wait)(struct dma_fence *fence, bool intr, signed long timeout); -- 2.17.0
WARNING: multiple messages have this Message-ID (diff)
From: Daniel Vetter <daniel.vetter@ffwll.ch> To: DRI Development <dri-devel@lists.freedesktop.org> Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>, linaro-mm-sig@lists.linaro.org, Daniel Vetter <daniel.vetter@ffwll.ch>, Sumit Semwal <sumit.semwal@linaro.org>, linux-media@vger.kernel.org Subject: [PATCH 04/15] dma-fence: Make ->wait callback optional Date: Thu, 3 May 2018 16:25:52 +0200 [thread overview] Message-ID: <20180503142603.28513-5-daniel.vetter@ffwll.ch> (raw) In-Reply-To: <20180503142603.28513-1-daniel.vetter@ffwll.ch> 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: Daniel 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 --- drivers/dma-buf/dma-fence-array.c | 1 - drivers/dma-buf/dma-fence.c | 8 +++++--- drivers/dma-buf/sw_sync.c | 1 - include/linux/dma-fence.h | 13 ++++++++----- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/drivers/dma-buf/dma-fence-array.c b/drivers/dma-buf/dma-fence-array.c index dd1edfb27b61..a8c254497251 100644 --- a/drivers/dma-buf/dma-fence-array.c +++ b/drivers/dma-buf/dma-fence-array.c @@ -104,7 +104,6 @@ const struct dma_fence_ops dma_fence_array_ops = { .get_timeline_name = dma_fence_array_get_timeline_name, .enable_signaling = dma_fence_array_enable_signaling, .signaled = dma_fence_array_signaled, - .wait = dma_fence_default_wait, .release = dma_fence_array_release, }; EXPORT_SYMBOL(dma_fence_array_ops); diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index 59049375bd19..41ec19c9efc7 100644 --- a/drivers/dma-buf/dma-fence.c +++ b/drivers/dma-buf/dma-fence.c @@ -158,7 +158,10 @@ dma_fence_wait_timeout(struct dma_fence *fence, bool intr, signed long timeout) return -EINVAL; trace_dma_fence_wait_start(fence); - ret = fence->ops->wait(fence, intr, timeout); + if (fence->ops->wait) + ret = fence->ops->wait(fence, intr, timeout); + else + ret = dma_fence_default_wait(fence, intr, timeout); trace_dma_fence_wait_end(fence); return ret; } @@ -562,8 +565,7 @@ dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops, spinlock_t *lock, u64 context, unsigned seqno) { BUG_ON(!lock); - BUG_ON(!ops || !ops->wait || - !ops->get_driver_name || !ops->get_timeline_name); + BUG_ON(!ops || !ops->get_driver_name || !ops->get_timeline_name); kref_init(&fence->refcount); fence->ops = ops; diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c index 3d78ca89a605..53c1d6d36a64 100644 --- a/drivers/dma-buf/sw_sync.c +++ b/drivers/dma-buf/sw_sync.c @@ -188,7 +188,6 @@ static const struct dma_fence_ops timeline_fence_ops = { .get_timeline_name = timeline_fence_get_timeline_name, .enable_signaling = timeline_fence_enable_signaling, .signaled = timeline_fence_signaled, - .wait = dma_fence_default_wait, .release = timeline_fence_release, .fence_value_str = timeline_fence_value_str, .timeline_value_str = timeline_fence_timeline_value_str, diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index c053d19e1e24..02dba8cd033d 100644 --- a/include/linux/dma-fence.h +++ b/include/linux/dma-fence.h @@ -191,11 +191,14 @@ struct dma_fence_ops { /** * @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 - * as enable_signaling works correctly. + * The dma_fence_default_wait implementation should work for any fence, as long + * as @enable_signaling works correctly. This hook allows drivers to + * 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 * interrupted, and remaining jiffies if fence has signaled, or 0 if wait @@ -203,7 +206,7 @@ struct dma_fence_ops { * which should be treated as if the fence is signaled. For example a hardware * lockup could be reported like that. * - * This callback is mandatory. + * This callback is optional. */ signed long (*wait)(struct dma_fence *fence, bool intr, signed long timeout); -- 2.17.0 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2018-05-03 14:26 UTC|newest] Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-05-03 14:25 [PATCH 00/15] dma-fence cleanup v2 Daniel Vetter 2018-05-03 14:25 ` [PATCH 01/15] dma-fence: remove fill_driver_data callback Daniel Vetter 2018-05-03 14:25 ` [PATCH 02/15] dma-fence: Make ->enable_signaling optional Daniel Vetter 2018-05-03 14:25 ` Daniel Vetter 2018-05-03 15:51 ` Chris Wilson 2018-05-03 15:51 ` Chris Wilson 2018-05-04 14:10 ` [PATCH] " Daniel Vetter 2018-05-04 14:10 ` Daniel Vetter 2018-05-07 9:35 ` Maarten Lankhorst 2018-05-07 9:35 ` Maarten Lankhorst 2018-05-03 14:25 ` [PATCH 03/15] dma-fence: Allow wait_any_timeout for all fences Daniel Vetter 2018-05-03 14:25 ` Daniel Vetter 2018-05-03 14:25 ` Daniel Vetter [this message] 2018-05-03 14:25 ` [PATCH 04/15] dma-fence: Make ->wait callback optional Daniel Vetter 2018-05-04 8:09 ` Chris Wilson 2018-05-04 8:09 ` Chris Wilson 2018-05-04 8:17 ` Daniel Vetter 2018-05-04 8:17 ` Daniel Vetter 2018-05-04 8:23 ` Daniel Vetter 2018-05-04 8:23 ` Daniel Vetter 2018-05-04 8:31 ` Chris Wilson 2018-05-04 8:57 ` Daniel Vetter 2018-05-04 8:57 ` Daniel Vetter 2018-05-04 9:16 ` Chris Wilson 2018-05-04 9:25 ` Daniel Vetter 2018-05-04 9:25 ` Daniel Vetter 2018-05-04 13:17 ` Christian König 2018-05-04 13:17 ` Christian König 2018-05-04 13:47 ` Daniel Vetter 2018-05-04 13:47 ` Daniel Vetter 2018-07-02 8:23 ` Daniel Vetter 2018-07-02 8:23 ` Daniel Vetter 2018-07-02 8:49 ` Christian König 2018-07-02 8:49 ` Christian König 2018-05-03 14:25 ` [PATCH 05/15] drm/amdgpu: Remove unecessary dma_fence_ops Daniel Vetter 2018-05-03 14:25 ` [PATCH 06/15] drm: " Daniel Vetter 2018-05-03 14:25 ` [PATCH 07/15] drm/etnaviv: " Daniel Vetter 2018-05-04 6:59 ` Christian Gmeiner 2018-05-03 14:25 ` [PATCH 08/15] drm/i915: " Daniel Vetter 2018-05-04 14:09 ` [PATCH] " Daniel Vetter [not found] ` <20180503142603.28513-1-daniel.vetter-/w4YWyX8dFk@public.gmane.org> 2018-05-03 14:25 ` [PATCH 09/15] drm/msm: " Daniel Vetter [not found] ` <20180503142603.28513-10-daniel.vetter-/w4YWyX8dFk@public.gmane.org> 2018-05-04 14:09 ` [PATCH] " Daniel Vetter 2018-05-03 14:25 ` [PATCH 10/15] drm/nouveau: " Daniel Vetter 2018-05-03 14:25 ` [PATCH 11/15] drm/qxl: " Daniel Vetter 2018-05-03 14:26 ` [PATCH 12/15] drm/vc4: " Daniel Vetter 2018-05-04 14:09 ` [PATCH] " Daniel Vetter 2018-05-03 14:26 ` [PATCH 13/15] drm/vgem: " Daniel Vetter 2018-05-03 14:26 ` [PATCH 14/15] drm/virtio: " Daniel Vetter 2018-07-03 11:14 ` Daniel Vetter 2018-07-03 11:14 ` Daniel Vetter 2018-05-03 14:26 ` [PATCH 15/15] dma-fence: Polish kernel-doc for dma-fence.c Daniel Vetter 2018-05-03 14:26 ` Daniel Vetter 2018-05-04 14:06 ` [PATCH] " Daniel Vetter 2018-05-04 14:06 ` Daniel Vetter 2018-05-03 15:47 ` ✗ Fi.CI.CHECKPATCH: warning for dma-fence cleanup v2 Patchwork 2018-05-03 16:02 ` ✓ Fi.CI.BAT: success " Patchwork 2018-05-03 21:12 ` ✓ Fi.CI.IGT: " Patchwork 2018-05-04 14:09 ` ✗ Fi.CI.BAT: failure for dma-fence cleanup v2 (rev3) Patchwork 2018-05-04 14:14 ` ✗ Fi.CI.CHECKPATCH: warning for dma-fence cleanup v2 (rev6) Patchwork 2018-05-04 14:28 ` ✓ Fi.CI.BAT: success " Patchwork 2018-05-04 16:02 ` ✓ Fi.CI.IGT: " Patchwork
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180503142603.28513-5-daniel.vetter@ffwll.ch \ --to=daniel.vetter@ffwll.ch \ --cc=chris@chris-wilson.co.uk \ --cc=dri-devel@lists.freedesktop.org \ --cc=gustavo@padovan.org \ --cc=intel-gfx@lists.freedesktop.org \ --cc=linaro-mm-sig@lists.linaro.org \ --cc=linux-media@vger.kernel.org \ --cc=sumit.semwal@linaro.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.