Hello, during the V4L2 brainstorm meeting in Norway we have concluded that streaming error handling in dqbuf is lacking a bit and might result in the application losing video buffers. V4L2 specification states that DQBUF should set errno to EIO in such cases: "EIO VIDIOC_DQBUF failed due to an internal error. Can also indicate temporary problems like signal loss. Note the driver might dequeue an (empty) buffer despite returning an error, or even stop capturing." There is a problem with this though. v4l2-ioctl.c code does not copy back v4l2_buffer fields to userspace on a failed ioctl invocation, i.e. when __video_do_ioctl() does not return 0, it jumps over the copy_to_user() code: /* ... */ err = __video_do_ioctl(file, cmd, parg); /* ... */ if (err < 0) goto out; /* ... */ if (copy_to_user((void __user *)arg, parg, _IOC_SIZE(cmd))) err = -EFAULT; /* ... */ out: This is fine in general, but in the case of DQBUF errors, the v4l2_buffer fields are not copied back. Because of that, the application does not have any means of discovering on which buffer the operation failed. So it cannot reuse that buffer, even despite the fact that the spec allows such behavior. This RFC proposes a modification to the DQBUF behavior in cases of internal (recoverable) errors to allow recovery from such situations. We propose a new flag for the v4l2_buffer "flags" field, "V4L2_BUF_FLAG_ERROR". There already exists a "V4L2_BUF_FLAG_DONE" flag, so to support older applications, the new flag should always be set together with it. Applications unaware of the new flag would simply display a corrupted frame, but we believe it is still a better solution than failing altogether. Old EIO behavior remains so the change is backwards compatible. I will post relevant V4L2 documentation updates after (if) this change is accepted. This series is rebased onto my recent videobuf clean-up and poll behavior patches. The series contains: [PATCH 1/2] v4l: Add a new ERROR flag for DQBUF after recoverable streaming errors [PATCH 2/2] v4l: videobuf: Add support for V4L2_BUF_FLAG_ERROR Best regards -- Pawel Osciak Linux Platform Group Samsung Poland R&D Center -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html