diff mbox

[SRU,Zesty,1/1] dma-buf: avoid scheduling on fence status query v2

Message ID 1502884784-24775-1-git-send-email-alberto.milone@canonical.com
State New
Headers show

Commit Message

Alberto Milone Aug. 16, 2017, 11:59 a.m. UTC
From: Andres Rodriguez <andresx7@gmail.com>

When a timeout of zero is specified, the caller is only interested in
the fence status.

In the current implementation, dma_fence_default_wait will always call
schedule_timeout() at least once for an unsignaled fence. This adds a
significant overhead to a fence status query.

Avoid this overhead by returning early if a zero timeout is specified.

v2: move early return after enable_signaling

Signed-off-by: Andres Rodriguez <andresx7@gmail.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170426144620.3560-1-andresx7@gmail.com

BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711096

(cherry-picked from commit 03c0c5f6641533f5fc14bf4e76d2304197402552)
Signed-off-by: Alberto Milone <alberto.milone@canonical.com>
---
 drivers/dma-buf/dma-fence.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Kleber Sacilotto de Souza Aug. 17, 2017, 4:01 p.m. UTC | #1
On 08/16/17 13:59, Alberto Milone wrote:
> From: Andres Rodriguez <andresx7@gmail.com>
> 
> When a timeout of zero is specified, the caller is only interested in
> the fence status.
> 
> In the current implementation, dma_fence_default_wait will always call
> schedule_timeout() at least once for an unsignaled fence. This adds a
> significant overhead to a fence status query.
> 
> Avoid this overhead by returning early if a zero timeout is specified.
> 
> v2: move early return after enable_signaling
> 
> Signed-off-by: Andres Rodriguez <andresx7@gmail.com>
> Reviewed-by: Christian König <christian.koenig@amd.com>
> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.com>
> Link: http://patchwork.freedesktop.org/patch/msgid/20170426144620.3560-1-andresx7@gmail.com
> 
> BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711096
> 
> (cherry-picked from commit 03c0c5f6641533f5fc14bf4e76d2304197402552)
> Signed-off-by: Alberto Milone <alberto.milone@canonical.com>
> ---

Clean cherry pick, seems to be a reasonable performance fix.

My only comment is about the BugLink, which needs to be in the format
"http://bugs.launchpad.net/bugs/<bug-id>", and not in the expanded
format. But this can be fixed when applying the patch.

Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>


>  drivers/dma-buf/dma-fence.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
> index 0212af7..96b3221 100644
> --- a/drivers/dma-buf/dma-fence.c
> +++ b/drivers/dma-buf/dma-fence.c
> @@ -373,6 +373,11 @@ dma_fence_default_wait(struct dma_fence *fence, bool intr, signed long timeout)
>  		}
>  	}
>  
> +	if (!timeout) {
> +		ret = 0;
> +		goto out;
> +	}
> +
>  	cb.base.func = dma_fence_default_wait_cb;
>  	cb.task = current;
>  	list_add(&cb.base.node, &fence->cb_list);
>
Stefan Bader Aug. 18, 2017, 12:52 p.m. UTC | #2
On 16.08.2017 13:59, Alberto Milone wrote:
> From: Andres Rodriguez <andresx7@gmail.com>
> 
> When a timeout of zero is specified, the caller is only interested in
> the fence status.
> 
> In the current implementation, dma_fence_default_wait will always call
> schedule_timeout() at least once for an unsignaled fence. This adds a
> significant overhead to a fence status query.
> 
> Avoid this overhead by returning early if a zero timeout is specified.
> 
> v2: move early return after enable_signaling
> 
> Signed-off-by: Andres Rodriguez <andresx7@gmail.com>
> Reviewed-by: Christian König <christian.koenig@amd.com>
> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.com>
> Link: http://patchwork.freedesktop.org/patch/msgid/20170426144620.3560-1-andresx7@gmail.com
> 
> BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711096
> 
> (cherry-picked from commit 03c0c5f6641533f5fc14bf4e76d2304197402552)
> Signed-off-by: Alberto Milone <alberto.milone@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>

> ---

Same BugLink update as in other submission.

>  drivers/dma-buf/dma-fence.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
> index 0212af7..96b3221 100644
> --- a/drivers/dma-buf/dma-fence.c
> +++ b/drivers/dma-buf/dma-fence.c
> @@ -373,6 +373,11 @@ dma_fence_default_wait(struct dma_fence *fence, bool intr, signed long timeout)
>  		}
>  	}
>  
> +	if (!timeout) {
> +		ret = 0;
> +		goto out;
> +	}
> +
>  	cb.base.func = dma_fence_default_wait_cb;
>  	cb.task = current;
>  	list_add(&cb.base.node, &fence->cb_list);
>
Seth Forshee Aug. 23, 2017, 12:19 p.m. UTC | #3
On Wed, Aug 16, 2017 at 01:59:44PM +0200, Alberto Milone wrote:
> From: Andres Rodriguez <andresx7@gmail.com>
> 
> When a timeout of zero is specified, the caller is only interested in
> the fence status.
> 
> In the current implementation, dma_fence_default_wait will always call
> schedule_timeout() at least once for an unsignaled fence. This adds a
> significant overhead to a fence status query.
> 
> Avoid this overhead by returning early if a zero timeout is specified.
> 
> v2: move early return after enable_signaling
> 
> Signed-off-by: Andres Rodriguez <andresx7@gmail.com>
> Reviewed-by: Christian König <christian.koenig@amd.com>
> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.com>
> Link: http://patchwork.freedesktop.org/patch/msgid/20170426144620.3560-1-andresx7@gmail.com
> 
> BugLink: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711096
> 
> (cherry-picked from commit 03c0c5f6641533f5fc14bf4e76d2304197402552)
> Signed-off-by: Alberto Milone <alberto.milone@canonical.com>

Applied to artful/master-next, thanks.
Kleber Sacilotto de Souza Aug. 24, 2017, 9:44 a.m. UTC | #4
Applied to zesty/master-next branch. Thanks.
diff mbox

Patch

diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
index 0212af7..96b3221 100644
--- a/drivers/dma-buf/dma-fence.c
+++ b/drivers/dma-buf/dma-fence.c
@@ -373,6 +373,11 @@  dma_fence_default_wait(struct dma_fence *fence, bool intr, signed long timeout)
 		}
 	}
 
+	if (!timeout) {
+		ret = 0;
+		goto out;
+	}
+
 	cb.base.func = dma_fence_default_wait_cb;
 	cb.task = current;
 	list_add(&cb.base.node, &fence->cb_list);