|
@@ -2040,6 +2040,13 @@ static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb,
|
|
|
/* Due to lack of space, no more new filters can be programmed */
|
|
|
if (th->syn && (pf->auto_disable_flags & I40E_FLAG_FD_ATR_ENABLED))
|
|
|
return;
|
|
|
+ if (pf->flags & I40E_FLAG_HW_ATR_EVICT_CAPABLE) {
|
|
|
+ /* HW ATR eviction will take care of removing filters on FIN
|
|
|
+ * and RST packets.
|
|
|
+ */
|
|
|
+ if (th->fin || th->rst)
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
tx_ring->atr_count++;
|
|
|
|
|
@@ -2095,6 +2102,9 @@ static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb,
|
|
|
I40E_TXD_FLTR_QW1_CNTINDEX_SHIFT) &
|
|
|
I40E_TXD_FLTR_QW1_CNTINDEX_MASK;
|
|
|
|
|
|
+ if (pf->flags & I40E_FLAG_HW_ATR_EVICT_CAPABLE)
|
|
|
+ dtype_cmd |= I40E_TXD_FLTR_QW1_ATR_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);
|