diff options
| author | Shannon Nelson <shannon.nelson@intel.com> | 2014-01-15 15:18:23 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-01-16 17:20:37 -0800 | 
| commit | 68bf94aae1873cb112385830e1a98a36bf154970 (patch) | |
| tree | 24a10d1ae6cee4c83851559e6fb88686b41cb970 /drivers/net/ethernet/intel | |
| parent | b01f236c66b214a73816a4083050f73481638a72 (diff) | |
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: Shannon Nelson <shannon.nelson@intel.com>
Tested-by: Kavindya Deegala <kavindya.s.deegala@intel.com>
Signed-off-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/intel')
| -rw-r--r-- | drivers/net/ethernet/intel/i40e/i40e_debugfs.c | 67 | 
1 files changed, 39 insertions, 28 deletions
| diff --git a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c index 36a5cc89bf0b..913ba9e64f58 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_debugfs.c +++ b/drivers/net/ethernet/intel/i40e/i40e_debugfs.c @@ -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)) +			if (!is_rx_ring) { +				txd = I40E_TX_DESC(&ring, i);  				dev_info(&pf->pdev->dev, -					 "   d[%03i] = 0x%016llx 0x%016llx\n", i, -					 ds->read.pkt_addr, ds->read.hdr_addr); -			else +					 "   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");  	} | 
