e1000: Fix msi enable leak on error, don't print error message, cleanup

pci_enable_msi failure is a normal event so we should not print any error.
Going over the code I spotted a missing pci_disable_msi() leak when irq
allocation fails. The whole code also needed a cleanup, so I combined the
two different calls to pci_request_irq into a single call making this
look a lot better. All #ifdef CONFIG_PCI_MSI's have been removed.

Compile tested with both CONFIG_PCI_MSI enabled and disabled.

Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Auke Kok and committed by Jeff Garzik e94bd23f fb136c07

+15 -28
+1 -3
drivers/net/e1000/e1000.h
··· 333 struct e1000_tx_ring test_tx_ring; 334 struct e1000_rx_ring test_rx_ring; 335 336 - 337 int msg_enable; 338 - #ifdef CONFIG_PCI_MSI 339 boolean_t have_msi; 340 - #endif 341 /* to not mess up cache alignment, always add to the bottom */ 342 boolean_t tso_force; 343 boolean_t smart_power_down; /* phy smart power down */
··· 333 struct e1000_tx_ring test_tx_ring; 334 struct e1000_rx_ring test_rx_ring; 335 336 int msg_enable; 337 boolean_t have_msi; 338 + 339 /* to not mess up cache alignment, always add to the bottom */ 340 boolean_t tso_force; 341 boolean_t smart_power_down; /* phy smart power down */
+14 -25
drivers/net/e1000/e1000_main.c
··· 158 static int e1000_change_mtu(struct net_device *netdev, int new_mtu); 159 static int e1000_set_mac(struct net_device *netdev, void *p); 160 static irqreturn_t e1000_intr(int irq, void *data); 161 - #ifdef CONFIG_PCI_MSI 162 static irqreturn_t e1000_intr_msi(int irq, void *data); 163 - #endif 164 static boolean_t e1000_clean_tx_irq(struct e1000_adapter *adapter, 165 struct e1000_tx_ring *tx_ring); 166 #ifdef CONFIG_E1000_NAPI ··· 298 static int e1000_request_irq(struct e1000_adapter *adapter) 299 { 300 struct net_device *netdev = adapter->netdev; 301 - int flags, err = 0; 302 303 - flags = IRQF_SHARED; 304 - #ifdef CONFIG_PCI_MSI 305 if (adapter->hw.mac_type >= e1000_82571) { 306 - adapter->have_msi = TRUE; 307 - if ((err = pci_enable_msi(adapter->pdev))) { 308 - DPRINTK(PROBE, ERR, 309 - "Unable to allocate MSI interrupt Error: %d\n", err); 310 - adapter->have_msi = FALSE; 311 } 312 } 313 - if (adapter->have_msi) { 314 - flags &= ~IRQF_SHARED; 315 - err = request_irq(adapter->pdev->irq, &e1000_intr_msi, flags, 316 - netdev->name, netdev); 317 - if (err) 318 - DPRINTK(PROBE, ERR, 319 - "Unable to allocate interrupt Error: %d\n", err); 320 - } else 321 - #endif 322 - if ((err = request_irq(adapter->pdev->irq, &e1000_intr, flags, 323 - netdev->name, netdev))) 324 DPRINTK(PROBE, ERR, 325 "Unable to allocate interrupt Error: %d\n", err); 326 327 return err; 328 } ··· 328 329 free_irq(adapter->pdev->irq, netdev); 330 331 - #ifdef CONFIG_PCI_MSI 332 if (adapter->have_msi) 333 pci_disable_msi(adapter->pdev); 334 - #endif 335 } 336 337 /** ··· 3735 3736 spin_unlock_irqrestore(&adapter->stats_lock, flags); 3737 } 3738 - #ifdef CONFIG_PCI_MSI 3739 3740 /** 3741 * e1000_intr_msi - Interrupt Handler ··· 3800 3801 return IRQ_HANDLED; 3802 } 3803 - #endif 3804 3805 /** 3806 * e1000_intr - Interrupt Handler
··· 158 static int e1000_change_mtu(struct net_device *netdev, int new_mtu); 159 static int e1000_set_mac(struct net_device *netdev, void *p); 160 static irqreturn_t e1000_intr(int irq, void *data); 161 static irqreturn_t e1000_intr_msi(int irq, void *data); 162 static boolean_t e1000_clean_tx_irq(struct e1000_adapter *adapter, 163 struct e1000_tx_ring *tx_ring); 164 #ifdef CONFIG_E1000_NAPI ··· 300 static int e1000_request_irq(struct e1000_adapter *adapter) 301 { 302 struct net_device *netdev = adapter->netdev; 303 + void (*handler) = &e1000_intr; 304 + int irq_flags = IRQF_SHARED; 305 + int err; 306 307 if (adapter->hw.mac_type >= e1000_82571) { 308 + adapter->have_msi = !pci_enable_msi(adapter->pdev); 309 + if (adapter->have_msi) { 310 + handler = &e1000_intr_msi; 311 + irq_flags = 0; 312 } 313 } 314 + 315 + err = request_irq(adapter->pdev->irq, handler, irq_flags, netdev->name, 316 + netdev); 317 + if (err) { 318 + if (adapter->have_msi) 319 + pci_disable_msi(adapter->pdev); 320 DPRINTK(PROBE, ERR, 321 "Unable to allocate interrupt Error: %d\n", err); 322 + } 323 324 return err; 325 } ··· 335 336 free_irq(adapter->pdev->irq, netdev); 337 338 if (adapter->have_msi) 339 pci_disable_msi(adapter->pdev); 340 } 341 342 /** ··· 3744 3745 spin_unlock_irqrestore(&adapter->stats_lock, flags); 3746 } 3747 3748 /** 3749 * e1000_intr_msi - Interrupt Handler ··· 3810 3811 return IRQ_HANDLED; 3812 } 3813 3814 /** 3815 * e1000_intr - Interrupt Handler