net: hns3: refactor queue map of debugfs
Currently, the debugfs command for queue map is implemented by "echo xxxx > cmd", and record the information in dmesg. It's unnecessary and heavy. To improve it, create a single file "queue_map" for it, and query it by command "cat queue_map", return the result to userspace, rather than record in dmesg. The display style is below: $ cat queue_map local_queue_id global_queue_id vector_id 0 0 341 Signed-off-by: Hao Chen <chenhao288@hisilicon.com> Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
365e860aa7
commit
d2f737cf21
@ -276,6 +276,7 @@ enum hnae3_dbg_cmd {
|
|||||||
HNAE3_DBG_CMD_REG_TQP,
|
HNAE3_DBG_CMD_REG_TQP,
|
||||||
HNAE3_DBG_CMD_REG_MAC,
|
HNAE3_DBG_CMD_REG_MAC,
|
||||||
HNAE3_DBG_CMD_REG_DCB,
|
HNAE3_DBG_CMD_REG_DCB,
|
||||||
|
HNAE3_DBG_CMD_QUEUE_MAP,
|
||||||
HNAE3_DBG_CMD_UNKNOWN,
|
HNAE3_DBG_CMD_UNKNOWN,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -26,6 +26,9 @@ static struct hns3_dbg_dentry_info hns3_dbg_dentry[] = {
|
|||||||
{
|
{
|
||||||
.name = "reg"
|
.name = "reg"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.name = "queue"
|
||||||
|
},
|
||||||
/* keep common at the bottom and add new directory above */
|
/* keep common at the bottom and add new directory above */
|
||||||
{
|
{
|
||||||
.name = "common"
|
.name = "common"
|
||||||
@ -212,6 +215,13 @@ 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 = "queue_map",
|
||||||
|
.cmd = HNAE3_DBG_CMD_QUEUE_MAP,
|
||||||
|
.dentry = HNS3_DBG_DENTRY_QUEUE,
|
||||||
|
.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[] = {
|
||||||
@ -403,27 +413,44 @@ static int hns3_dbg_queue_info(struct hnae3_handle *h,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hns3_dbg_queue_map(struct hnae3_handle *h)
|
static const struct hns3_dbg_item queue_map_items[] = {
|
||||||
|
{ "local_queue_id", 2 },
|
||||||
|
{ "global_queue_id", 2 },
|
||||||
|
{ "vector_id", 2 },
|
||||||
|
};
|
||||||
|
|
||||||
|
static int hns3_dbg_queue_map(struct hnae3_handle *h, char *buf, int len)
|
||||||
{
|
{
|
||||||
|
char data_str[ARRAY_SIZE(queue_map_items)][HNS3_DBG_DATA_STR_LEN];
|
||||||
|
char *result[ARRAY_SIZE(queue_map_items)];
|
||||||
struct hns3_nic_priv *priv = h->priv;
|
struct hns3_nic_priv *priv = h->priv;
|
||||||
int i;
|
char content[HNS3_DBG_INFO_LEN];
|
||||||
|
int pos = 0;
|
||||||
|
int j;
|
||||||
|
u32 i;
|
||||||
|
|
||||||
if (!h->ae_algo->ops->get_global_queue_id)
|
if (!h->ae_algo->ops->get_global_queue_id)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
dev_info(&h->pdev->dev, "map info for queue id and vector id\n");
|
for (i = 0; i < ARRAY_SIZE(queue_map_items); i++)
|
||||||
dev_info(&h->pdev->dev,
|
result[i] = &data_str[i][0];
|
||||||
"local queue id | global queue id | vector id\n");
|
|
||||||
for (i = 0; i < h->kinfo.num_tqps; i++) {
|
|
||||||
u16 global_qid;
|
|
||||||
|
|
||||||
global_qid = h->ae_algo->ops->get_global_queue_id(h, i);
|
hns3_dbg_fill_content(content, sizeof(content), queue_map_items,
|
||||||
|
NULL, ARRAY_SIZE(queue_map_items));
|
||||||
|
pos += scnprintf(buf + pos, len - pos, "%s", content);
|
||||||
|
for (i = 0; i < h->kinfo.num_tqps; i++) {
|
||||||
if (!priv->ring || !priv->ring[i].tqp_vector)
|
if (!priv->ring || !priv->ring[i].tqp_vector)
|
||||||
continue;
|
continue;
|
||||||
|
j = 0;
|
||||||
dev_info(&h->pdev->dev,
|
sprintf(result[j++], "%u", i);
|
||||||
" %4d %4u %4d\n",
|
sprintf(result[j++], "%u",
|
||||||
i, global_qid, priv->ring[i].tqp_vector->vector_irq);
|
h->ae_algo->ops->get_global_queue_id(h, i));
|
||||||
|
sprintf(result[j++], "%u",
|
||||||
|
priv->ring[i].tqp_vector->vector_irq);
|
||||||
|
hns3_dbg_fill_content(content, sizeof(content), queue_map_items,
|
||||||
|
(const char **)result,
|
||||||
|
ARRAY_SIZE(queue_map_items));
|
||||||
|
pos += scnprintf(buf + pos, len - pos, "%s", content);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -590,7 +617,6 @@ static void hns3_dbg_help(struct hnae3_handle *h)
|
|||||||
{
|
{
|
||||||
dev_info(&h->pdev->dev, "available commands\n");
|
dev_info(&h->pdev->dev, "available commands\n");
|
||||||
dev_info(&h->pdev->dev, "queue info <number>\n");
|
dev_info(&h->pdev->dev, "queue info <number>\n");
|
||||||
dev_info(&h->pdev->dev, "queue map\n");
|
|
||||||
|
|
||||||
if (!hns3_is_phys_func(h->pdev))
|
if (!hns3_is_phys_func(h->pdev))
|
||||||
return;
|
return;
|
||||||
@ -717,8 +743,6 @@ static int hns3_dbg_check_cmd(struct hnae3_handle *handle, char *cmd_buf)
|
|||||||
hns3_dbg_help(handle);
|
hns3_dbg_help(handle);
|
||||||
else if (strncmp(cmd_buf, "queue info", 10) == 0)
|
else if (strncmp(cmd_buf, "queue info", 10) == 0)
|
||||||
ret = hns3_dbg_queue_info(handle, cmd_buf);
|
ret = hns3_dbg_queue_info(handle, cmd_buf);
|
||||||
else if (strncmp(cmd_buf, "queue map", 9) == 0)
|
|
||||||
ret = hns3_dbg_queue_map(handle);
|
|
||||||
else if (handle->ae_algo->ops->dbg_run_cmd)
|
else if (handle->ae_algo->ops->dbg_run_cmd)
|
||||||
ret = handle->ae_algo->ops->dbg_run_cmd(handle, cmd_buf);
|
ret = handle->ae_algo->ops->dbg_run_cmd(handle, cmd_buf);
|
||||||
else
|
else
|
||||||
@ -793,6 +817,10 @@ static int hns3_dbg_get_cmd_index(struct hnae3_handle *handle,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const struct hns3_dbg_func hns3_dbg_cmd_func[] = {
|
static const struct hns3_dbg_func hns3_dbg_cmd_func[] = {
|
||||||
|
{
|
||||||
|
.cmd = HNAE3_DBG_CMD_QUEUE_MAP,
|
||||||
|
.dbg_dump = hns3_dbg_queue_map,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.cmd = HNAE3_DBG_CMD_DEV_INFO,
|
.cmd = HNAE3_DBG_CMD_DEV_INFO,
|
||||||
.dbg_dump = hns3_dbg_dev_info,
|
.dbg_dump = hns3_dbg_dev_info,
|
||||||
|
@ -30,6 +30,7 @@ enum hns3_dbg_dentry_type {
|
|||||||
HNS3_DBG_DENTRY_RX_BD,
|
HNS3_DBG_DENTRY_RX_BD,
|
||||||
HNS3_DBG_DENTRY_MAC,
|
HNS3_DBG_DENTRY_MAC,
|
||||||
HNS3_DBG_DENTRY_REG,
|
HNS3_DBG_DENTRY_REG,
|
||||||
|
HNS3_DBG_DENTRY_QUEUE,
|
||||||
HNS3_DBG_DENTRY_COMMON,
|
HNS3_DBG_DENTRY_COMMON,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user