Commit 2eeae3a5 authored by David S. Miller's avatar David S. Miller

Merge branch 'hns3-next'

Guangbin Huang says:

====================
net: hns3: add new debugfs commands

This series adds three new debugfs commands for the HNS3 ethernet driver.

change log:
V1 -> V2:
1. remove patch "net: hns3: add support for link diagnosis info in debugfs"
   and use ethtool extended link state to implement similar function
   according to Jakub Kicinski's opinion.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents c948b46a d59daf6a
...@@ -290,8 +290,10 @@ enum hnae3_dbg_cmd { ...@@ -290,8 +290,10 @@ enum hnae3_dbg_cmd {
HNAE3_DBG_CMD_RX_QUEUE_INFO, HNAE3_DBG_CMD_RX_QUEUE_INFO,
HNAE3_DBG_CMD_TX_QUEUE_INFO, HNAE3_DBG_CMD_TX_QUEUE_INFO,
HNAE3_DBG_CMD_FD_TCAM, HNAE3_DBG_CMD_FD_TCAM,
HNAE3_DBG_CMD_FD_COUNTER,
HNAE3_DBG_CMD_MAC_TNL_STATUS, HNAE3_DBG_CMD_MAC_TNL_STATUS,
HNAE3_DBG_CMD_SERV_INFO, HNAE3_DBG_CMD_SERV_INFO,
HNAE3_DBG_CMD_UMV_INFO,
HNAE3_DBG_CMD_UNKNOWN, HNAE3_DBG_CMD_UNKNOWN,
}; };
......
...@@ -323,6 +323,20 @@ static struct hns3_dbg_cmd_info hns3_dbg_cmd[] = { ...@@ -323,6 +323,20 @@ static struct hns3_dbg_cmd_info hns3_dbg_cmd[] = {
.buf_len = HNS3_DBG_READ_LEN, .buf_len = HNS3_DBG_READ_LEN,
.init = hns3_dbg_common_file_init, .init = hns3_dbg_common_file_init,
}, },
{
.name = "fd_counter",
.cmd = HNAE3_DBG_CMD_FD_COUNTER,
.dentry = HNS3_DBG_DENTRY_FD,
.buf_len = HNS3_DBG_READ_LEN,
.init = hns3_dbg_common_file_init,
},
{
.name = "umv_info",
.cmd = HNAE3_DBG_CMD_UMV_INFO,
.dentry = HNS3_DBG_DENTRY_COMMON,
.buf_len = HNS3_DBG_READ_LEN,
.init = hns3_dbg_common_file_init,
},
}; };
static struct hns3_dbg_cap_info hns3_dbg_cap[] = { static struct hns3_dbg_cap_info hns3_dbg_cap[] = {
......
...@@ -248,6 +248,7 @@ enum hclge_opcode_type { ...@@ -248,6 +248,7 @@ enum hclge_opcode_type {
HCLGE_OPC_FD_KEY_CONFIG = 0x1202, HCLGE_OPC_FD_KEY_CONFIG = 0x1202,
HCLGE_OPC_FD_TCAM_OP = 0x1203, HCLGE_OPC_FD_TCAM_OP = 0x1203,
HCLGE_OPC_FD_AD_OP = 0x1204, HCLGE_OPC_FD_AD_OP = 0x1204,
HCLGE_OPC_FD_CNT_OP = 0x1205,
HCLGE_OPC_FD_USER_DEF_OP = 0x1207, HCLGE_OPC_FD_USER_DEF_OP = 0x1207,
/* MDIO command */ /* MDIO command */
...@@ -1109,6 +1110,14 @@ struct hclge_fd_ad_config_cmd { ...@@ -1109,6 +1110,14 @@ struct hclge_fd_ad_config_cmd {
u8 rsv2[8]; u8 rsv2[8];
}; };
struct hclge_fd_ad_cnt_read_cmd {
u8 rsv0[4];
__le16 index;
u8 rsv1[2];
__le64 cnt;
u8 rsv2[8];
};
#define HCLGE_FD_USER_DEF_OFT_S 0 #define HCLGE_FD_USER_DEF_OFT_S 0
#define HCLGE_FD_USER_DEF_OFT_M GENMASK(14, 0) #define HCLGE_FD_USER_DEF_OFT_M GENMASK(14, 0)
#define HCLGE_FD_USER_DEF_EN_B 15 #define HCLGE_FD_USER_DEF_EN_B 15
......
...@@ -1549,6 +1549,39 @@ static int hclge_dbg_dump_fd_tcam(struct hclge_dev *hdev, char *buf, int len) ...@@ -1549,6 +1549,39 @@ static int hclge_dbg_dump_fd_tcam(struct hclge_dev *hdev, char *buf, int len)
return ret; return ret;
} }
static int hclge_dbg_dump_fd_counter(struct hclge_dev *hdev, char *buf, int len)
{
u8 func_num = pci_num_vf(hdev->pdev) + 1; /* pf and enabled vf num */
struct hclge_fd_ad_cnt_read_cmd *req;
char str_id[HCLGE_DBG_ID_LEN];
struct hclge_desc desc;
int pos = 0;
int ret;
u64 cnt;
u8 i;
pos += scnprintf(buf + pos, len - pos,
"func_id\thit_times\n");
for (i = 0; i < func_num; i++) {
hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_FD_CNT_OP, true);
req = (struct hclge_fd_ad_cnt_read_cmd *)desc.data;
req->index = cpu_to_le16(i);
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
if (ret) {
dev_err(&hdev->pdev->dev, "failed to get fd counter, ret = %d\n",
ret);
return ret;
}
cnt = le64_to_cpu(req->cnt);
hclge_dbg_get_func_id_str(str_id, i);
pos += scnprintf(buf + pos, len - pos,
"%s\t%llu\n", str_id, cnt);
}
return 0;
}
int hclge_dbg_dump_rst_info(struct hclge_dev *hdev, char *buf, int len) int hclge_dbg_dump_rst_info(struct hclge_dev *hdev, char *buf, int len)
{ {
int pos = 0; int pos = 0;
...@@ -1894,6 +1927,36 @@ static void hclge_dbg_dump_mac_list(struct hclge_dev *hdev, char *buf, int len, ...@@ -1894,6 +1927,36 @@ static void hclge_dbg_dump_mac_list(struct hclge_dev *hdev, char *buf, int len,
} }
} }
static int hclge_dbg_dump_umv_info(struct hclge_dev *hdev, char *buf, int len)
{
u8 func_num = pci_num_vf(hdev->pdev) + 1;
struct hclge_vport *vport;
int pos = 0;
u8 i;
pos += scnprintf(buf, len, "num_alloc_vport : %u\n",
hdev->num_alloc_vport);
pos += scnprintf(buf + pos, len - pos, "max_umv_size : %u\n",
hdev->max_umv_size);
pos += scnprintf(buf + pos, len - pos, "wanted_umv_size : %u\n",
hdev->wanted_umv_size);
pos += scnprintf(buf + pos, len - pos, "priv_umv_size : %u\n",
hdev->priv_umv_size);
mutex_lock(&hdev->vport_lock);
pos += scnprintf(buf + pos, len - pos, "share_umv_size : %u\n",
hdev->share_umv_size);
for (i = 0; i < func_num; i++) {
vport = &hdev->vport[i];
pos += scnprintf(buf + pos, len - pos,
"vport(%u) used_umv_num : %u\n",
i, vport->used_umv_num);
}
mutex_unlock(&hdev->vport_lock);
return 0;
}
static int hclge_get_vlan_rx_offload_cfg(struct hclge_dev *hdev, u8 vf_id, static int hclge_get_vlan_rx_offload_cfg(struct hclge_dev *hdev, u8 vf_id,
struct hclge_dbg_vlan_cfg *vlan_cfg) struct hclge_dbg_vlan_cfg *vlan_cfg)
{ {
...@@ -2375,6 +2438,14 @@ static const struct hclge_dbg_func hclge_dbg_cmd_func[] = { ...@@ -2375,6 +2438,14 @@ static const struct hclge_dbg_func hclge_dbg_cmd_func[] = {
.cmd = HNAE3_DBG_CMD_VLAN_CONFIG, .cmd = HNAE3_DBG_CMD_VLAN_CONFIG,
.dbg_dump = hclge_dbg_dump_vlan_config, .dbg_dump = hclge_dbg_dump_vlan_config,
}, },
{
.cmd = HNAE3_DBG_CMD_FD_COUNTER,
.dbg_dump = hclge_dbg_dump_fd_counter,
},
{
.cmd = HNAE3_DBG_CMD_UMV_INFO,
.dbg_dump = hclge_dbg_dump_umv_info,
},
}; };
int hclge_dbg_read_cmd(struct hnae3_handle *handle, enum hnae3_dbg_cmd cmd, int hclge_dbg_read_cmd(struct hnae3_handle *handle, enum hnae3_dbg_cmd cmd,
......
...@@ -6000,8 +6000,14 @@ static int hclge_config_action(struct hclge_dev *hdev, u8 stage, ...@@ -6000,8 +6000,14 @@ static int hclge_config_action(struct hclge_dev *hdev, u8 stage,
ad_data.queue_id = rule->queue_id; ad_data.queue_id = rule->queue_id;
} }
if (hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1]) {
ad_data.use_counter = true;
ad_data.counter_id = rule->vf_id %
hdev->fd_cfg.cnt_num[HCLGE_FD_STAGE_1];
} else {
ad_data.use_counter = false; ad_data.use_counter = false;
ad_data.counter_id = 0; ad_data.counter_id = 0;
}
ad_data.use_next_stage = false; ad_data.use_next_stage = false;
ad_data.next_input_key = 0; ad_data.next_input_key = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment