提交 88eb92cb 编写于 作者: T Thomas Petazzoni

dma: mv_xor: add missing free_irq() call

Even though the driver cannot be unloaded at the moment, it is still
good to properly free the IRQ handlers in the channel removal function.
Signed-off-by: NThomas Petazzoni <thomas.petazzoni@free-electrons.com>
上级 b503fa01
...@@ -1082,6 +1082,8 @@ static int mv_xor_channel_remove(struct mv_xor_chan *mv_chan) ...@@ -1082,6 +1082,8 @@ static int mv_xor_channel_remove(struct mv_xor_chan *mv_chan)
list_del(&chan->device_node); list_del(&chan->device_node);
} }
free_irq(mv_chan->irq, mv_chan);
return 0; return 0;
} }
...@@ -1101,6 +1103,7 @@ mv_xor_channel_add(struct mv_xor_device *xordev, ...@@ -1101,6 +1103,7 @@ mv_xor_channel_add(struct mv_xor_device *xordev,
} }
mv_chan->idx = idx; mv_chan->idx = idx;
mv_chan->irq = irq;
dma_dev = &mv_chan->dmadev; dma_dev = &mv_chan->dmadev;
...@@ -1147,7 +1150,7 @@ mv_xor_channel_add(struct mv_xor_device *xordev, ...@@ -1147,7 +1150,7 @@ mv_xor_channel_add(struct mv_xor_device *xordev,
/* clear errors before enabling interrupts */ /* clear errors before enabling interrupts */
mv_xor_device_clear_err_status(mv_chan); mv_xor_device_clear_err_status(mv_chan);
ret = devm_request_irq(&pdev->dev, irq, ret = devm_request_irq(&pdev->dev, mv_chan->irq,
mv_xor_interrupt_handler, mv_xor_interrupt_handler,
0, dev_name(&pdev->dev), mv_chan); 0, dev_name(&pdev->dev), mv_chan);
if (ret) if (ret)
......
...@@ -81,6 +81,7 @@ struct mv_xor_chan { ...@@ -81,6 +81,7 @@ struct mv_xor_chan {
spinlock_t lock; /* protects the descriptor slot pool */ spinlock_t lock; /* protects the descriptor slot pool */
void __iomem *mmr_base; void __iomem *mmr_base;
unsigned int idx; unsigned int idx;
int irq;
enum dma_transaction_type current_type; enum dma_transaction_type current_type;
struct list_head chain; struct list_head chain;
struct list_head completed_slots; struct list_head completed_slots;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册