Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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_output *output = (struct ddb_output *)dma->io;
	struct ddb *dev = output->port->dev;
	unsigned long flags;

	spin_lock(&dma->lock);
	if (!dma->running) {
		spin_unlock(&dma->lock);
		return;
	}
	spin_lock_irqsave(&dma->lock, flags);
	if (!dma->running)
		goto unlock_exit;
	dma->stat = ddbreadl(dev, DMA_BUFFER_CURRENT(dma));
	dma->ctrl = ddbreadl(dev, DMA_BUFFER_CONTROL(dma));
	if (output->redi)
		output_ack_input(output, output->redi);
	wake_up(&dma->wq);
	spin_unlock(&dma->lock);
unlock_exit:
	spin_unlock_irqrestore(&dma->lock, flags);
}

static void output_handler(void *data)