Commit e415eec4 authored by Daniel Scheller's avatar Daniel Scheller Committed by Mauro Carvalho Chehab

media: ddbridge: use spin_lock_irqsave() in output_work()

Make sure to save IRQ states before taking the dma lock, as already done
in it's input_work() counterpart.

Picked up from the upstream dddvb-0.9.33 release.
Signed-off-by: default avatarDaniel Scheller <d.scheller@gmx.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 285d490c
...@@ -2117,18 +2117,18 @@ static void output_work(struct work_struct *work) ...@@ -2117,18 +2117,18 @@ static void output_work(struct work_struct *work)
struct ddb_dma *dma = container_of(work, struct ddb_dma, work); struct ddb_dma *dma = container_of(work, struct ddb_dma, work);
struct ddb_output *output = (struct ddb_output *)dma->io; struct ddb_output *output = (struct ddb_output *)dma->io;
struct ddb *dev = output->port->dev; struct ddb *dev = output->port->dev;
unsigned long flags;
spin_lock(&dma->lock); spin_lock_irqsave(&dma->lock, flags);
if (!dma->running) { if (!dma->running)
spin_unlock(&dma->lock); goto unlock_exit;
return;
}
dma->stat = ddbreadl(dev, DMA_BUFFER_CURRENT(dma)); dma->stat = ddbreadl(dev, DMA_BUFFER_CURRENT(dma));
dma->ctrl = ddbreadl(dev, DMA_BUFFER_CONTROL(dma)); dma->ctrl = ddbreadl(dev, DMA_BUFFER_CONTROL(dma));
if (output->redi) if (output->redi)
output_ack_input(output, output->redi); output_ack_input(output, output->redi);
wake_up(&dma->wq); wake_up(&dma->wq);
spin_unlock(&dma->lock); unlock_exit:
spin_unlock_irqrestore(&dma->lock, flags);
} }
static void output_handler(void *data) static void output_handler(void *data)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment