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