Message ID | 1479457603-30758-1-git-send-email-gustavo@padovan.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Nov 18, 2016 at 05:26:43PM +0900, Gustavo Padovan wrote: > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk> > > This reverts commit ecebca79f6976ddaddfd054d699272515869ea28. > > Do not enable fence callback on poll() when using fence_array causes the > fence_array to not signal. > > For now we will revert the change and enable signaling everytime time > poll is called with timeout=0 as well. > > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Acked-by: Chris Wilson <chris@chris-wilson.co.uk> I have some patches to use a bit on fence_array->flags to indicate where we can use this shortcut. I'm hoping someone has a better idea. -Chris
On Fri, Nov 18, 2016 at 08:56:11AM +0000, Chris Wilson wrote: > On Fri, Nov 18, 2016 at 05:26:43PM +0900, Gustavo Padovan wrote: > > From: Gustavo Padovan <gustavo.padovan@collabora.co.uk> > > > > This reverts commit ecebca79f6976ddaddfd054d699272515869ea28. > > > > Do not enable fence callback on poll() when using fence_array causes the > > fence_array to not signal. > > > > For now we will revert the change and enable signaling everytime time > > poll is called with timeout=0 as well. > > > > Cc: Chris Wilson <chris@chris-wilson.co.uk> > > Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> > > Acked-by: Chris Wilson <chris@chris-wilson.co.uk> Applied to drm-misc. > I have some patches to use a bit on fence_array->flags to indicate where > we can use this shortcut. I'm hoping someone has a better idea. Fundamentally this is a property of how the fence is implemented. A flag indicating that this fence will eventually signal, even when enable_signalling isn't called seems like a perfectly ok approach. We might want to spell out the different expectations clearly though, i.e. if you block on a fence you must still call ->enable_signalling for prompt signalling (and maybe it's needed to handle blocking waits or whatever). -Daniel
diff --git a/drivers/dma-buf/sync_file.c b/drivers/dma-buf/sync_file.c index 69d8ef9..6d802f2 100644 --- a/drivers/dma-buf/sync_file.c +++ b/drivers/dma-buf/sync_file.c @@ -308,8 +308,7 @@ static unsigned int sync_file_poll(struct file *file, poll_table *wait) poll_wait(file, &sync_file->wq, wait); - if (!poll_does_not_wait(wait) && - !test_and_set_bit(POLL_ENABLED, &sync_file->fence->flags)) { + if (!test_and_set_bit(POLL_ENABLED, &sync_file->fence->flags)) { if (dma_fence_add_callback(sync_file->fence, &sync_file->cb, fence_check_cb_func) < 0) wake_up_all(&sync_file->wq);