Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

r6040: Free irq line on error path

Free irq line on error path.

Signed-off-by: Denis Kirjanov <dkirjanov@kernel.org>
Acked-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Denis Kirjanov and committed by
David S. Miller
ced1de4c f0c54ace

+20 -13
+20 -13
drivers/net/r6040.c
··· 756 756 ret = request_irq(dev->irq, r6040_interrupt, 757 757 IRQF_SHARED, dev->name, dev); 758 758 if (ret) 759 - return ret; 759 + goto out; 760 760 761 761 /* Set MAC address */ 762 762 r6040_mac_address(dev); ··· 764 764 /* Allocate Descriptor memory */ 765 765 lp->rx_ring = 766 766 pci_alloc_consistent(lp->pdev, RX_DESC_SIZE, &lp->rx_ring_dma); 767 - if (!lp->rx_ring) 768 - return -ENOMEM; 767 + if (!lp->rx_ring) { 768 + ret = -ENOMEM; 769 + goto err_free_irq; 770 + } 769 771 770 772 lp->tx_ring = 771 773 pci_alloc_consistent(lp->pdev, TX_DESC_SIZE, &lp->tx_ring_dma); 772 774 if (!lp->tx_ring) { 773 - pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, 774 - lp->rx_ring_dma); 775 - return -ENOMEM; 775 + ret = -ENOMEM; 776 + goto err_free_rx_ring; 776 777 } 777 778 778 779 ret = r6040_up(dev); 779 - if (ret) { 780 - pci_free_consistent(lp->pdev, TX_DESC_SIZE, lp->tx_ring, 781 - lp->tx_ring_dma); 782 - pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, 783 - lp->rx_ring_dma); 784 - return ret; 785 - } 780 + if (ret) 781 + goto err_free_tx_ring; 786 782 787 783 napi_enable(&lp->napi); 788 784 netif_start_queue(dev); 789 785 790 786 return 0; 787 + 788 + err_free_tx_ring: 789 + pci_free_consistent(lp->pdev, TX_DESC_SIZE, lp->tx_ring, 790 + lp->tx_ring_dma); 791 + err_free_rx_ring: 792 + pci_free_consistent(lp->pdev, RX_DESC_SIZE, lp->rx_ring, 793 + lp->rx_ring_dma); 794 + err_free_irq: 795 + free_irq(dev->irq, dev); 796 + out: 797 + return ret; 791 798 } 792 799 793 800 static netdev_tx_t r6040_start_xmit(struct sk_buff *skb,