aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/i40e/i40e_main.c
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2017-04-19 09:25:51 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2017-04-30 07:16:31 -0400
commit1f190d9369487c1edfaea4d892231a62ea8206cc (patch)
tree1e2dbbb53a543af956f511d587f8d7f0ad6d6c94 /drivers/net/ethernet/intel/i40e/i40e_main.c
parent27826fd5d357d38b5cf834f9adcc70e6c2254d69 (diff)
i40e: Reprogram port offloads after reset
This patch corrects a major oversight in that we were not reprogramming the ports after a reset. As a result we completely lost all of the Rx tunnel offloads on receive including Rx checksum, RSS on inner headers, and ATR. The fix for this is pretty standard as all we needed to do is reset the filter bits to pending for all active filters and schedule the sync event. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/i40e/i40e_main.c')
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 063044268170..f44affc7e08c 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -7331,6 +7331,23 @@ static void i40e_handle_mdd_event(struct i40e_pf *pf)
7331} 7331}
7332 7332
7333/** 7333/**
7334 * i40e_sync_udp_filters - Trigger a sync event for existing UDP filters
7335 * @pf: board private structure
7336 **/
7337static void i40e_sync_udp_filters(struct i40e_pf *pf)
7338{
7339 int i;
7340
7341 /* loop through and set pending bit for all active UDP filters */
7342 for (i = 0; i < I40E_MAX_PF_UDP_OFFLOAD_PORTS; i++) {
7343 if (pf->udp_ports[i].port)
7344 pf->pending_udp_bitmap |= BIT_ULL(i);
7345 }
7346
7347 pf->flags |= I40E_FLAG_UDP_FILTER_SYNC;
7348}
7349
7350/**
7334 * i40e_sync_udp_filters_subtask - Sync the VSI filter list with HW 7351 * i40e_sync_udp_filters_subtask - Sync the VSI filter list with HW
7335 * @pf: board private structure 7352 * @pf: board private structure
7336 **/ 7353 **/
@@ -10738,6 +10755,9 @@ static int i40e_setup_pf_switch(struct i40e_pf *pf, bool reinit)
10738 10755
10739 i40e_ptp_init(pf); 10756 i40e_ptp_init(pf);
10740 10757
10758 /* repopulate tunnel port filters */
10759 i40e_sync_udp_filters(pf);
10760
10741 return ret; 10761 return ret;
10742} 10762}
10743 10763