Re: [PATCH v3 07/16] media: coda: stop all queues in case of lockup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Javier,

Am Montag, den 03.09.2012, 14:18 +0200 schrieb javier Martin:
> On 31 August 2012 10:11, Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> wrote:
> > Add a 1 second timeout for each PIC_RUN command to the CODA. In
> > case it locks up, stop all queues and dequeue remaining buffers.
> >
> > Signed-off-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx>
> > ---
> > Changes since v2:
> >  - Call cancel_delayed_work in coda_stop_streaming instead of coda_irq_handler.
> > ---
> >  drivers/media/platform/coda.c |   21 +++++++++++++++++++++
> >  1 file changed, 21 insertions(+)
> >
> > diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c
> > index 7bc2d87..6e3f026 100644
> > --- a/drivers/media/platform/coda.c
> > +++ b/drivers/media/platform/coda.c
> > @@ -137,6 +137,7 @@ struct coda_dev {
> >         struct vb2_alloc_ctx    *alloc_ctx;
> >         struct list_head        instances;
> >         unsigned long           instance_mask;
> > +       struct delayed_work     timeout;
> >  };
> >
> >  struct coda_params {
> > @@ -723,6 +724,9 @@ static void coda_device_run(void *m2m_priv)
> >                                 CODA7_REG_BIT_AXI_SRAM_USE);
> >         }
> >
> > +       /* 1 second timeout in case CODA locks up */
> > +       schedule_delayed_work(&dev->timeout, HZ);
> > +
> >         coda_command_async(ctx, CODA_COMMAND_PIC_RUN);
> >  }
> >
> > @@ -1221,6 +1225,8 @@ static int coda_stop_streaming(struct vb2_queue *q)
> >         }
> >
> >         if (!ctx->rawstreamon && !ctx->compstreamon) {
> > +               cancel_delayed_work(&dev->timeout);
> > +
> 
> Since 'schedule_delayed_work()' is called for each frame and
> 'cancel_delayed_work()' is called only when stopping the streaming,
> the timeout will always trigger after 1 second.
> I can confirm this due some tests where I always get this message
> after one second:  coda coda-imx27.0: CODA PIC_RUN timeout, stopping
> all streams

Yes, removing the __cancel_delayed_work in coda_irq_handler was a
mistake.

> Please find some of my doubts below:
> 
> Do we really need this patch? Couldn't you just use
> 'coda_command_sync()' for CODA_COMMAND_PIC_RUN? Why did you changed
> 'cancel_delayed_work()' from the IRQ to stop streaming? I think the
> former was correct, wasn't it?

Ideally, the CODA shouldn't hang. I've seen it happen, though - whether
because of firmware or driver bugs I couldn't say.

Using coda_command_sync would mean spinning in coda_wait_timeout all the
time. I guess we could put device_run to sleep with
wait_for_completion_interruptible_timeout and just complete the
completion in the irq handler.

regards
Philipp

--
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


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux