Commit 8de40625 authored by Jian Shen's avatar Jian Shen Committed by chenyi
Browse files

net: hns3: mark unexcuted loopback test result as UNEXECUTED

mainline inclusion
from mainline-v6.9-rc2
commit 5bd088d6c21a45ee70e6116879310e54174d75eb
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I9QYBA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5bd088d6c21a45ee70e6116879310e54174d75eb



----------------------------------------------------

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: 4c8dab1c ("net: hns3: reconstruct function hns3_self_test")
Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
Signed-off-by: default avatarJijie Shao <shaojijie@huawei.com>
Reviewed-by: default avatarMichal Kubiak <michal.kubiak@intel.com>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarchenyi <chenyi211@huawei.com>
parent bac64f98
Loading
Loading
Loading
Loading
+17 −2
Original line number Diff line number Diff line
@@ -79,6 +79,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)
{
@@ -450,18 +453,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");
@@ -483,6 +494,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,