Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 68bf94aa authored by Shannon Nelson's avatar Shannon Nelson Committed by David S. Miller
Browse files

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: default avatarShannon Nelson <shannon.nelson@intel.com>
Tested-by: default avatarKavindya Deegala <kavindya.s.deegala@intel.com>
Signed-off-by: default avatarAaron Brown <aaron.f.brown@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent b01f236c
Loading
Loading
Loading
Loading
+39 −28
Original line number Diff line number Diff line
@@ -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,
			       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_vsi *vsi;
	int i;
@@ -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);
		return;
	}
	if (!vsi->tx_rings) {
	if (!vsi->tx_rings || !vsi->tx_rings[0]->desc) {
		dev_info(&pf->pdev->dev,
			 "descriptor rings have not been allocated for vsi %d\n",
			 vsi_seid);
@@ -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",
			 vsi_seid, is_rx_ring ? "rx" : "tx", ring_id);
		for (i = 0; i < ring.count; i++) {
			if (is_rx_ring)
				ds = I40E_RX_DESC(&ring, i);
			else
				ds = (union i40e_rx_desc *)
					I40E_TX_DESC(&ring, i);
			if ((sizeof(union i40e_rx_desc) ==
			    sizeof(union i40e_16byte_rx_desc)) || (!is_rx_ring))
				dev_info(&pf->pdev->dev,
					 "   d[%03i] = 0x%016llx 0x%016llx\n", i,
					 ds->read.pkt_addr, ds->read.hdr_addr);
			else
			if (!is_rx_ring) {
				txd = I40E_TX_DESC(&ring, i);
				dev_info(&pf->pdev->dev,
					 "   d[%03i] = 0x%016llx 0x%016llx\n",
					 i, txd->buffer_addr,
					 txd->cmd_type_offset_bsz);
			} else if (sizeof(union i40e_rx_desc) ==
				   sizeof(union i40e_16byte_rx_desc)) {
				rxd = I40E_RX_DESC(&ring, i);
				dev_info(&pf->pdev->dev,
					 "   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,
					 "   d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n",
					 i, ds->read.pkt_addr,
					 ds->read.hdr_addr,
					 ds->read.rsvd1, ds->read.rsvd2);
					 i, rxd->read.pkt_addr,
					 rxd->read.hdr_addr,
					 rxd->read.rsvd1, rxd->read.rsvd2);
			}
		}
	} else if (cnt == 3) {
		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,
				 "descriptor %d not found\n", desc_n);
			return;
		}
		if (is_rx_ring)
			ds = I40E_RX_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))
		if (!is_rx_ring) {
			txd = I40E_TX_DESC(&ring, desc_n);
			dev_info(&pf->pdev->dev,
				 "vsi = %02i %s ring = %02i d[%03i] = 0x%016llx 0x%016llx\n",
				 vsi_seid, is_rx_ring ? "rx" : "tx", ring_id,
				 desc_n, ds->read.pkt_addr, ds->read.hdr_addr);
		else
				 "vsi = %02i tx ring = %02i d[%03i] = 0x%016llx 0x%016llx\n",
				 vsi_seid, ring_id, desc_n,
				 txd->buffer_addr, txd->cmd_type_offset_bsz);
		} 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,
				 "vsi = %02i rx ring = %02i d[%03i] = 0x%016llx 0x%016llx 0x%016llx 0x%016llx\n",
				 vsi_seid, ring_id,
				 desc_n, ds->read.pkt_addr, ds->read.hdr_addr,
				 ds->read.rsvd1, ds->read.rsvd2);
				 vsi_seid, ring_id, desc_n,
				 rxd->read.pkt_addr, rxd->read.hdr_addr,
				 rxd->read.rsvd1, rxd->read.rsvd2);
		}
	} else {
		dev_info(&pf->pdev->dev, "dump desc rx/tx <vsi_seid> <ring_id> [<desc_n>]\n");
	}