Outer VLAN strip gets disabled when inner
VLAN stripping is enabled/disabled after
enabling outer VLAN stripping.
This happens because the respective register
is overridden by the vsi params update of
inner VLAN stripping.

This patch fixes the issue by re-enabling
outer VLAN stripping after modification
of inner VLAN stripping.

Fixes: c52ff36686a4 ("net/i40e: enable QinQ stripping")
Cc: [email protected]

Signed-off-by: Anurag Mandal <[email protected]>
---
 drivers/net/intel/i40e/i40e_ethdev.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/intel/i40e/i40e_ethdev.c 
b/drivers/net/intel/i40e/i40e_ethdev.c
index b8ce79061b..c8153f3351 100644
--- a/drivers/net/intel/i40e/i40e_ethdev.c
+++ b/drivers/net/intel/i40e/i40e_ethdev.c
@@ -4150,6 +4150,16 @@ i40e_vlan_offload_set(struct rte_eth_dev *dev, int mask)
                        i40e_vsi_config_vlan_stripping(vsi, TRUE);
                else
                        i40e_vsi_config_vlan_stripping(vsi, FALSE);
+
+               /* When VLAN strip is enabled/disabled
+                * after enabling outer VLAN stripping,
+                * outer VLAN stripping gets disabled
+                * as the register gets overridden by
+                * VLAN's strip vsi param update.
+                * Hence, re-enable outer VLAN stripping.
+                */
+               if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_QINQ_STRIP)
+                       i40e_vsi_config_outer_vlan_stripping(vsi, TRUE);
        }
 
        if (mask & RTE_ETH_VLAN_EXTEND_MASK) {
-- 
2.43.0

Reply via email to