Home Home > GIT Browse > SLE12-SP4
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2019-01-16 15:23:05 +0100
committerTakashi Iwai <tiwai@suse.de>2019-01-16 15:27:10 +0100
commit2f3a6d074af1eef6f34c1441c393ef109bbd2a95 (patch)
treea5ecef27962ad1286ee19545358631988f536bbf
parentfb80451a568386754d0a9e7bbd8bfcd6b87f1267 (diff)
dma-fence: Make ->wait callback optional (bsc#794563).rpm-4.12.14-29
-rw-r--r--patches.drivers/dma-fence-Make-wait-callback-optional-2.patch117
-rw-r--r--series.conf1
2 files changed, 118 insertions, 0 deletions
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 0000000000..e7b67717b9
--- /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 <daniel.vetter@ffwll.ch>
+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 <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
+Link: https://patchwork.freedesktop.org/patch/msgid/20180503142603.28513-5-daniel.vetter@ffwll.ch
+Acked-by: Takashi Iwai <tiwai@suse.de>
+
+---
+ 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 80acc365df..d1c432a4b3 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