diff options
| -rw-r--r-- | drivers/net/igb/igb_main.c | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 997124d2992a..c881347cb26d 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
| @@ -421,6 +421,8 @@ static void igb_assign_vector(struct igb_q_vector *q_vector, int msix_vector) | |||
| 421 | msixbm = E1000_EICR_RX_QUEUE0 << rx_queue; | 421 | msixbm = E1000_EICR_RX_QUEUE0 << rx_queue; |
| 422 | if (tx_queue > IGB_N0_QUEUE) | 422 | if (tx_queue > IGB_N0_QUEUE) |
| 423 | msixbm |= E1000_EICR_TX_QUEUE0 << tx_queue; | 423 | msixbm |= E1000_EICR_TX_QUEUE0 << tx_queue; |
| 424 | if (!adapter->msix_entries && msix_vector == 0) | ||
| 425 | msixbm |= E1000_EIMS_OTHER; | ||
| 424 | array_wr32(E1000_MSIXBM(0), msix_vector, msixbm); | 426 | array_wr32(E1000_MSIXBM(0), msix_vector, msixbm); |
| 425 | q_vector->eims_value = msixbm; | 427 | q_vector->eims_value = msixbm; |
| 426 | break; | 428 | break; |
| @@ -877,7 +879,6 @@ static int igb_request_irq(struct igb_adapter *adapter) | |||
| 877 | { | 879 | { |
| 878 | struct net_device *netdev = adapter->netdev; | 880 | struct net_device *netdev = adapter->netdev; |
| 879 | struct pci_dev *pdev = adapter->pdev; | 881 | struct pci_dev *pdev = adapter->pdev; |
| 880 | struct e1000_hw *hw = &adapter->hw; | ||
| 881 | int err = 0; | 882 | int err = 0; |
| 882 | 883 | ||
| 883 | if (adapter->msix_entries) { | 884 | if (adapter->msix_entries) { |
| @@ -909,20 +910,7 @@ static int igb_request_irq(struct igb_adapter *adapter) | |||
| 909 | igb_setup_all_tx_resources(adapter); | 910 | igb_setup_all_tx_resources(adapter); |
| 910 | igb_setup_all_rx_resources(adapter); | 911 | igb_setup_all_rx_resources(adapter); |
| 911 | } else { | 912 | } else { |
| 912 | switch (hw->mac.type) { | 913 | igb_assign_vector(adapter->q_vector[0], 0); |
| 913 | case e1000_82575: | ||
| 914 | wr32(E1000_MSIXBM(0), | ||
| 915 | (E1000_EICR_RX_QUEUE0 | | ||
| 916 | E1000_EICR_TX_QUEUE0 | | ||
| 917 | E1000_EIMS_OTHER)); | ||
| 918 | break; | ||
| 919 | case e1000_82580: | ||
| 920 | case e1000_82576: | ||
| 921 | wr32(E1000_IVAR0, E1000_IVAR_VALID); | ||
| 922 | break; | ||
| 923 | default: | ||
| 924 | break; | ||
| 925 | } | ||
| 926 | } | 914 | } |
| 927 | 915 | ||
| 928 | if (adapter->flags & IGB_FLAG_HAS_MSI) { | 916 | if (adapter->flags & IGB_FLAG_HAS_MSI) { |
| @@ -1140,6 +1128,8 @@ int igb_up(struct igb_adapter *adapter) | |||
| 1140 | } | 1128 | } |
| 1141 | if (adapter->msix_entries) | 1129 | if (adapter->msix_entries) |
| 1142 | igb_configure_msix(adapter); | 1130 | igb_configure_msix(adapter); |
| 1131 | else | ||
| 1132 | igb_assign_vector(adapter->q_vector[0], 0); | ||
| 1143 | 1133 | ||
| 1144 | /* Clear any pending interrupts. */ | 1134 | /* Clear any pending interrupts. */ |
| 1145 | rd32(E1000_ICR); | 1135 | rd32(E1000_ICR); |
