net: hns3: Add "queue map" information query function
This patch prints queue map information. debugfs command: echo dump queue map > cmd Sample Command: root@(none)# echo queue map > cmd local queue id | global queue id | vector id 0 32 769 1 33 770 2 34 771 3 35 772 4 36 773 5 37 774 6 38 775 7 39 776 8 40 777 9 41 778 10 42 779 11 43 780 12 44 781 13 45 782 14 46 783 15 47 784 root@(none)# Signed-off-by: liuzhongzhu <liuzhongzhu@huawei.com> Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c0ebebb9cc
commit
0c29d1912b
@ -39,6 +39,7 @@ enum HCLGE_MBX_OPCODE {
|
|||||||
HCLGE_MBX_KEEP_ALIVE, /* (VF -> PF) send keep alive cmd */
|
HCLGE_MBX_KEEP_ALIVE, /* (VF -> PF) send keep alive cmd */
|
||||||
HCLGE_MBX_SET_ALIVE, /* (VF -> PF) set alive state */
|
HCLGE_MBX_SET_ALIVE, /* (VF -> PF) set alive state */
|
||||||
HCLGE_MBX_SET_MTU, /* (VF -> PF) set mtu */
|
HCLGE_MBX_SET_MTU, /* (VF -> PF) set mtu */
|
||||||
|
HCLGE_MBX_GET_QID_IN_PF, /* (VF -> PF) get queue id in pf */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* below are per-VF mac-vlan subcodes */
|
/* below are per-VF mac-vlan subcodes */
|
||||||
|
@ -460,6 +460,7 @@ struct hnae3_ae_ops {
|
|||||||
bool (*ae_dev_resetting)(struct hnae3_handle *handle);
|
bool (*ae_dev_resetting)(struct hnae3_handle *handle);
|
||||||
unsigned long (*ae_dev_reset_cnt)(struct hnae3_handle *handle);
|
unsigned long (*ae_dev_reset_cnt)(struct hnae3_handle *handle);
|
||||||
int (*set_gro_en)(struct hnae3_handle *handle, int enable);
|
int (*set_gro_en)(struct hnae3_handle *handle, int enable);
|
||||||
|
u16 (*get_global_queue_id)(struct hnae3_handle *handle, u16 queue_id);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct hnae3_dcb_ops {
|
struct hnae3_dcb_ops {
|
||||||
|
@ -125,6 +125,36 @@ static int hns3_dbg_queue_info(struct hnae3_handle *h, char *cmd_buf)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hns3_dbg_queue_map(struct hnae3_handle *h)
|
||||||
|
{
|
||||||
|
struct hns3_nic_priv *priv = h->priv;
|
||||||
|
struct hns3_nic_ring_data *ring_data;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!h->ae_algo->ops->get_global_queue_id)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
dev_info(&h->pdev->dev, "map info for queue id and vector id\n");
|
||||||
|
dev_info(&h->pdev->dev,
|
||||||
|
"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);
|
||||||
|
ring_data = &priv->ring_data[i];
|
||||||
|
if (!ring_data || !ring_data->ring ||
|
||||||
|
!ring_data->ring->tqp_vector)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
dev_info(&h->pdev->dev,
|
||||||
|
" %4d %4d %4d\n",
|
||||||
|
i, global_qid,
|
||||||
|
ring_data->ring->tqp_vector->vector_irq);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int hns3_dbg_bd_info(struct hnae3_handle *h, char *cmd_buf)
|
static int hns3_dbg_bd_info(struct hnae3_handle *h, char *cmd_buf)
|
||||||
{
|
{
|
||||||
struct hns3_nic_priv *priv = h->priv;
|
struct hns3_nic_priv *priv = h->priv;
|
||||||
@ -207,6 +237,7 @@ 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");
|
||||||
dev_info(&h->pdev->dev, "bd info [q_num] <bd index>\n");
|
dev_info(&h->pdev->dev, "bd info [q_num] <bd index>\n");
|
||||||
dev_info(&h->pdev->dev, "dump fd tcam\n");
|
dev_info(&h->pdev->dev, "dump fd tcam\n");
|
||||||
dev_info(&h->pdev->dev, "dump tc\n");
|
dev_info(&h->pdev->dev, "dump tc\n");
|
||||||
@ -303,6 +334,8 @@ static ssize_t hns3_dbg_cmd_write(struct file *filp, const char __user *buffer,
|
|||||||
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 (strncmp(cmd_buf, "bd info", 7) == 0)
|
else if (strncmp(cmd_buf, "bd info", 7) == 0)
|
||||||
ret = hns3_dbg_bd_info(handle, cmd_buf);
|
ret = hns3_dbg_bd_info(handle, cmd_buf);
|
||||||
else if (handle->ae_algo->ops->dbg_run_cmd)
|
else if (handle->ae_algo->ops->dbg_run_cmd)
|
||||||
|
@ -6602,8 +6602,7 @@ static int hclge_get_reset_status(struct hclge_dev *hdev, u16 queue_id)
|
|||||||
return hnae3_get_bit(req->ready_to_reset, HCLGE_TQP_RESET_B);
|
return hnae3_get_bit(req->ready_to_reset, HCLGE_TQP_RESET_B);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16 hclge_covert_handle_qid_global(struct hnae3_handle *handle,
|
u16 hclge_covert_handle_qid_global(struct hnae3_handle *handle, u16 queue_id)
|
||||||
u16 queue_id)
|
|
||||||
{
|
{
|
||||||
struct hnae3_queue *queue;
|
struct hnae3_queue *queue;
|
||||||
struct hclge_tqp *tqp;
|
struct hclge_tqp *tqp;
|
||||||
@ -7975,6 +7974,7 @@ static const struct hnae3_ae_ops hclge_ops = {
|
|||||||
.ae_dev_resetting = hclge_ae_dev_resetting,
|
.ae_dev_resetting = hclge_ae_dev_resetting,
|
||||||
.ae_dev_reset_cnt = hclge_ae_dev_reset_cnt,
|
.ae_dev_reset_cnt = hclge_ae_dev_reset_cnt,
|
||||||
.set_gro_en = hclge_gro_en,
|
.set_gro_en = hclge_gro_en,
|
||||||
|
.get_global_queue_id = hclge_covert_handle_qid_global,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct hnae3_ae_algo ae_algo = {
|
static struct hnae3_ae_algo ae_algo = {
|
||||||
|
@ -874,4 +874,5 @@ int hclge_vport_start(struct hclge_vport *vport);
|
|||||||
void hclge_vport_stop(struct hclge_vport *vport);
|
void hclge_vport_stop(struct hclge_vport *vport);
|
||||||
int hclge_set_vport_mtu(struct hclge_vport *vport, int new_mtu);
|
int hclge_set_vport_mtu(struct hclge_vport *vport, int new_mtu);
|
||||||
int hclge_dbg_run_cmd(struct hnae3_handle *handle, char *cmd_buf);
|
int hclge_dbg_run_cmd(struct hnae3_handle *handle, char *cmd_buf);
|
||||||
|
u16 hclge_covert_handle_qid_global(struct hnae3_handle *handle, u16 queue_id);
|
||||||
#endif
|
#endif
|
||||||
|
@ -413,6 +413,19 @@ static int hclge_set_vf_mtu(struct hclge_vport *vport,
|
|||||||
return hclge_gen_resp_to_vf(vport, mbx_req, ret, NULL, 0);
|
return hclge_gen_resp_to_vf(vport, mbx_req, ret, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hclge_get_queue_id_in_pf(struct hclge_vport *vport,
|
||||||
|
struct hclge_mbx_vf_to_pf_cmd *mbx_req)
|
||||||
|
{
|
||||||
|
u16 queue_id, qid_in_pf;
|
||||||
|
u8 resp_data[2];
|
||||||
|
|
||||||
|
memcpy(&queue_id, &mbx_req->msg[2], sizeof(queue_id));
|
||||||
|
qid_in_pf = hclge_covert_handle_qid_global(&vport->nic, queue_id);
|
||||||
|
memcpy(resp_data, &qid_in_pf, sizeof(qid_in_pf));
|
||||||
|
|
||||||
|
return hclge_gen_resp_to_vf(vport, mbx_req, 0, resp_data, 2);
|
||||||
|
}
|
||||||
|
|
||||||
static bool hclge_cmd_crq_empty(struct hclge_hw *hw)
|
static bool hclge_cmd_crq_empty(struct hclge_hw *hw)
|
||||||
{
|
{
|
||||||
u32 tail = hclge_read_dev(hw, HCLGE_NIC_CRQ_TAIL_REG);
|
u32 tail = hclge_read_dev(hw, HCLGE_NIC_CRQ_TAIL_REG);
|
||||||
@ -533,6 +546,13 @@ void hclge_mbx_handler(struct hclge_dev *hdev)
|
|||||||
dev_err(&hdev->pdev->dev,
|
dev_err(&hdev->pdev->dev,
|
||||||
"VF fail(%d) to set mtu\n", ret);
|
"VF fail(%d) to set mtu\n", ret);
|
||||||
break;
|
break;
|
||||||
|
case HCLGE_MBX_GET_QID_IN_PF:
|
||||||
|
ret = hclge_get_queue_id_in_pf(vport, req);
|
||||||
|
if (ret)
|
||||||
|
dev_err(&hdev->pdev->dev,
|
||||||
|
"PF failed(%d) to get qid for VF\n",
|
||||||
|
ret);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err(&hdev->pdev->dev,
|
dev_err(&hdev->pdev->dev,
|
||||||
"un-supported mailbox message, code = %d\n",
|
"un-supported mailbox message, code = %d\n",
|
||||||
|
@ -256,6 +256,23 @@ static int hclgevf_get_queue_info(struct hclgevf_dev *hdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u16 hclgevf_get_qid_global(struct hnae3_handle *handle, u16 queue_id)
|
||||||
|
{
|
||||||
|
struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
|
||||||
|
u8 msg_data[2], resp_data[2];
|
||||||
|
u16 qid_in_pf = 0;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
memcpy(&msg_data[0], &queue_id, sizeof(queue_id));
|
||||||
|
|
||||||
|
ret = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_QID_IN_PF, 0, msg_data,
|
||||||
|
2, true, resp_data, 2);
|
||||||
|
if (!ret)
|
||||||
|
qid_in_pf = *(u16 *)resp_data;
|
||||||
|
|
||||||
|
return qid_in_pf;
|
||||||
|
}
|
||||||
|
|
||||||
static int hclgevf_alloc_tqps(struct hclgevf_dev *hdev)
|
static int hclgevf_alloc_tqps(struct hclgevf_dev *hdev)
|
||||||
{
|
{
|
||||||
struct hclgevf_tqp *tqp;
|
struct hclgevf_tqp *tqp;
|
||||||
@ -2642,6 +2659,7 @@ static const struct hnae3_ae_ops hclgevf_ops = {
|
|||||||
.ae_dev_reset_cnt = hclgevf_ae_dev_reset_cnt,
|
.ae_dev_reset_cnt = hclgevf_ae_dev_reset_cnt,
|
||||||
.set_gro_en = hclgevf_gro_en,
|
.set_gro_en = hclgevf_gro_en,
|
||||||
.set_mtu = hclgevf_set_mtu,
|
.set_mtu = hclgevf_set_mtu,
|
||||||
|
.get_global_queue_id = hclgevf_get_qid_global,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct hnae3_ae_algo ae_algovf = {
|
static struct hnae3_ae_algo ae_algovf = {
|
||||||
|
Loading…
Reference in New Issue
Block a user