|
@@ -1317,11 +1317,9 @@ static void igb_free_irq(struct igb_adapter *adapter)
|
|
|
|
|
|
free_irq(adapter->msix_entries[vector++].vector, adapter);
|
|
|
|
|
|
- for (i = 0; i < adapter->num_q_vectors; i++) {
|
|
|
- struct igb_q_vector *q_vector = adapter->q_vector[i];
|
|
|
+ for (i = 0; i < adapter->num_q_vectors; i++)
|
|
|
free_irq(adapter->msix_entries[vector++].vector,
|
|
|
- q_vector);
|
|
|
- }
|
|
|
+ adapter->q_vector[i]);
|
|
|
} else {
|
|
|
free_irq(adapter->pdev->irq, adapter);
|
|
|
}
|
|
@@ -1523,10 +1521,9 @@ int igb_up(struct igb_adapter *adapter)
|
|
|
|
|
|
clear_bit(__IGB_DOWN, &adapter->state);
|
|
|
|
|
|
- for (i = 0; i < adapter->num_q_vectors; i++) {
|
|
|
- struct igb_q_vector *q_vector = adapter->q_vector[i];
|
|
|
- napi_enable(&q_vector->napi);
|
|
|
- }
|
|
|
+ for (i = 0; i < adapter->num_q_vectors; i++)
|
|
|
+ napi_enable(&(adapter->q_vector[i]->napi));
|
|
|
+
|
|
|
if (adapter->msix_entries)
|
|
|
igb_configure_msix(adapter);
|
|
|
else
|
|
@@ -1578,10 +1575,8 @@ void igb_down(struct igb_adapter *adapter)
|
|
|
wrfl();
|
|
|
msleep(10);
|
|
|
|
|
|
- for (i = 0; i < adapter->num_q_vectors; i++) {
|
|
|
- struct igb_q_vector *q_vector = adapter->q_vector[i];
|
|
|
- napi_disable(&q_vector->napi);
|
|
|
- }
|
|
|
+ for (i = 0; i < adapter->num_q_vectors; i++)
|
|
|
+ napi_disable(&(adapter->q_vector[i]->napi));
|
|
|
|
|
|
igb_irq_disable(adapter);
|
|
|
|
|
@@ -2546,10 +2541,8 @@ static int igb_open(struct net_device *netdev)
|
|
|
/* From here on the code is the same as igb_up() */
|
|
|
clear_bit(__IGB_DOWN, &adapter->state);
|
|
|
|
|
|
- for (i = 0; i < adapter->num_q_vectors; i++) {
|
|
|
- struct igb_q_vector *q_vector = adapter->q_vector[i];
|
|
|
- napi_enable(&q_vector->napi);
|
|
|
- }
|
|
|
+ for (i = 0; i < adapter->num_q_vectors; i++)
|
|
|
+ napi_enable(&(adapter->q_vector[i]->napi));
|
|
|
|
|
|
/* Clear any pending interrupts. */
|
|
|
rd32(E1000_ICR);
|
|
@@ -3769,10 +3762,8 @@ static void igb_watchdog_task(struct work_struct *work)
|
|
|
/* Cause software interrupt to ensure rx ring is cleaned */
|
|
|
if (adapter->msix_entries) {
|
|
|
u32 eics = 0;
|
|
|
- for (i = 0; i < adapter->num_q_vectors; i++) {
|
|
|
- struct igb_q_vector *q_vector = adapter->q_vector[i];
|
|
|
- eics |= q_vector->eims_value;
|
|
|
- }
|
|
|
+ for (i = 0; i < adapter->num_q_vectors; i++)
|
|
|
+ eics |= adapter->q_vector[i]->eims_value;
|
|
|
wr32(E1000_EICS, eics);
|
|
|
} else {
|
|
|
wr32(E1000_ICS, E1000_ICS_RXDMT0);
|
|
@@ -6671,18 +6662,15 @@ static void igb_netpoll(struct net_device *netdev)
|
|
|
{
|
|
|
struct igb_adapter *adapter = netdev_priv(netdev);
|
|
|
struct e1000_hw *hw = &adapter->hw;
|
|
|
+ struct igb_q_vector *q_vector;
|
|
|
int i;
|
|
|
|
|
|
- if (!adapter->msix_entries) {
|
|
|
- struct igb_q_vector *q_vector = adapter->q_vector[0];
|
|
|
- igb_irq_disable(adapter);
|
|
|
- napi_schedule(&q_vector->napi);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
for (i = 0; i < adapter->num_q_vectors; i++) {
|
|
|
- struct igb_q_vector *q_vector = adapter->q_vector[i];
|
|
|
- wr32(E1000_EIMC, q_vector->eims_value);
|
|
|
+ q_vector = adapter->q_vector[i];
|
|
|
+ if (adapter->msix_entries)
|
|
|
+ wr32(E1000_EIMC, q_vector->eims_value);
|
|
|
+ else
|
|
|
+ igb_irq_disable(adapter);
|
|
|
napi_schedule(&q_vector->napi);
|
|
|
}
|
|
|
}
|