• Laurent Pinchart's avatar
    [media] v4l: vb2: Add fatal error condition flag · 4bb7267d
    Laurent Pinchart authored
    When a fatal error occurs that render the device unusable, the only
    options for a driver to signal the error condition to userspace is to
    set the V4L2_BUF_FLAG_ERROR flag when dequeuing buffers and to return an
    error from the buffer prepare handler when queuing buffers.
    
    The buffer error flag indicates a transient error and can't be used by
    applications to detect fatal errors. Returning an error from vb2_qbuf()
    is thus the only real indication that a fatal error occurred. However,
    this is difficult to handle for multithreaded applications that requeue
    buffers from a thread other than the control thread. In particular the
    poll() call in the control thread will not notify userspace of the
    error.
    
    This patch adds an explicit mechanism to report fatal errors to
    userspace. Drivers can call the vb2_queue_error() function to signal a
    fatal error. From this moment on, buffer preparation will return -EIO to
    userspace, and vb2_poll() will set the POLLERR flag and return
    immediately. The error flag is cleared when cancelling the queue, either
    at stream off time (through vb2_streamoff) or when releasing the queue
    with vb2_queue_release().
    Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
    Acked-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
    4bb7267d
videobuf2-core.h 23.6 KB