diff --git a/patches.drivers/dma-fence-Make-wait-callback-optional-2.patch b/patches.drivers/dma-fence-Make-wait-callback-optional-2.patch new file mode 100644 index 0000000..e7b6771 --- /dev/null +++ b/patches.drivers/dma-fence-Make-wait-callback-optional-2.patch @@ -0,0 +1,117 @@ +From 418cc6ca06071e7b7d75c0d525d80a6f49a763d6 Mon Sep 17 00:00:00 2001 +From: Daniel Vetter +Date: Thu, 3 May 2018 16:25:52 +0200 +Subject: [PATCH] dma-fence: Make ->wait callback optional +Mime-version: 1.0 +Content-type: text/plain; charset=UTF-8 +Content-transfer-encoding: 8bit +Git-commit: 418cc6ca06071e7b7d75c0d525d80a6f49a763d6 +Patch-mainline: v4.19-rc1 +References: bsc#794563 + +Almost everyone uses dma_fence_default_wait. + +V2: Also remove the BUG_ON(!ops->wait) (Chris). + +Reviewed-by: Christian König (v1) +Signed-off-by: Daniel Vetter +Cc: Chris Wilson +Cc: Sumit Semwal +Cc: Gustavo Padovan +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 +Acked-by: Takashi Iwai + +--- + 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 ea343f992112..7a92f85a4cec 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; + } +@@ -556,8 +559,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.20.1 + diff --git a/series.conf b/series.conf index 80acc36..d1c432a 100644 --- a/series.conf +++ b/series.conf @@ -36560,6 +36560,7 @@ patches.drm/7890-drm-vmwgfx-use-drm_plane_mask-co patches.drm/7891-drm-fix-hdmi-connector-content-type-property-docs patches.drm/7892-drm-add-missing-ctx-argument-to-plane-transitional-helpers + patches.drivers/dma-fence-Make-wait-callback-optional-2.patch patches.drm/7893-drm-amdgpu-remove-unecessary-dma_fence_ops patches.drm/7894-drm-remove-unecessary-dma_fence_ops patches.drm/7895-drm-etnaviv-remove-unecessary-dma_fence_ops