| From 718bca0b21e262174f454ab5e9d5ff31338336e2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 16 Apr 2020 11:53:35 +0530 |
| Subject: dmaengine: pch_dma.c: Avoid data race between probe and irq handler |
| |
| From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com> |
| |
| [ Upstream commit 2e45676a4d33af47259fa186ea039122ce263ba9 ] |
| |
| 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 <madhuparnabhowmik10@gmail.com> |
| Link: https://lore.kernel.org/r/20200416062335.29223-1-madhuparnabhowmik10@gmail.com |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| 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 581e7a290d98e..a3b0b4c56a190 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.20.1 |
| |