From ae3d940fc6e9d70a9ad4654d3bb2f34138769860 Mon Sep 17 00:00:00 2001 From: Chuangcheng Peng Date: Thu, 29 Nov 2018 18:18:05 +0800 Subject: [PATCH] dvb:remove the deadlock risk for spin lock[1/1] PD#SWPL-2599 Problem: maybe the deadlock risk in the asyncfifo Solution: remove the spin lock in disable_irq Verify: Verify android p at x301 Change-Id: I3b61de07efa09837b6bfbd7c52f9dc6a867ae912 Signed-off-by: Chuangcheng Peng --- .../media_modules/stream_input/parser/hw_demux/aml_dmx.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/amlogic/media_modules/stream_input/parser/hw_demux/aml_dmx.c b/drivers/amlogic/media_modules/stream_input/parser/hw_demux/aml_dmx.c index 79dad708f0a5..378d9965b082 100644 --- a/drivers/amlogic/media_modules/stream_input/parser/hw_demux/aml_dmx.c +++ b/drivers/amlogic/media_modules/stream_input/parser/hw_demux/aml_dmx.c @@ -2365,11 +2365,16 @@ int async_fifo_init(struct aml_asyncfifo *afifo, int initirq, int async_fifo_deinit(struct aml_asyncfifo *afifo, int freeirq) { + struct aml_dvb *dvb = afifo->dvb; + unsigned long flags; + if (!afifo->init) return 0; + spin_lock_irqsave(&dvb->slock, flags); CLEAR_ASYNC_FIFO_REG_MASK(afifo->id, REG1, 1 << ASYNC_FIFO_FLUSH_EN); CLEAR_ASYNC_FIFO_REG_MASK(afifo->id, REG2, 1 << ASYNC_FIFO_FILL_EN); + spin_unlock_irqrestore(&dvb->slock, flags); asyncfifo_put_buffer(afifo); @@ -4548,11 +4553,12 @@ int aml_asyncfifo_hw_reset(struct aml_asyncfifo *afifo) if (!buf) return -1; - spin_lock_irqsave(&dvb->slock, flags); if (afifo->init) { src = afifo->source; async_fifo_deinit(afifo, 0); } + + spin_lock_irqsave(&dvb->slock, flags); ret = async_fifo_init(afifo, 0, len, buf); /* restore the source */ if (src != -1)