]> git.droids-corp.org - dpdk.git/commitdiff
net/nfp: fix disabling VLAN stripping
authorPeng Zhang <peng.zhang@corigine.com>
Thu, 26 May 2022 14:34:44 +0000 (16:34 +0200)
committerFerruh Yigit <ferruh.yigit@xilinx.com>
Tue, 31 May 2022 13:03:02 +0000 (15:03 +0200)
"vlan set strip off 0" can't work, due to the incorrect usage
of the mask, it just represent that the status is changed or not,
not represent offloaded or not, so that the driver send the
error control message to the nic.

Now, by first inspect the mask of things that changed, and then
change the requested state if VLAN stripping according the
requested offload status. So this change can fix this bug.

Fixes: d4a27a3b092a ("nfp: add basic features")
Cc: stable@dpdk.org
Signed-off-by: Peng Zhang <peng.zhang@corigine.com>
Signed-off-by: Yong Xu <yong.xu@corigine.com>
Signed-off-by: Chaoyong He <chaoyong.he@corigine.com>
Signed-off-by: Niklas Söderlund <niklas.soderlund@corigine.com>
drivers/net/nfp/nfp_common.c

index be68c25fb8d4edf4e021e29cf6f105f45bab4624..34e3a03edd612cfe404840197eb7ad8ee8ef12fb 100644 (file)
@@ -989,22 +989,25 @@ nfp_net_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 {
        uint32_t new_ctrl, update;
        struct nfp_net_hw *hw;
+       struct rte_eth_conf *dev_conf;
        int ret;
 
        hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-       new_ctrl = 0;
-
-       /* Enable vlan strip if it is not configured yet */
-       if ((mask & RTE_ETH_VLAN_STRIP_OFFLOAD) &&
-           !(hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN))
-               new_ctrl = hw->ctrl | NFP_NET_CFG_CTRL_RXVLAN;
+       dev_conf = &dev->data->dev_conf;
+       new_ctrl = hw->ctrl;
 
-       /* Disable vlan strip just if it is configured */
-       if (!(mask & RTE_ETH_VLAN_STRIP_OFFLOAD) &&
-           (hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN))
-               new_ctrl = hw->ctrl & ~NFP_NET_CFG_CTRL_RXVLAN;
+       /*
+        * Vlan stripping setting
+        * Enable or disable VLAN stripping
+        */
+       if (mask & RTE_ETH_VLAN_STRIP_MASK) {
+               if (dev_conf->rxmode.offloads & RTE_ETH_RX_OFFLOAD_VLAN_STRIP)
+                       new_ctrl |= NFP_NET_CFG_CTRL_RXVLAN;
+               else
+                       new_ctrl &= ~NFP_NET_CFG_CTRL_RXVLAN;
+       }
 
-       if (new_ctrl == 0)
+       if (new_ctrl == hw->ctrl)
                return 0;
 
        update = NFP_NET_CFG_UPDATE_GEN;