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