Commit 44ea803e authored by Ciara Loftus's avatar Ciara Loftus Committed by Tony Nguyen

i40e: introduce new dump desc XDP command

Interfaces already exist for dumping Rx and Tx descriptor information.
Introduce another for doing the same for XDP descriptors.
Signed-off-by: default avatarCiara Loftus <ciara.loftus@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 890c402c
...@@ -10,6 +10,12 @@ ...@@ -10,6 +10,12 @@
static struct dentry *i40e_dbg_root; static struct dentry *i40e_dbg_root;
enum ring_type {
RING_TYPE_RX,
RING_TYPE_TX,
RING_TYPE_XDP
};
/** /**
* i40e_dbg_find_vsi - searches for the vsi with the given seid * i40e_dbg_find_vsi - searches for the vsi with the given seid
* @pf: the PF structure to search for the vsi * @pf: the PF structure to search for the vsi
...@@ -530,11 +536,12 @@ static void i40e_dbg_dump_aq_desc(struct i40e_pf *pf) ...@@ -530,11 +536,12 @@ static void i40e_dbg_dump_aq_desc(struct i40e_pf *pf)
* @ring_id: ring id entered by user * @ring_id: ring id entered by user
* @desc_n: descriptor number entered by user * @desc_n: descriptor number entered by user
* @pf: the i40e_pf created in command write * @pf: the i40e_pf created in command write
* @is_rx_ring: true if rx, false if tx * @type: enum describing whether ring is RX, TX or XDP
**/ **/
static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
struct i40e_pf *pf, bool is_rx_ring) struct i40e_pf *pf, enum ring_type type)
{ {
bool is_rx_ring = type == RING_TYPE_RX;
struct i40e_tx_desc *txd; struct i40e_tx_desc *txd;
union i40e_rx_desc *rxd; union i40e_rx_desc *rxd;
struct i40e_ring *ring; struct i40e_ring *ring;
...@@ -546,6 +553,10 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -546,6 +553,10 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
dev_info(&pf->pdev->dev, "vsi %d not found\n", vsi_seid); dev_info(&pf->pdev->dev, "vsi %d not found\n", vsi_seid);
return; return;
} }
if (type == RING_TYPE_XDP && !i40e_enabled_xdp_vsi(vsi)) {
dev_info(&pf->pdev->dev, "XDP not enabled on VSI %d\n", vsi_seid);
return;
}
if (ring_id >= vsi->num_queue_pairs || ring_id < 0) { if (ring_id >= vsi->num_queue_pairs || ring_id < 0) {
dev_info(&pf->pdev->dev, "ring %d not found\n", ring_id); dev_info(&pf->pdev->dev, "ring %d not found\n", ring_id);
return; return;
...@@ -557,15 +568,32 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -557,15 +568,32 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
return; return;
} }
ring = kmemdup(is_rx_ring switch (type) {
? vsi->rx_rings[ring_id] : vsi->tx_rings[ring_id], case RING_TYPE_RX:
sizeof(*ring), GFP_KERNEL); ring = kmemdup(vsi->rx_rings[ring_id], sizeof(*ring), GFP_KERNEL);
break;
case RING_TYPE_TX:
ring = kmemdup(vsi->tx_rings[ring_id], sizeof(*ring), GFP_KERNEL);
break;
case RING_TYPE_XDP:
ring = kmemdup(vsi->xdp_rings[ring_id], sizeof(*ring), GFP_KERNEL);
break;
}
if (!ring) if (!ring)
return; return;
if (cnt == 2) { if (cnt == 2) {
dev_info(&pf->pdev->dev, "vsi = %02i %s ring = %02i\n", switch (type) {
vsi_seid, is_rx_ring ? "rx" : "tx", ring_id); case RING_TYPE_RX:
dev_info(&pf->pdev->dev, "VSI = %02i Rx ring = %02i\n", vsi_seid, ring_id);
break;
case RING_TYPE_TX:
dev_info(&pf->pdev->dev, "VSI = %02i Tx ring = %02i\n", vsi_seid, ring_id);
break;
case RING_TYPE_XDP:
dev_info(&pf->pdev->dev, "VSI = %02i XDP ring = %02i\n", vsi_seid, ring_id);
break;
}
for (i = 0; i < ring->count; i++) { for (i = 0; i < ring->count; i++) {
if (!is_rx_ring) { if (!is_rx_ring) {
txd = I40E_TX_DESC(ring, i); txd = I40E_TX_DESC(ring, i);
...@@ -603,7 +631,7 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -603,7 +631,7 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
rxd->read.rsvd1, rxd->read.rsvd2); rxd->read.rsvd1, rxd->read.rsvd2);
} }
} else { } else {
dev_info(&pf->pdev->dev, "dump desc rx/tx <vsi_seid> <ring_id> [<desc_n>]\n"); dev_info(&pf->pdev->dev, "dump desc rx/tx/xdp <vsi_seid> <ring_id> [<desc_n>]\n");
} }
out: out:
...@@ -960,13 +988,19 @@ static ssize_t i40e_dbg_command_write(struct file *filp, ...@@ -960,13 +988,19 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
cnt = sscanf(&cmd_buf[12], "%i %i %i", cnt = sscanf(&cmd_buf[12], "%i %i %i",
&vsi_seid, &ring_id, &desc_n); &vsi_seid, &ring_id, &desc_n);
i40e_dbg_dump_desc(cnt, vsi_seid, ring_id, i40e_dbg_dump_desc(cnt, vsi_seid, ring_id,
desc_n, pf, true); desc_n, pf, RING_TYPE_RX);
} else if (strncmp(&cmd_buf[10], "tx", 2) } else if (strncmp(&cmd_buf[10], "tx", 2)
== 0) { == 0) {
cnt = sscanf(&cmd_buf[12], "%i %i %i", cnt = sscanf(&cmd_buf[12], "%i %i %i",
&vsi_seid, &ring_id, &desc_n); &vsi_seid, &ring_id, &desc_n);
i40e_dbg_dump_desc(cnt, vsi_seid, ring_id, i40e_dbg_dump_desc(cnt, vsi_seid, ring_id,
desc_n, pf, false); desc_n, pf, RING_TYPE_TX);
} else if (strncmp(&cmd_buf[10], "xdp", 3)
== 0) {
cnt = sscanf(&cmd_buf[13], "%i %i %i",
&vsi_seid, &ring_id, &desc_n);
i40e_dbg_dump_desc(cnt, vsi_seid, ring_id,
desc_n, pf, RING_TYPE_XDP);
} else if (strncmp(&cmd_buf[10], "aq", 2) == 0) { } else if (strncmp(&cmd_buf[10], "aq", 2) == 0) {
i40e_dbg_dump_aq_desc(pf); i40e_dbg_dump_aq_desc(pf);
} else { } else {
...@@ -974,6 +1008,8 @@ static ssize_t i40e_dbg_command_write(struct file *filp, ...@@ -974,6 +1008,8 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
"dump desc tx <vsi_seid> <ring_id> [<desc_n>]\n"); "dump desc tx <vsi_seid> <ring_id> [<desc_n>]\n");
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
"dump desc rx <vsi_seid> <ring_id> [<desc_n>]\n"); "dump desc rx <vsi_seid> <ring_id> [<desc_n>]\n");
dev_info(&pf->pdev->dev,
"dump desc xdp <vsi_seid> <ring_id> [<desc_n>]\n");
dev_info(&pf->pdev->dev, "dump desc aq\n"); dev_info(&pf->pdev->dev, "dump desc aq\n");
} }
} else if (strncmp(&cmd_buf[5], "reset stats", 11) == 0) { } else if (strncmp(&cmd_buf[5], "reset stats", 11) == 0) {
...@@ -1144,7 +1180,7 @@ static ssize_t i40e_dbg_command_write(struct file *filp, ...@@ -1144,7 +1180,7 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
buff = NULL; buff = NULL;
} else { } else {
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
"dump desc tx <vsi_seid> <ring_id> [<desc_n>], dump desc rx <vsi_seid> <ring_id> [<desc_n>],\n"); "dump desc tx <vsi_seid> <ring_id> [<desc_n>], dump desc rx <vsi_seid> <ring_id> [<desc_n>], dump desc xdp <vsi_seid> <ring_id> [<desc_n>],\n");
dev_info(&pf->pdev->dev, "dump switch\n"); dev_info(&pf->pdev->dev, "dump switch\n");
dev_info(&pf->pdev->dev, "dump vsi [seid]\n"); dev_info(&pf->pdev->dev, "dump vsi [seid]\n");
dev_info(&pf->pdev->dev, "dump reset stats\n"); dev_info(&pf->pdev->dev, "dump reset stats\n");
...@@ -1560,6 +1596,7 @@ static ssize_t i40e_dbg_command_write(struct file *filp, ...@@ -1560,6 +1596,7 @@ static ssize_t i40e_dbg_command_write(struct file *filp,
dev_info(&pf->pdev->dev, " dump vsi [seid]\n"); dev_info(&pf->pdev->dev, " dump vsi [seid]\n");
dev_info(&pf->pdev->dev, " dump desc tx <vsi_seid> <ring_id> [<desc_n>]\n"); dev_info(&pf->pdev->dev, " dump desc tx <vsi_seid> <ring_id> [<desc_n>]\n");
dev_info(&pf->pdev->dev, " dump desc rx <vsi_seid> <ring_id> [<desc_n>]\n"); dev_info(&pf->pdev->dev, " dump desc rx <vsi_seid> <ring_id> [<desc_n>]\n");
dev_info(&pf->pdev->dev, " dump desc xdp <vsi_seid> <ring_id> [<desc_n>]\n");
dev_info(&pf->pdev->dev, " dump desc aq\n"); dev_info(&pf->pdev->dev, " dump desc aq\n");
dev_info(&pf->pdev->dev, " dump reset stats\n"); dev_info(&pf->pdev->dev, " dump reset stats\n");
dev_info(&pf->pdev->dev, " dump debug fwdata <cluster_id> <table_id> <index>\n"); dev_info(&pf->pdev->dev, " dump debug fwdata <cluster_id> <table_id> <index>\n");
......
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