提交 68bf94aa 编写于 作者: S Shannon Nelson 提交者: David S. Miller

i40e: check desc pointer before printing

Check that the descriptors were allocated before trying to dump
them to the logfile.  While we're there, de-trick-ify the code
so as to be easier to read and not abusing the types and unions.

Change-ID: I22898f4b22cecda3582d4d9e4018da9cd540f177
Signed-off-by: NShannon Nelson <shannon.nelson@intel.com>
Tested-by: NKavindya Deegala <kavindya.s.deegala@intel.com>
Signed-off-by: NAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 b01f236c
...@@ -752,7 +752,8 @@ static void i40e_dbg_dump_aq_desc(struct i40e_pf *pf) ...@@ -752,7 +752,8 @@ static void i40e_dbg_dump_aq_desc(struct i40e_pf *pf)
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, bool is_rx_ring)
{ {
union i40e_rx_desc *ds; struct i40e_tx_desc *txd;
union i40e_rx_desc *rxd;
struct i40e_ring ring; struct i40e_ring ring;
struct i40e_vsi *vsi; struct i40e_vsi *vsi;
int i; int i;
...@@ -766,7 +767,7 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -766,7 +767,7 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
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;
} }
if (!vsi->tx_rings) { if (!vsi->tx_rings || !vsi->tx_rings[0]->desc) {
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
"descriptor rings have not been allocated for vsi %d\n", "descriptor rings have not been allocated for vsi %d\n",
vsi_seid); vsi_seid);
...@@ -780,22 +781,27 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -780,22 +781,27 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
dev_info(&pf->pdev->dev, "vsi = %02i %s ring = %02i\n", dev_info(&pf->pdev->dev, "vsi = %02i %s ring = %02i\n",
vsi_seid, is_rx_ring ? "rx" : "tx", ring_id); vsi_seid, is_rx_ring ? "rx" : "tx", ring_id);
for (i = 0; i < ring.count; i++) { for (i = 0; i < ring.count; i++) {
if (is_rx_ring) if (!is_rx_ring) {
ds = I40E_RX_DESC(&ring, i); txd = I40E_TX_DESC(&ring, i);
else dev_info(&pf->pdev->dev,
ds = (union i40e_rx_desc *) " d[%03i] = 0x%016llx 0x%016llx\n",
I40E_TX_DESC(&ring, i); i, txd->buffer_addr,
if ((sizeof(union i40e_rx_desc) == txd->cmd_type_offset_bsz);
sizeof(union i40e_16byte_rx_desc)) || (!is_rx_ring)) } else if (sizeof(union i40e_rx_desc) ==
dev_info(&pf->pdev->dev, sizeof(union i40e_16byte_rx_desc)) {
" d[%03i] = 0x%016llx 0x%016llx\n", i, rxd = I40E_RX_DESC(&ring, i);
ds->read.pkt_addr, ds->read.hdr_addr); dev_info(&pf->pdev->dev,
else " d[%03i] = 0x%016llx 0x%016llx\n",
i, rxd->read.pkt_addr,
rxd->read.hdr_addr);
} else {
rxd = I40E_RX_DESC(&ring, i);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
" d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n", " d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n",
i, ds->read.pkt_addr, i, rxd->read.pkt_addr,
ds->read.hdr_addr, rxd->read.hdr_addr,
ds->read.rsvd1, ds->read.rsvd2); rxd->read.rsvd1, rxd->read.rsvd2);
}
} }
} else if (cnt == 3) { } else if (cnt == 3) {
if (desc_n >= ring.count || desc_n < 0) { if (desc_n >= ring.count || desc_n < 0) {
...@@ -803,22 +809,27 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n, ...@@ -803,22 +809,27 @@ static void i40e_dbg_dump_desc(int cnt, int vsi_seid, int ring_id, int desc_n,
"descriptor %d not found\n", desc_n); "descriptor %d not found\n", desc_n);
return; return;
} }
if (is_rx_ring) if (!is_rx_ring) {
ds = I40E_RX_DESC(&ring, desc_n); txd = I40E_TX_DESC(&ring, desc_n);
else
ds = (union i40e_rx_desc *)I40E_TX_DESC(&ring, desc_n);
if ((sizeof(union i40e_rx_desc) ==
sizeof(union i40e_16byte_rx_desc)) || (!is_rx_ring))
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
"vsi = %02i %s ring = %02i d[%03i] = 0x%016llx 0x%016llx\n", "vsi = %02i tx ring = %02i d[%03i] = 0x%016llx 0x%016llx\n",
vsi_seid, is_rx_ring ? "rx" : "tx", ring_id, vsi_seid, ring_id, desc_n,
desc_n, ds->read.pkt_addr, ds->read.hdr_addr); txd->buffer_addr, txd->cmd_type_offset_bsz);
else } else if (sizeof(union i40e_rx_desc) ==
sizeof(union i40e_16byte_rx_desc)) {
rxd = I40E_RX_DESC(&ring, desc_n);
dev_info(&pf->pdev->dev,
"vsi = %02i rx ring = %02i d[%03i] = 0x%016llx 0x%016llx\n",
vsi_seid, ring_id, desc_n,
rxd->read.pkt_addr, rxd->read.hdr_addr);
} else {
rxd = I40E_RX_DESC(&ring, desc_n);
dev_info(&pf->pdev->dev, dev_info(&pf->pdev->dev,
"vsi = %02i rx ring = %02i d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n", "vsi = %02i rx ring = %02i d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n",
vsi_seid, ring_id, vsi_seid, ring_id, desc_n,
desc_n, ds->read.pkt_addr, ds->read.hdr_addr, rxd->read.pkt_addr, rxd->read.hdr_addr,
ds->read.rsvd1, ds->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 <vsi_seid> <ring_id> [<desc_n>]\n");
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册