Commit fb136c070bfdde11dc79758674f54fb26bba1a2f
Committed by
Jeff Garzik
1 parent
4a79a04e4c
Exists in
master
and in
7 other branches
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>
Showing 2 changed files with 15 additions and 23 deletions Side-by-side Diff
drivers/net/ixgb/ixgb.h
drivers/net/ixgb/ixgb_main.c
... | ... | @@ -227,7 +227,7 @@ |
227 | 227 | ixgb_up(struct ixgb_adapter *adapter) |
228 | 228 | { |
229 | 229 | struct net_device *netdev = adapter->netdev; |
230 | - int err; | |
230 | + int err, irq_flags = IRQF_SHARED; | |
231 | 231 | int max_frame = netdev->mtu + ENET_HEADER_SIZE + ENET_FCS_LENGTH; |
232 | 232 | struct ixgb_hw *hw = &adapter->hw; |
233 | 233 | |
234 | 234 | |
235 | 235 | |
... | ... | @@ -246,26 +246,21 @@ |
246 | 246 | /* disable interrupts and get the hardware into a known state */ |
247 | 247 | IXGB_WRITE_REG(&adapter->hw, IMC, 0xffffffff); |
248 | 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; | |
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 | + } | |
261 | 256 | /* proceed to try to request regular interrupt */ |
262 | 257 | } |
263 | - } | |
264 | 258 | |
265 | -#endif | |
266 | - if((err = request_irq(adapter->pdev->irq, &ixgb_intr, | |
267 | - IRQF_SHARED | IRQF_SAMPLE_RANDOM, | |
268 | - netdev->name, netdev))) { | |
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); | |
269 | 264 | DPRINTK(PROBE, ERR, |
270 | 265 | "Unable to allocate interrupt Error: %d\n", err); |
271 | 266 | return err; |
272 | 267 | |
... | ... | @@ -307,11 +302,10 @@ |
307 | 302 | |
308 | 303 | ixgb_irq_disable(adapter); |
309 | 304 | free_irq(adapter->pdev->irq, netdev); |
310 | -#ifdef CONFIG_PCI_MSI | |
311 | - if(adapter->have_msi == TRUE) | |
305 | + | |
306 | + if (adapter->have_msi) | |
312 | 307 | pci_disable_msi(adapter->pdev); |
313 | 308 | |
314 | -#endif | |
315 | 309 | if(kill_watchdog) |
316 | 310 | del_timer_sync(&adapter->watchdog_timer); |
317 | 311 | #ifdef CONFIG_IXGB_NAPI |