i40e: fix fdir programming
authorJesse Brandeburg <jesse.brandeburg@intel.com>
Wed, 4 Jun 2014 04:22:49 +0000 (04:22 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 26 Jun 2014 11:45:31 +0000 (04:45 -0700)
There were a couple of fields in the fdir descriptor setup that
were not being reprogrammed, which left the opportunity for stale
data to be pushed as part of the descriptor next time it was used.

Change-ID: Ieee5c96a7d4713d469693f086c4854de949a7633
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_txrx.c

index c5749d6526eade0b1043c75e7cf1659d77c1da7a..5cc27fba8ad51f66f8e36f4c1b0b8ebac82b4d32 100644 (file)
@@ -100,8 +100,6 @@ int i40e_program_fdir_filter(struct i40e_fdir_filter *fdir_data, u8 *raw_packet,
                        I40E_TXD_FLTR_QW0_DEST_VSI_SHIFT) &
                       I40E_TXD_FLTR_QW0_DEST_VSI_MASK;
 
-       fdir_desc->qindex_flex_ptype_vsi = cpu_to_le32(fpt);
-
        dcc = I40E_TX_DESC_DTYPE_FILTER_PROG;
 
        if (add)
@@ -124,6 +122,8 @@ int i40e_program_fdir_filter(struct i40e_fdir_filter *fdir_data, u8 *raw_packet,
                        I40E_TXD_FLTR_QW1_CNTINDEX_MASK;
        }
 
+       fdir_desc->qindex_flex_ptype_vsi = cpu_to_le32(fpt);
+       fdir_desc->rsvd = cpu_to_le32(0);
        fdir_desc->dtype_cmd_cntindex = cpu_to_le32(dcc);
        fdir_desc->fd_id = cpu_to_le32(fdir_data->fd_id);
 
@@ -1688,7 +1688,9 @@ static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb,
                I40E_TXD_FLTR_QW1_CNTINDEX_MASK;
 
        fdir_desc->qindex_flex_ptype_vsi = cpu_to_le32(flex_ptype);
+       fdir_desc->rsvd = cpu_to_le32(0);
        fdir_desc->dtype_cmd_cntindex = cpu_to_le32(dtype_cmd);
+       fdir_desc->fd_id = cpu_to_le32(0);
 }
 
 /**