On 05/08/2018 09:16 PM, Ezequiel Garcia wrote: > On Mon, 2018-05-07 at 14:07 +0200, Hans Verkuil wrote: >> On 04/05/18 22:06, Ezequiel Garcia wrote: >>> @@ -1421,15 +1505,40 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int index, void *pb) >>> trace_vb2_qbuf(q, vb); >>> >>> /* >>> - * If already streaming, give the buffer to driver for processing. >>> - * If not, the buffer will be given to driver on next streamon. >>> + * For explicit synchronization: If the fence didn't signal >>> + * yet we setup a callback to queue the buffer once the fence >>> + * signals and then return successfully. But if the fence >>> + * already signaled we lose the reference we held and queue the >>> + * buffer to the driver. >> >> What happens if the fence signaled an error? Is that error returned to userspace? >> (i.e. VIDIOC_QBUF will fail in that case) >> > > Hm, good question. If the fence signals with an error, we won't catch it apparently. > We should fix dma_fence_add_callback to know about signaled vs. error signaled. OK, so in the meantime we need a comment explaining this in the code. Perhaps as a FIXME or TODO. Regards, Hans