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: Ciara Loftus <ciara.loftus@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
890c402c7b
commit
44ea803e2f
1 changed files with 48 additions and 11 deletions
|
@ -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)
|
||||||
* @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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
"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,
|
||||||
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,
|
||||||
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");
|
||||||
|
|
Loading…
Add table
Reference in a new issue