[media] coda: do not call v4l2_m2m_job_finish from .job_abort
authorPhilipp Zabel <p.zabel@pengutronix.de>
Thu, 23 May 2013 13:43:01 +0000 (10:43 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 8 Jun 2013 22:46:27 +0000 (19:46 -0300)
If we just declare the job finished here while the CODA is still
running, the call to v4l2_m2m_ctx_release in coda_release, which
is supposed to wait for a running job to finish, will return
immediately and free memory that the CODA is still using.
Just set the 'aborting' flag and let coda_irq_handler deal with it.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Kamil Debski <k.debski@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/platform/coda.c

index f9c4014ee40c3a215a1e11eef499a1d3297ace1c..c4566c4477747c80a0abfdd729571a9e973a1eda 100644 (file)
@@ -812,6 +812,12 @@ static int coda_job_ready(void *m2m_priv)
                return 0;
        }
 
+       if (ctx->aborting) {
+               v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
+                        "not ready: aborting\n");
+               return 0;
+       }
+
        v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
                        "job ready\n");
        return 1;
@@ -820,14 +826,11 @@ static int coda_job_ready(void *m2m_priv)
 static void coda_job_abort(void *priv)
 {
        struct coda_ctx *ctx = priv;
-       struct coda_dev *dev = ctx->dev;
 
        ctx->aborting = 1;
 
        v4l2_dbg(1, coda_debug, &ctx->dev->v4l2_dev,
                 "Aborting task\n");
-
-       v4l2_m2m_job_finish(dev->m2m_dev, ctx->m2m_ctx);
 }
 
 static void coda_lock(void *m2m_priv)