forked from Minki/linux
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: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
2eeae3a5cb
@ -290,8 +290,10 @@ enum hnae3_dbg_cmd {
|
||||
HNAE3_DBG_CMD_RX_QUEUE_INFO,
|
||||
HNAE3_DBG_CMD_TX_QUEUE_INFO,
|
||||
HNAE3_DBG_CMD_FD_TCAM,
|
||||
HNAE3_DBG_CMD_FD_COUNTER,
|
||||
HNAE3_DBG_CMD_MAC_TNL_STATUS,
|
||||
HNAE3_DBG_CMD_SERV_INFO,
|
||||
HNAE3_DBG_CMD_UMV_INFO,
|
||||
HNAE3_DBG_CMD_UNKNOWN,
|
||||
};
|
||||
|
||||
|
@ -323,6 +323,20 @@ static struct hns3_dbg_cmd_info hns3_dbg_cmd[] = {
|
||||
.buf_len = HNS3_DBG_READ_LEN,
|
||||
.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[] = {
|
||||
|
@ -248,6 +248,7 @@ enum hclge_opcode_type {
|
||||
HCLGE_OPC_FD_KEY_CONFIG = 0x1202,
|
||||
HCLGE_OPC_FD_TCAM_OP = 0x1203,
|
||||
HCLGE_OPC_FD_AD_OP = 0x1204,
|
||||
HCLGE_OPC_FD_CNT_OP = 0x1205,
|
||||
HCLGE_OPC_FD_USER_DEF_OP = 0x1207,
|
||||
|
||||
/* MDIO command */
|
||||
@ -1109,6 +1110,14 @@ struct hclge_fd_ad_config_cmd {
|
||||
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_M GENMASK(14, 0)
|
||||
#define HCLGE_FD_USER_DEF_EN_B 15
|
||||
|
@ -1549,6 +1549,39 @@ out:
|
||||
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 pos = 0;
|
||||
@ -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,
|
||||
struct hclge_dbg_vlan_cfg *vlan_cfg)
|
||||
{
|
||||
@ -2375,6 +2438,14 @@ static const struct hclge_dbg_func hclge_dbg_cmd_func[] = {
|
||||
.cmd = HNAE3_DBG_CMD_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,
|
||||
|
@ -6000,8 +6000,14 @@ static int hclge_config_action(struct hclge_dev *hdev, u8 stage,
|
||||
ad_data.queue_id = rule->queue_id;
|
||||
}
|
||||
|
||||
ad_data.use_counter = false;
|
||||
ad_data.counter_id = 0;
|
||||
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.counter_id = 0;
|
||||
}
|
||||
|
||||
ad_data.use_next_stage = false;
|
||||
ad_data.next_input_key = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user