Message ID | 1510768752-7588-1-git-send-email-jacopo+renesas@jmondi.org (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Hi Jacopo, Thanks for the patch. I think you could add this to v2 of your related set; that way it'll be easy to get the dependencies right. I don't think this is urgent either... On Wed, Nov 15, 2017 at 06:59:12PM +0100, Jacopo Mondi wrote: > videobuf2 core reports an error when not all buffers have been returned > to the framework: > > drivers/media/v4l2-core/videobuf2-core.c:1651 > WARN_ON(atomic_read(&q->owned_by_drv_count)) > > Fix this returning all buffers currently in capture queue. > > Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> > > --- > > I know I'm working to get rid of this driver, but while I was trying to have > it working again on mainline, I found this had to be fixed. > > Thanks > j > > --- > drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c b/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c > index 36762ec..9180a1d 100644 > --- a/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c > +++ b/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c > @@ -451,13 +451,18 @@ static void sh_mobile_ceu_stop_streaming(struct vb2_queue *q) > struct soc_camera_host *ici = to_soc_camera_host(icd->parent); > struct sh_mobile_ceu_dev *pcdev = ici->priv; > struct list_head *buf_head, *tmp; > + struct vb2_v4l2_buffer *vbuf; > > spin_lock_irq(&pcdev->lock); > > pcdev->active = NULL; > > - list_for_each_safe(buf_head, tmp, &pcdev->capture) > + list_for_each_safe(buf_head, tmp, &pcdev->capture) { > + vbuf = &list_entry(buf_head, struct sh_mobile_ceu_buffer, > + queue)->vb; > + vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE); This should be VB2_BUF_STATE_ERROR, as the hardware hasn't actually processed them, right? > list_del_init(buf_head); > + } > > spin_unlock_irq(&pcdev->lock); >
diff --git a/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c b/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c index 36762ec..9180a1d 100644 --- a/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c +++ b/drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c @@ -451,13 +451,18 @@ static void sh_mobile_ceu_stop_streaming(struct vb2_queue *q) struct soc_camera_host *ici = to_soc_camera_host(icd->parent); struct sh_mobile_ceu_dev *pcdev = ici->priv; struct list_head *buf_head, *tmp; + struct vb2_v4l2_buffer *vbuf; spin_lock_irq(&pcdev->lock); pcdev->active = NULL; - list_for_each_safe(buf_head, tmp, &pcdev->capture) + list_for_each_safe(buf_head, tmp, &pcdev->capture) { + vbuf = &list_entry(buf_head, struct sh_mobile_ceu_buffer, + queue)->vb; + vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE); list_del_init(buf_head); + } spin_unlock_irq(&pcdev->lock);
videobuf2 core reports an error when not all buffers have been returned to the framework: drivers/media/v4l2-core/videobuf2-core.c:1651 WARN_ON(atomic_read(&q->owned_by_drv_count)) Fix this returning all buffers currently in capture queue. Signed-off-by: Jacopo Mondi <jacopo+renesas@jmondi.org> --- I know I'm working to get rid of this driver, but while I was trying to have it working again on mainline, I found this had to be fixed. Thanks j --- drivers/media/platform/soc_camera/sh_mobile_ceu_camera.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) -- 2.7.4