]> www.infradead.org Git - linux.git/commitdiff
net: hns3: mark unexcuted loopback test result as UNEXECUTED
authorJian Shen <shenjian15@huawei.com>
Mon, 25 Mar 2024 12:43:11 +0000 (20:43 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 26 Mar 2024 14:32:39 +0000 (15:32 +0100)
Currently, loopback test may be skipped when resetting, but the test
result will still show as 'PASS', because the driver doesn't set
ETH_TEST_FL_FAILED flag. Fix it by setting the flag and
initializating the value to UNEXECUTED.

Fixes: 4c8dab1c709c ("net: hns3: reconstruct function hns3_self_test")
Signed-off-by: Jian Shen <shenjian15@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c

index 999a0ee162a64494f0782b1fc5cbdfff695e83b8..941cb529d671fb2bf2fc12ceb5890fec093dc137 100644 (file)
@@ -78,6 +78,9 @@ static const struct hns3_stats hns3_rxq_stats[] = {
 #define HNS3_NIC_LB_TEST_NO_MEM_ERR    1
 #define HNS3_NIC_LB_TEST_TX_CNT_ERR    2
 #define HNS3_NIC_LB_TEST_RX_CNT_ERR    3
+#define HNS3_NIC_LB_TEST_UNEXECUTED    4
+
+static int hns3_get_sset_count(struct net_device *netdev, int stringset);
 
 static int hns3_lp_setup(struct net_device *ndev, enum hnae3_loop loop, bool en)
 {
@@ -418,18 +421,26 @@ static void hns3_do_external_lb(struct net_device *ndev,
 static void hns3_self_test(struct net_device *ndev,
                           struct ethtool_test *eth_test, u64 *data)
 {
+       int cnt = hns3_get_sset_count(ndev, ETH_SS_TEST);
        struct hns3_nic_priv *priv = netdev_priv(ndev);
        struct hnae3_handle *h = priv->ae_handle;
        int st_param[HNAE3_LOOP_NONE][2];
        bool if_running = netif_running(ndev);
+       int i;
+
+       /* initialize the loopback test result, avoid marking an unexcuted
+        * loopback test as PASS.
+        */
+       for (i = 0; i < cnt; i++)
+               data[i] = HNS3_NIC_LB_TEST_UNEXECUTED;
 
        if (hns3_nic_resetting(ndev)) {
                netdev_err(ndev, "dev resetting!");
-               return;
+               goto failure;
        }
 
        if (!(eth_test->flags & ETH_TEST_FL_OFFLINE))
-               return;
+               goto failure;
 
        if (netif_msg_ifdown(h))
                netdev_info(ndev, "self test start\n");
@@ -451,6 +462,10 @@ static void hns3_self_test(struct net_device *ndev,
 
        if (netif_msg_ifdown(h))
                netdev_info(ndev, "self test end\n");
+       return;
+
+failure:
+       eth_test->flags |= ETH_TEST_FL_FAILED;
 }
 
 static void hns3_update_limit_promisc_mode(struct net_device *netdev,