* [PATCH v4] net/iavf: fix VLAN offload strip flag inconsistency
[not found] <20230821092031.211436-1-wenjing.qiao@intel.com>
@ 2023-08-21 9:52 ` Wenjing Qiao
2023-08-23 5:30 ` Zhang, Qi Z
0 siblings, 1 reply; 2+ messages in thread
From: Wenjing Qiao @ 2023-08-21 9:52 UTC (permalink / raw)
To: jingjing.wu, beilei.xing; +Cc: dev, zhiminx.huang, Wenjing Qiao, stable
For i40e kernel driver which only supports vlan(v1) VIRTCHNL OP,
it will set strip on when setting filter on but dpdk side will not
change strip flag. To be consistent with dpdk side, disable strip
again.
Fixes: cb25d4323fbf ("net/avf: enable MAC VLAN and promisc ops")
Cc: stable@dpdk.org
Signed-off-by: Wenjing Qiao <wenjing.qiao@intel.com>
---
drivers/net/iavf/iavf_ethdev.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index 00b963128b..bdfc0ed098 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -1361,6 +1361,7 @@ iavf_dev_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
struct iavf_adapter *adapter =
IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter);
+ struct rte_eth_conf *dev_conf = &dev->data->dev_conf;
int err;
if (adapter->closed)
@@ -1379,6 +1380,23 @@ iavf_dev_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
err = iavf_add_del_vlan(adapter, vlan_id, on);
if (err)
return -EIO;
+
+ /* For i40e kernel driver which only supports vlan(v1) VIRTCHNL OP,
+ * it will set strip on when setting filter on but dpdk side will not
+ * change strip flag. To be consistent with dpdk side, disable strip
+ * again.
+ *
+ * For i40e kernel driver which supports vlan v2, dpdk will invoke vlan v2
+ * related function, so it won't go through here.
+ */
+ if (adapter->hw.mac.type == IAVF_MAC_XL710 ||
+ adapter->hw.mac.type == IAVF_MAC_X722_VF) {
+ if (on && !(dev_conf->rxmode.offloads & RTE_ETH_RX_OFFLOAD_VLAN_STRIP)) {
+ err = iavf_disable_vlan_strip(adapter);
+ if (err)
+ return -EIO;
+ }
+ }
return 0;
}
--
2.34.1
^ permalink raw reply [flat|nested] 2+ messages in thread