dma-buf/sync-file: Avoid enable fence signaling if poll(.timeout=0)
authorChris Wilson <chris@chris-wilson.co.uk>
Mon, 29 Aug 2016 18:16:13 +0000 (19:16 +0100)
committerSumit Semwal <sumit.semwal@linaro.org>
Tue, 13 Sep 2016 14:39:49 +0000 (20:09 +0530)
If we being polled with a timeout of zero, a nonblocking busy query,
we don't need to install any fence callbacks as we will not be waiting.
As we only install the callback once, the overhead comes from the atomic
bit test that also causes serialisation between threads.

Signed-off-by: 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: dri-devel@lists.freedesktop.org
Cc: linaro-mm-sig@lists.linaro.org
Reviewed-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20160829181613.30722-1-chris@chris-wilson.co.uk
drivers/dma-buf/sync_file.c

index 486d29c1a830d3f9fa1f81d4ae9f15b41563060c..abb5fdab75fdb0ec77478a48d32021232bcf56b8 100644 (file)
@@ -306,7 +306,8 @@ static unsigned int sync_file_poll(struct file *file, poll_table *wait)
 
        poll_wait(file, &sync_file->wq, wait);
 
-       if (!test_and_set_bit(POLL_ENABLED, &sync_file->fence->flags)) {
+       if (!poll_does_not_wait(wait) &&
+           !test_and_set_bit(POLL_ENABLED, &sync_file->fence->flags)) {
                if (fence_add_callback(sync_file->fence, &sync_file->cb,
                                       fence_check_cb_func) < 0)
                        wake_up_all(&sync_file->wq);