gpu: ipu-v3: image-convert: Allow reentrancy into abort
Allow reentrancy into ipu_image_convert_abort(), by moving re-init of ctx->aborted completion under the spin lock, and only if there is an active run, and complete all waiters do_bh(). Note: ipu_image_convert_unprepare() is still _not_ reentrant, and can't be made reentrant. Signed-off-by: Steve Longerbeam <slongerbeam@gmail.com> Tested-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
This commit is contained in:
parent
920340ae1f
commit
aa60b261c6
@ -896,7 +896,7 @@ static irqreturn_t do_bh(int irq, void *dev_id)
|
|||||||
dev_dbg(priv->ipu->dev,
|
dev_dbg(priv->ipu->dev,
|
||||||
"%s: task %u: signaling abort for ctx %p\n",
|
"%s: task %u: signaling abort for ctx %p\n",
|
||||||
__func__, chan->ic_task, ctx);
|
__func__, chan->ic_task, ctx);
|
||||||
complete(&ctx->aborted);
|
complete_all(&ctx->aborted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1533,8 +1533,6 @@ static void __ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx)
|
|||||||
int run_count, ret;
|
int run_count, ret;
|
||||||
bool need_abort;
|
bool need_abort;
|
||||||
|
|
||||||
reinit_completion(&ctx->aborted);
|
|
||||||
|
|
||||||
spin_lock_irqsave(&chan->irqlock, flags);
|
spin_lock_irqsave(&chan->irqlock, flags);
|
||||||
|
|
||||||
/* move all remaining pending runs in this context to done_q */
|
/* move all remaining pending runs in this context to done_q */
|
||||||
@ -1549,6 +1547,9 @@ static void __ipu_image_convert_abort(struct ipu_image_convert_ctx *ctx)
|
|||||||
active_run = (chan->current_run && chan->current_run->ctx == ctx) ?
|
active_run = (chan->current_run && chan->current_run->ctx == ctx) ?
|
||||||
chan->current_run : NULL;
|
chan->current_run : NULL;
|
||||||
|
|
||||||
|
if (active_run)
|
||||||
|
reinit_completion(&ctx->aborted);
|
||||||
|
|
||||||
need_abort = (run_count || active_run);
|
need_abort = (run_count || active_run);
|
||||||
|
|
||||||
ctx->aborting = true;
|
ctx->aborting = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user