Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] vb2: return ENOBUFS in start_streaming in case of too few buffers

This works together with the retry_start_streaming mechanism to allow userspace
to start streaming even if not all required buffers have been queued.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Cc: Tomasz Stanislawski <t.stanislaws@samsung.com>
Cc: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Kamil Debski <k.debski@samsung.com>
Acked-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>

authored by

Hans Verkuil and committed by
Mauro Carvalho Chehab
79aeb3f3 c108e660

+8 -6
+1 -1
drivers/media/platform/davinci/vpbe_display.c
··· 347 347 /* If buffer queue is empty, return error */ 348 348 if (list_empty(&layer->dma_queue)) { 349 349 v4l2_err(&vpbe_dev->v4l2_dev, "buffer queue is empty\n"); 350 - return -EINVAL; 350 + return -ENOBUFS; 351 351 } 352 352 /* Get the next frame from the buffer queue */ 353 353 layer->next_frm = layer->cur_frm = list_entry(layer->dma_queue.next,
+1 -1
drivers/media/platform/davinci/vpif_capture.c
··· 277 277 if (list_empty(&common->dma_queue)) { 278 278 spin_unlock_irqrestore(&common->irqlock, flags); 279 279 vpif_dbg(1, debug, "buffer queue is empty\n"); 280 - return -EIO; 280 + return -ENOBUFS; 281 281 } 282 282 283 283 /* Get the next frame from the buffer queue */
+1 -1
drivers/media/platform/davinci/vpif_display.c
··· 239 239 if (list_empty(&common->dma_queue)) { 240 240 spin_unlock_irqrestore(&common->irqlock, flags); 241 241 vpif_err("buffer queue is empty\n"); 242 - return -EIO; 242 + return -ENOBUFS; 243 243 } 244 244 245 245 /* Get the next frame from the buffer queue */
+1 -1
drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
··· 1863 1863 if (ctx->src_bufs_cnt < ctx->pb_count) { 1864 1864 mfc_err("Need minimum %d OUTPUT buffers\n", 1865 1865 ctx->pb_count); 1866 - return -EINVAL; 1866 + return -ENOBUFS; 1867 1867 } 1868 1868 } 1869 1869
+1 -1
drivers/media/platform/s5p-tv/mixer_video.c
··· 948 948 949 949 if (count == 0) { 950 950 mxr_dbg(mdev, "no output buffers queued\n"); 951 - return -EINVAL; 951 + return -ENOBUFS; 952 952 } 953 953 954 954 /* block any changes in output configuration */
+1 -1
drivers/media/platform/soc_camera/mx2_camera.c
··· 659 659 unsigned long flags; 660 660 661 661 if (count < 2) 662 - return -EINVAL; 662 + return -ENOBUFS; 663 663 664 664 spin_lock_irqsave(&pcdev->lock, flags); 665 665
+2
drivers/staging/media/davinci_vpfe/vpfe_video.c
··· 1201 1201 unsigned long addr; 1202 1202 int ret; 1203 1203 1204 + if (count == 0) 1205 + return -ENOBUFS; 1204 1206 ret = mutex_lock_interruptible(&video->lock); 1205 1207 if (ret) 1206 1208 goto streamoff;