| From 01c91ba5e78df0c453cbe72779097d4be9b654e4 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 23 Mar 2021 16:19:59 +0300 |
| Subject: dmaengine: plx_dma: add a missing put_device() on error path |
| |
| From: Dan Carpenter <dan.carpenter@oracle.com> |
| |
| [ Upstream commit 07503e6aefe4a6efd777062191944a14f03b3a18 ] |
| |
| Add a missing put_device(&pdev->dev) if the call to |
| dma_async_device_register(dma); fails. |
| |
| Fixes: 905ca51e63be ("dmaengine: plx-dma: Introduce PLX DMA engine PCI driver skeleton") |
| Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> |
| Reviewed-by: Logan Gunthorpe <logang@deltatee.com> |
| Link: https://lore.kernel.org/r/YFnq/0IQzixtAbC1@mwanda |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/dma/plx_dma.c | 18 +++++++++++------- |
| 1 file changed, 11 insertions(+), 7 deletions(-) |
| |
| diff --git a/drivers/dma/plx_dma.c b/drivers/dma/plx_dma.c |
| index f387c5bbc170..166934544161 100644 |
| --- a/drivers/dma/plx_dma.c |
| +++ b/drivers/dma/plx_dma.c |
| @@ -507,10 +507,8 @@ static int plx_dma_create(struct pci_dev *pdev) |
| |
| rc = request_irq(pci_irq_vector(pdev, 0), plx_dma_isr, 0, |
| KBUILD_MODNAME, plxdev); |
| - if (rc) { |
| - kfree(plxdev); |
| - return rc; |
| - } |
| + if (rc) |
| + goto free_plx; |
| |
| spin_lock_init(&plxdev->ring_lock); |
| tasklet_setup(&plxdev->desc_task, plx_dma_desc_task); |
| @@ -540,14 +538,20 @@ static int plx_dma_create(struct pci_dev *pdev) |
| rc = dma_async_device_register(dma); |
| if (rc) { |
| pci_err(pdev, "Failed to register dma device: %d\n", rc); |
| - free_irq(pci_irq_vector(pdev, 0), plxdev); |
| - kfree(plxdev); |
| - return rc; |
| + goto put_device; |
| } |
| |
| pci_set_drvdata(pdev, plxdev); |
| |
| return 0; |
| + |
| +put_device: |
| + put_device(&pdev->dev); |
| + free_irq(pci_irq_vector(pdev, 0), plxdev); |
| +free_plx: |
| + kfree(plxdev); |
| + |
| + return rc; |
| } |
| |
| static int plx_dma_probe(struct pci_dev *pdev, |
| -- |
| 2.30.2 |
| |