• Michael Tretter's avatar
    media: vb2: reorder checks in vb2_poll() · 8d86a156
    Michael Tretter authored
    When reaching the end of stream, V4L2 clients may expect the
    V4L2_EOS_EVENT before being able to dequeue the last buffer, which has
    the V4L2_BUF_FLAG_LAST flag set.
    
    If the vb2_poll() function first checks for events and afterwards if
    buffers are available, a driver can queue the V4L2_EOS_EVENT event and
    return the buffer after the check for events but before the check for
    buffers. This causes vb2_poll() to signal that the buffer with
    V4L2_BUF_FLAG_LAST can be read without the V4L2_EOS_EVENT being
    available.
    
    First, check for available buffers and afterwards for events to ensure
    that if vb2_poll() signals POLLIN | POLLRDNORM for the
    V4L2_BUF_FLAG_LAST buffer, it also signals POLLPRI for the
    V4L2_EOS_EVENT.
    Signed-off-by: default avatarMichael Tretter <m.tretter@pengutronix.de>
    Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
    8d86a156
videobuf2-v4l2.c 32.8 KB