ixgb: don't print error if pci_enable_msi() fails, cleanup minor leak

pci_enable_msi calls can fail for normal operational reasons. Driver
should not print an error message in that case. Fix a leak that leaves
msi enabled if pci_request_irq fails. We can remove CONFIG_PCI_MSI
ifdefs alltogether

Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Auke Kok and committed by Jeff Garzik fb136c07 4a79a04e

+15 -23
-2
drivers/net/ixgb/ixgb.h
··· 193 u16 msg_enable; 194 struct ixgb_hw_stats stats; 195 uint32_t alloc_rx_buff_failed; 196 - #ifdef CONFIG_PCI_MSI 197 boolean_t have_msi; 198 - #endif 199 }; 200 #endif /* _IXGB_H_ */
··· 193 u16 msg_enable; 194 struct ixgb_hw_stats stats; 195 uint32_t alloc_rx_buff_failed; 196 boolean_t have_msi; 197 }; 198 #endif /* _IXGB_H_ */
+15 -21
drivers/net/ixgb/ixgb_main.c
··· 227 ixgb_up(struct ixgb_adapter *adapter) 228 { 229 struct net_device *netdev = adapter->netdev; 230 - int err; 231 int max_frame = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH; 232 struct ixgb_hw *hw = &adapter->hw; 233 ··· 246 /* disable interrupts and get the hardware into a known state */ 247 IXGB_WRITE_REG(&adapter->hw, IMC, 0xffffffff); 248 249 - #ifdef CONFIG_PCI_MSI 250 - { 251 - boolean_t pcix = (IXGB_READ_REG(&adapter->hw, STATUS) & 252 - IXGB_STATUS_PCIX_MODE) ? TRUE : FALSE; 253 - adapter->have_msi = TRUE; 254 - 255 - if (!pcix) 256 - adapter->have_msi = FALSE; 257 - else if((err = pci_enable_msi(adapter->pdev))) { 258 - DPRINTK(PROBE, ERR, 259 - "Unable to allocate MSI interrupt Error: %d\n", err); 260 - adapter->have_msi = FALSE; 261 /* proceed to try to request regular interrupt */ 262 } 263 - } 264 265 - #endif 266 - if((err = request_irq(adapter->pdev->irq, &ixgb_intr, 267 - IRQF_SHARED | IRQF_SAMPLE_RANDOM, 268 - netdev->name, netdev))) { 269 DPRINTK(PROBE, ERR, 270 "Unable to allocate interrupt Error: %d\n", err); 271 return err; ··· 302 303 ixgb_irq_disable(adapter); 304 free_irq(adapter->pdev->irq, netdev); 305 - #ifdef CONFIG_PCI_MSI 306 - if(adapter->have_msi == TRUE) 307 pci_disable_msi(adapter->pdev); 308 309 - #endif 310 if(kill_watchdog) 311 del_timer_sync(&adapter->watchdog_timer); 312 #ifdef CONFIG_IXGB_NAPI
··· 227 ixgb_up(struct ixgb_adapter *adapter) 228 { 229 struct net_device *netdev = adapter->netdev; 230 + int err, irq_flags = IRQF_SHARED; 231 int max_frame = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH; 232 struct ixgb_hw *hw = &adapter->hw; 233 ··· 246 /* disable interrupts and get the hardware into a known state */ 247 IXGB_WRITE_REG(&adapter->hw, IMC, 0xffffffff); 248 249 + /* only enable MSI if bus is in PCI-X mode */ 250 + if (IXGB_READ_REG(&adapter->hw, STATUS) & IXGB_STATUS_PCIX_MODE) { 251 + err = pci_enable_msi(adapter->pdev); 252 + if (!err) { 253 + adapter->have_msi = 1; 254 + irq_flags = 0; 255 + } 256 /* proceed to try to request regular interrupt */ 257 } 258 259 + err = request_irq(adapter->pdev->irq, &ixgb_intr, irq_flags, 260 + netdev->name, netdev); 261 + if (err) { 262 + if (adapter->have_msi) 263 + pci_disable_msi(adapter->pdev); 264 DPRINTK(PROBE, ERR, 265 "Unable to allocate interrupt Error: %d\n", err); 266 return err; ··· 307 308 ixgb_irq_disable(adapter); 309 free_irq(adapter->pdev->irq, netdev); 310 + 311 + if (adapter->have_msi) 312 pci_disable_msi(adapter->pdev); 313 314 if(kill_watchdog) 315 del_timer_sync(&adapter->watchdog_timer); 316 #ifdef CONFIG_IXGB_NAPI