net/hns3: fix configure FEC when concurrent with reset
authorChengchang Tang <tangchengchang@huawei.com>
Sat, 10 Apr 2021 01:11:20 +0000 (09:11 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 13 Apr 2021 09:13:41 +0000 (11:13 +0200)
Currently, after the reset is complete, the PMD restores the FEC
according to the FEC configuration reserved in the driver. If there is a
concurrency between the FEC setup operation and the restore operation
after a reset, the FEC status of the last hardware may be unknown.

This patch adds the step of obtaining the lock when setting the FEC to
avoid concurrency between restore operation and setting operation.

Fixes: 9bf2ea8dbc65 ("net/hns3: support FEC")
Cc: stable@dpdk.org
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
drivers/net/hns3/hns3_ethdev.c

index 53a0b54..846e5a2 100644 (file)
@@ -6433,11 +6433,16 @@ hns3_fec_set(struct rte_eth_dev *dev, uint32_t mode)
                return -EINVAL;
        }
 
                return -EINVAL;
        }
 
+       rte_spinlock_lock(&hw->lock);
        ret = hns3_set_fec_hw(hw, mode);
        ret = hns3_set_fec_hw(hw, mode);
-       if (ret)
+       if (ret) {
+               rte_spinlock_unlock(&hw->lock);
                return ret;
                return ret;
+       }
 
        pf->fec_mode = mode;
 
        pf->fec_mode = mode;
+       rte_spinlock_unlock(&hw->lock);
+
        return 0;
 }
 
        return 0;
 }