net: hns3: refactor dump serv info of debugfs
Currently, the debugfs command for serv info is implemented by "echo xxxx > cmd", and record the inforamtion in dmesg. It's unnecessary and heavy. To improve it, create a single file "serv_info" for it, and query it by command "cat serv_info", return the result to userspace, rather than record in dmesg. The display style is below: $ cat service_task_info local_clock: [ 114.203321] delta: 784(ms) last_service_task_processed: 4294918512(jiffies) last_service_task_cnt: 4 Signed-off-by: Yufeng Mo <moyufeng@huawei.com> Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
7b07ab06e6
commit
058c3be952
|
@ -288,6 +288,7 @@ enum hnae3_dbg_cmd {
|
|||
HNAE3_DBG_CMD_TX_QUEUE_INFO,
|
||||
HNAE3_DBG_CMD_FD_TCAM,
|
||||
HNAE3_DBG_CMD_MAC_TNL_STATUS,
|
||||
HNAE3_DBG_CMD_SERV_INFO,
|
||||
HNAE3_DBG_CMD_UNKNOWN,
|
||||
};
|
||||
|
||||
|
|
|
@ -302,6 +302,13 @@ static struct hns3_dbg_cmd_info hns3_dbg_cmd[] = {
|
|||
.buf_len = HNS3_DBG_READ_LEN,
|
||||
.init = hns3_dbg_common_file_init,
|
||||
},
|
||||
{
|
||||
.name = "service_task_info",
|
||||
.cmd = HNAE3_DBG_CMD_SERV_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[] = {
|
||||
|
|
|
@ -1590,12 +1590,26 @@ int hclge_dbg_dump_rst_info(struct hclge_dev *hdev, char *buf, int len)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void hclge_dbg_dump_serv_info(struct hclge_dev *hdev)
|
||||
static int hclge_dbg_dump_serv_info(struct hclge_dev *hdev, char *buf, int len)
|
||||
{
|
||||
dev_info(&hdev->pdev->dev, "last_serv_processed: %lu\n",
|
||||
hdev->last_serv_processed);
|
||||
dev_info(&hdev->pdev->dev, "last_serv_cnt: %lu\n",
|
||||
hdev->serv_processed_cnt);
|
||||
unsigned long rem_nsec;
|
||||
int pos = 0;
|
||||
u64 lc;
|
||||
|
||||
lc = local_clock();
|
||||
rem_nsec = do_div(lc, HCLGE_BILLION_NANO_SECONDS);
|
||||
|
||||
pos += scnprintf(buf + pos, len - pos, "local_clock: [%5lu.%06lu]\n",
|
||||
(unsigned long)lc, rem_nsec / 1000);
|
||||
pos += scnprintf(buf + pos, len - pos, "delta: %u(ms)\n",
|
||||
jiffies_to_msecs(jiffies - hdev->last_serv_processed));
|
||||
pos += scnprintf(buf + pos, len - pos,
|
||||
"last_service_task_processed: %lu(jiffies)\n",
|
||||
hdev->last_serv_processed);
|
||||
pos += scnprintf(buf + pos, len - pos, "last_service_task_cnt: %lu\n",
|
||||
hdev->serv_processed_cnt);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int hclge_dbg_dump_interrupt(struct hclge_dev *hdev, char *buf, int len)
|
||||
|
@ -1810,8 +1824,6 @@ static int hclge_dbg_dump_loopback(struct hclge_dev *hdev, char *buf, int len)
|
|||
static int
|
||||
hclge_dbg_dump_mac_tnl_status(struct hclge_dev *hdev, char *buf, int len)
|
||||
{
|
||||
#define HCLGE_BILLION_NANO_SECONDS 1000000000
|
||||
|
||||
struct hclge_mac_tnl_stats stats;
|
||||
unsigned long rem_nsec;
|
||||
int pos = 0;
|
||||
|
@ -1900,14 +1912,9 @@ int hclge_dbg_run_cmd(struct hnae3_handle *handle, const char *cmd_buf)
|
|||
struct hclge_vport *vport = hclge_get_vport(handle);
|
||||
struct hclge_dev *hdev = vport->back;
|
||||
|
||||
if (strncmp(cmd_buf, "dump serv info", 14) == 0) {
|
||||
hclge_dbg_dump_serv_info(hdev);
|
||||
} else {
|
||||
dev_info(&hdev->pdev->dev, "unknown command\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
dev_info(&hdev->pdev->dev, "unknown command\n");
|
||||
|
||||
return 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static const struct hclge_dbg_func hclge_dbg_cmd_func[] = {
|
||||
|
@ -2035,6 +2042,10 @@ static const struct hclge_dbg_func hclge_dbg_cmd_func[] = {
|
|||
.cmd = HNAE3_DBG_CMD_MAC_TNL_STATUS,
|
||||
.dbg_dump = hclge_dbg_dump_mac_tnl_status,
|
||||
},
|
||||
{
|
||||
.cmd = HNAE3_DBG_CMD_SERV_INFO,
|
||||
.dbg_dump = hclge_dbg_dump_serv_info,
|
||||
},
|
||||
};
|
||||
|
||||
int hclge_dbg_read_cmd(struct hnae3_handle *handle, enum hnae3_dbg_cmd cmd,
|
||||
|
|
|
@ -740,6 +740,8 @@ static const struct hclge_dbg_dfx_message hclge_dbg_tqp_reg[] = {
|
|||
#define HCLGE_DBG_DATA_STR_LEN 32
|
||||
#define HCLGE_DBG_TM_INFO_LEN 256
|
||||
|
||||
#define HCLGE_BILLION_NANO_SECONDS 1000000000
|
||||
|
||||
struct hclge_dbg_item {
|
||||
char name[HCLGE_DBG_ITEM_NAME_LEN];
|
||||
u16 interval; /* blank numbers after the item */
|
||||
|
|
Loading…
Reference in New Issue