2020-04-16 06:27:52

by Madhuparna Bhowmik

[permalink] [raw]
Subject: [PATCH] drivers: dma: pch_dma.c: Avoid data race between probe and irq handler

From: Madhuparna Bhowmik <[email protected]>

pd->dma.dev is read in irq handler pd_irq().
However, it is set to pdev->dev after request_irq().
Therefore, set pd->dma.dev to pdev->dev before request_irq() to
avoid data race between pch_dma_probe() and pd_irq().

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Madhuparna Bhowmik <[email protected]>
---
drivers/dma/pch_dma.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
index 581e7a290d98..a3b0b4c56a19 100644
--- a/drivers/dma/pch_dma.c
+++ b/drivers/dma/pch_dma.c
@@ -865,6 +865,7 @@ static int pch_dma_probe(struct pci_dev *pdev,
}

pci_set_master(pdev);
+ pd->dma.dev = &pdev->dev;

err = request_irq(pdev->irq, pd_irq, IRQF_SHARED, DRV_NAME, pd);
if (err) {
@@ -880,7 +881,6 @@ static int pch_dma_probe(struct pci_dev *pdev,
goto err_free_irq;
}

- pd->dma.dev = &pdev->dev;

INIT_LIST_HEAD(&pd->dma.channels);

--
2.17.1


2020-04-23 06:21:19

by Vinod Koul

[permalink] [raw]
Subject: Re: [PATCH] drivers: dma: pch_dma.c: Avoid data race between probe and irq handler

On 16-04-20, 11:53, [email protected] wrote:
> From: Madhuparna Bhowmik <[email protected]>
>
> pd->dma.dev is read in irq handler pd_irq().
> However, it is set to pdev->dev after request_irq().
> Therefore, set pd->dma.dev to pdev->dev before request_irq() to
> avoid data race between pch_dma_probe() and pd_irq().

Please use the right subsystem tag for patch. You can find that using
git log on the respective subsystem, in this case it would have told you
that it is dmaengine.

I have fixed that up and applied it, thanks for the patch

--
~Vinod

2020-04-23 18:15:29

by Madhuparna Bhowmik

[permalink] [raw]
Subject: Re: [PATCH] drivers: dma: pch_dma.c: Avoid data race between probe and irq handler

On Thu, Apr 23, 2020 at 11:49:35AM +0530, Vinod Koul wrote:
> On 16-04-20, 11:53, [email protected] wrote:
> > From: Madhuparna Bhowmik <[email protected]>
> >
> > pd->dma.dev is read in irq handler pd_irq().
> > However, it is set to pdev->dev after request_irq().
> > Therefore, set pd->dma.dev to pdev->dev before request_irq() to
> > avoid data race between pch_dma_probe() and pd_irq().
>
> Please use the right subsystem tag for patch. You can find that using
> git log on the respective subsystem, in this case it would have told you
> that it is dmaengine.
>
Sure, I will take care of this.

> I have fixed that up and applied it, thanks for the patch
>
Thank you,
Madhuparna
> --
> ~Vinod