|
@@ -1552,9 +1552,11 @@ static int i40e_set_mac(struct net_device *netdev, void *p)
|
|
|
spin_unlock_bh(&vsi->mac_filter_list_lock);
|
|
|
}
|
|
|
|
|
|
- i40e_sync_vsi_filters(vsi, false);
|
|
|
ether_addr_copy(netdev->dev_addr, addr->sa_data);
|
|
|
-
|
|
|
+ /* schedule our worker thread which will take care of
|
|
|
+ * applying the new filter changes
|
|
|
+ */
|
|
|
+ i40e_service_event_schedule(vsi->back);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -2118,12 +2120,7 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi, bool grab_rtnl)
|
|
|
*/
|
|
|
if (pf->cur_promisc != cur_promisc) {
|
|
|
pf->cur_promisc = cur_promisc;
|
|
|
- if (grab_rtnl)
|
|
|
- i40e_do_reset_safe(pf,
|
|
|
- BIT(__I40E_PF_RESET_REQUESTED));
|
|
|
- else
|
|
|
- i40e_do_reset(pf,
|
|
|
- BIT(__I40E_PF_RESET_REQUESTED));
|
|
|
+ set_bit(__I40E_PF_RESET_REQUESTED, &pf->state);
|
|
|
}
|
|
|
} else {
|
|
|
ret = i40e_aq_set_vsi_unicast_promiscuous(
|
|
@@ -2383,16 +2380,13 @@ int i40e_vsi_add_vlan(struct i40e_vsi *vsi, s16 vid)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* Make sure to release before sync_vsi_filter because that
|
|
|
- * function will lock/unlock as necessary
|
|
|
- */
|
|
|
spin_unlock_bh(&vsi->mac_filter_list_lock);
|
|
|
|
|
|
- if (test_bit(__I40E_DOWN, &vsi->back->state) ||
|
|
|
- test_bit(__I40E_RESET_RECOVERY_PENDING, &vsi->back->state))
|
|
|
- return 0;
|
|
|
-
|
|
|
- return i40e_sync_vsi_filters(vsi, false);
|
|
|
+ /* schedule our worker thread which will take care of
|
|
|
+ * applying the new filter changes
|
|
|
+ */
|
|
|
+ i40e_service_event_schedule(vsi->back);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2465,16 +2459,13 @@ int i40e_vsi_kill_vlan(struct i40e_vsi *vsi, s16 vid)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* Make sure to release before sync_vsi_filter because that
|
|
|
- * function with lock/unlock as necessary
|
|
|
- */
|
|
|
spin_unlock_bh(&vsi->mac_filter_list_lock);
|
|
|
|
|
|
- if (test_bit(__I40E_DOWN, &vsi->back->state) ||
|
|
|
- test_bit(__I40E_RESET_RECOVERY_PENDING, &vsi->back->state))
|
|
|
- return 0;
|
|
|
-
|
|
|
- return i40e_sync_vsi_filters(vsi, false);
|
|
|
+ /* schedule our worker thread which will take care of
|
|
|
+ * applying the new filter changes
|
|
|
+ */
|
|
|
+ i40e_service_event_schedule(vsi->back);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -2717,6 +2708,11 @@ static void i40e_config_xps_tx_ring(struct i40e_ring *ring)
|
|
|
netif_set_xps_queue(ring->netdev, mask, ring->queue_index);
|
|
|
free_cpumask_var(mask);
|
|
|
}
|
|
|
+
|
|
|
+ /* schedule our worker thread which will take care of
|
|
|
+ * applying the new filter changes
|
|
|
+ */
|
|
|
+ i40e_service_event_schedule(vsi->back);
|
|
|
}
|
|
|
|
|
|
/**
|