Commit a3355e36 authored by Guangbin Huang's avatar Guangbin Huang Committed by Zheng Zengkai
Browse files

net: hns3: fix some mac statistics is always 0 in device version V2

mainline inclusion
from mainline-master
commit 1122eac1
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I4I7P7
CVE: NA

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



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

When driver queries the register number of mac statistics from firmware,
the old firmware runs in device version V2 only returns number of valid
registers, not include number of three reserved registers among of them.
It cause driver doesn't record the last three data when query mac
statistics.

To fix this problem, driver never query register number in device version
V2 and set it to a fixed value which include three reserved registers.

Fixes: c8af2887 ("net: hns3: add support pause/pfc durations for mac statistics")
Signed-off-by: default avatarGuangbin Huang <huangguangbin2@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Reviewed-by: default avatarYongxin Li <liyongxin1@huawei.com>
Signed-off-by: default avatarJunxin Chen <chenjunxin1@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 0894fc17
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -566,6 +566,16 @@ static int hclge_mac_query_reg_num(struct hclge_dev *hdev, u32 *reg_num)
	struct hclge_desc desc;
	int ret;

	/* Driver needs total register number of both valid registers and
	 * reserved registers, but the old firmware only returns number
	 * of valid registers in device V2. To be compatible with these
	 * devices, driver uses a fixed value.
	 */
	if (hdev->ae_dev->dev_version == HNAE3_DEVICE_VERSION_V2) {
		*reg_num = HCLGE_MAC_STATS_MAX_NUM_V1;
		return 0;
	}

	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_MAC_REG_NUM, true);
	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
	if (ret) {
+1 −1
Original line number Diff line number Diff line
@@ -404,7 +404,7 @@ struct hclge_tm_info {
};

/* max number of mac statistics on each version */
#define HCLGE_MAC_STATS_MAX_NUM_V1		84
#define HCLGE_MAC_STATS_MAX_NUM_V1		87
#define HCLGE_MAC_STATS_MAX_NUM_V2		105

struct hclge_comm_stats_str {