Message ID | 20100825095755.GA8103@hera.kernel.org |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Wednesday 25 August 2010 11:57:55 Denis Kirjanov wrote: > Free irq line on error path. > > Signed-off-by: Denis Kirjanov <dkirjanov@kernel.org> Acked-by: Florian Fainelli <florian@openwrt.org> > --- > drivers/net/r6040.c | 33 ++++++++++++++++++++------------- > 1 files changed, 20 insertions(+), 13 deletions(-) > > diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c > index 7d482a2..dc54aff 100644 > --- a/drivers/net/r6040.c > +++ b/drivers/net/r6040.c > @@ -751,7 +751,7 @@ static int r6040_open(struct net_device *dev) > ret = request_irq(dev->irq, r6040_interrupt, > IRQF_SHARED, dev->name, dev); > if (ret) > - return ret; > + goto out; > > /* Set MAC address */ > r6040_mac_address(dev); > @@ -759,30 +759,37 @@ static int r6040_open(struct net_device *dev) > /* Allocate Descriptor memory */ > lp->rx_ring = > pci_alloc_consistent(lp->pdev, RX_DESC_SIZE, &lp->rx_ring_dma); > - if (!lp->rx_ring) > - return -ENOMEM; > + if (!lp->rx_ring) { > + ret = -ENOMEM; > + goto err_free_irq; > + } > > lp->tx_ring = > pci_alloc_consistent(lp->pdev, TX_DESC_SIZE, &lp->tx_ring_dma); > if (!lp->tx_ring) { > - pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, > - lp->rx_ring_dma); > - return -ENOMEM; > + ret = -ENOMEM; > + goto err_free_rx_ring; > } > > ret = r6040_up(dev); > - if (ret) { > - pci_free_consistent(lp->pdev, TX_DESC_SIZE, lp->tx_ring, > - lp->tx_ring_dma); > - pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, > - lp->rx_ring_dma); > - return ret; > - } > + if (ret) > + goto err_free_tx_ring; > > napi_enable(&lp->napi); > netif_start_queue(dev); > > return 0; > + > +err_free_tx_ring: > + pci_free_consistent(lp->pdev, TX_DESC_SIZE, lp->tx_ring, > + lp->tx_ring_dma); > +err_free_rx_ring: > + pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, > + lp->rx_ring_dma); > +err_free_irq: > + free_irq(dev->irq, dev); > +out: > + return ret; > } > > static netdev_tx_t r6040_start_xmit(struct sk_buff *skb, -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Florian Fainelli <florian@openwrt.org> Date: Wed, 25 Aug 2010 12:05:08 +0200 > On Wednesday 25 August 2010 11:57:55 Denis Kirjanov wrote: >> Free irq line on error path. >> >> Signed-off-by: Denis Kirjanov <dkirjanov@kernel.org> > > Acked-by: Florian Fainelli <florian@openwrt.org> Applied. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c index 7d482a2..dc54aff 100644 --- a/drivers/net/r6040.c +++ b/drivers/net/r6040.c @@ -751,7 +751,7 @@ static int r6040_open(struct net_device *dev) ret = request_irq(dev->irq, r6040_interrupt, IRQF_SHARED, dev->name, dev); if (ret) - return ret; + goto out; /* Set MAC address */ r6040_mac_address(dev); @@ -759,30 +759,37 @@ static int r6040_open(struct net_device *dev) /* Allocate Descriptor memory */ lp->rx_ring = pci_alloc_consistent(lp->pdev, RX_DESC_SIZE, &lp->rx_ring_dma); - if (!lp->rx_ring) - return -ENOMEM; + if (!lp->rx_ring) { + ret = -ENOMEM; + goto err_free_irq; + } lp->tx_ring = pci_alloc_consistent(lp->pdev, TX_DESC_SIZE, &lp->tx_ring_dma); if (!lp->tx_ring) { - pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, - lp->rx_ring_dma); - return -ENOMEM; + ret = -ENOMEM; + goto err_free_rx_ring; } ret = r6040_up(dev); - if (ret) { - pci_free_consistent(lp->pdev, TX_DESC_SIZE, lp->tx_ring, - lp->tx_ring_dma); - pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, - lp->rx_ring_dma); - return ret; - } + if (ret) + goto err_free_tx_ring; napi_enable(&lp->napi); netif_start_queue(dev); return 0; + +err_free_tx_ring: + pci_free_consistent(lp->pdev, TX_DESC_SIZE, lp->tx_ring, + lp->tx_ring_dma); +err_free_rx_ring: + pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, + lp->rx_ring_dma); +err_free_irq: + free_irq(dev->irq, dev); +out: + return ret; } static netdev_tx_t r6040_start_xmit(struct sk_buff *skb,
Free irq line on error path. Signed-off-by: Denis Kirjanov <dkirjanov@kernel.org> --- drivers/net/r6040.c | 33 ++++++++++++++++++++------------- 1 files changed, 20 insertions(+), 13 deletions(-)