Message ID | 1423030563-2090-1-git-send-email-zhouqiao@marvell.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
On 4 February 2015 at 14:16, Qiao Zhou <zhouqiao@marvell.com> wrote: > Some dma channels may be reserved for other purpose in other layer, > like secure driver in EL2/EL3. PDMA driver can see the interrupt > status, but it should not try to handle related interrupt, since it > doesn't belong to PDMA driver in kernel. These interrupts should be > handled by corresponding client/module.Otherwise, it will overwrite > illegal memory and cause unexpected issues, since pdma driver only > requests resources for pdma channels. > > In PDMA driver, the reserved channels are at the end of total 32 > channels. If we find interrupt bit index is not smaller than total > dma channels, we should ignore it. > > Signed-off-by: Qiao Zhou <zhouqiao@marvell.com> Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org> Thanks for the patch. -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, Feb 04, 2015 at 02:16:03PM +0800, Qiao Zhou wrote: > Some dma channels may be reserved for other purpose in other layer, > like secure driver in EL2/EL3. PDMA driver can see the interrupt > status, but it should not try to handle related interrupt, since it > doesn't belong to PDMA driver in kernel. These interrupts should be > handled by corresponding client/module.Otherwise, it will overwrite > illegal memory and cause unexpected issues, since pdma driver only > requests resources for pdma channels. > > In PDMA driver, the reserved channels are at the end of total 32 > channels. If we find interrupt bit index is not smaller than total > dma channels, we should ignore it. Applied, now Thanks
diff --git a/drivers/dma/mmp_pdma.c b/drivers/dma/mmp_pdma.c index 8b8952f..68ab55f 100644 --- a/drivers/dma/mmp_pdma.c +++ b/drivers/dma/mmp_pdma.c @@ -219,6 +219,9 @@ static irqreturn_t mmp_pdma_int_handler(int irq, void *dev_id) while (dint) { i = __ffs(dint); + /* only handle interrupts belonging to pdma driver*/ + if (i >= pdev->dma_channels) + break; dint &= (dint - 1); phy = &pdev->phy[i]; ret = mmp_pdma_chan_handler(irq, phy);
Some dma channels may be reserved for other purpose in other layer, like secure driver in EL2/EL3. PDMA driver can see the interrupt status, but it should not try to handle related interrupt, since it doesn't belong to PDMA driver in kernel. These interrupts should be handled by corresponding client/module.Otherwise, it will overwrite illegal memory and cause unexpected issues, since pdma driver only requests resources for pdma channels. In PDMA driver, the reserved channels are at the end of total 32 channels. If we find interrupt bit index is not smaller than total dma channels, we should ignore it. Signed-off-by: Qiao Zhou <zhouqiao@marvell.com> --- drivers/dma/mmp_pdma.c | 3 +++ 1 file changed, 3 insertions(+)