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

Commit 897ddc24 authored by Intiyaz Basha's avatar Intiyaz Basha Committed by David S. Miller
Browse files

liquidio: Enhanced ethtool stats



1. Added red_drops stats. Inbound packets dropped by RED, buffer exhaustion
2. Included fcs_err, jabber_err, l2_err and frame_err errors under
   rx_errors
3. Included fifo_err, dmac_drop, red_drops, fw_err_pko, fw_err_link and
   fw_err_drop under rx_dropped
4. Included max_collision_fail, max_deferral_fail, total_collisions,
   fw_err_pko, fw_err_link, fw_err_drop and fw_err_pki under tx_dropped
5. Counting dma mapping errors
6. Added some firmware stats description and removed for some

Signed-off-by: default avatarIntiyaz Basha <intiyaz.basha@cavium.com>
Acked-by: default avatarDerek Chickles <derek.chickles@cavium.com>
Acked-by: default avatarSatanand Burla <satananda.burla@cavium.com>
Signed-off-by: default avatarFelix Manlunas <felix.manlunas@cavium.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent ef53e9e1
Loading
Loading
Loading
Loading
+33 −21
Original line number Diff line number Diff line
@@ -96,11 +96,9 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = {
	"tx_packets",
	"rx_bytes",
	"tx_bytes",
	"rx_errors",	/*jabber_err+l2_err+frame_err */
	"tx_errors",	/*fw_err_pko+fw_err_link+fw_err_drop */
	"rx_dropped",   /*st->fromwire.total_rcvd - st->fromwire.fw_total_rcvd +
			 *st->fromwire.dmac_drop + st->fromwire.fw_err_drop
			 */
	"rx_errors",
	"tx_errors",
	"rx_dropped",
	"tx_dropped",

	"tx_total_sent",
@@ -119,7 +117,7 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = {
	"mac_tx_total_bytes",
	"mac_tx_mcast_pkts",
	"mac_tx_bcast_pkts",
	"mac_tx_ctl_packets",	/*oct->link_stats.fromhost.ctl_sent */
	"mac_tx_ctl_packets",
	"mac_tx_total_collisions",
	"mac_tx_one_collision",
	"mac_tx_multi_collison",
@@ -170,17 +168,17 @@ static const char oct_vf_stats_strings[][ETH_GSTRING_LEN] = {
	"tx_packets",
	"rx_bytes",
	"tx_bytes",
	"rx_errors", /* jabber_err + l2_err+frame_err */
	"tx_errors", /* fw_err_pko + fw_err_link+fw_err_drop */
	"rx_dropped", /* total_rcvd - fw_total_rcvd + dmac_drop + fw_err_drop */
	"rx_errors",
	"tx_errors",
	"rx_dropped",
	"tx_dropped",
	"link_state_changes",
};

/* statistics of host tx queue */
static const char oct_iq_stats_strings[][ETH_GSTRING_LEN] = {
	"packets",		/*oct->instr_queue[iq_no]->stats.tx_done*/
	"bytes",		/*oct->instr_queue[iq_no]->stats.tx_tot_bytes*/
	"packets",
	"bytes",
	"dropped",
	"iq_busy",
	"sgentry_sent",
@@ -197,13 +195,9 @@ static const char oct_iq_stats_strings[][ETH_GSTRING_LEN] = {

/* statistics of host rx queue */
static const char oct_droq_stats_strings[][ETH_GSTRING_LEN] = {
	"packets",		/*oct->droq[oq_no]->stats.rx_pkts_received */
	"bytes",		/*oct->droq[oq_no]->stats.rx_bytes_received */
	"dropped",		/*oct->droq[oq_no]->stats.rx_dropped+
				 *oct->droq[oq_no]->stats.dropped_nodispatch+
				 *oct->droq[oq_no]->stats.dropped_toomany+
				 *oct->droq[oq_no]->stats.dropped_nomem
				 */
	"packets",
	"bytes",
	"dropped",
	"dropped_nomem",
	"dropped_toomany",
	"fw_dropped",
@@ -1080,16 +1074,33 @@ lio_get_ethtool_stats(struct net_device *netdev,
	data[i++] = CVM_CAST64(netstats->rx_bytes);
	/*sum of oct->instr_queue[iq_no]->stats.tx_tot_bytes */
	data[i++] = CVM_CAST64(netstats->tx_bytes);
	data[i++] = CVM_CAST64(netstats->rx_errors);
	data[i++] = CVM_CAST64(netstats->rx_errors +
			       oct_dev->link_stats.fromwire.fcs_err +
			       oct_dev->link_stats.fromwire.jabber_err +
			       oct_dev->link_stats.fromwire.l2_err +
			       oct_dev->link_stats.fromwire.frame_err);
	data[i++] = CVM_CAST64(netstats->tx_errors);
	/*sum of oct->droq[oq_no]->stats->rx_dropped +
	 *oct->droq[oq_no]->stats->dropped_nodispatch +
	 *oct->droq[oq_no]->stats->dropped_toomany +
	 *oct->droq[oq_no]->stats->dropped_nomem
	 */
	data[i++] = CVM_CAST64(netstats->rx_dropped);
	data[i++] = CVM_CAST64(netstats->rx_dropped +
			       oct_dev->link_stats.fromwire.fifo_err +
			       oct_dev->link_stats.fromwire.dmac_drop +
			       oct_dev->link_stats.fromwire.red_drops +
			       oct_dev->link_stats.fromwire.fw_err_pko +
			       oct_dev->link_stats.fromwire.fw_err_link +
			       oct_dev->link_stats.fromwire.fw_err_drop);
	/*sum of oct->instr_queue[iq_no]->stats.tx_dropped */
	data[i++] = CVM_CAST64(netstats->tx_dropped);
	data[i++] = CVM_CAST64(netstats->tx_dropped +
			       oct_dev->link_stats.fromhost.max_collision_fail +
			       oct_dev->link_stats.fromhost.max_deferral_fail +
			       oct_dev->link_stats.fromhost.total_collisions +
			       oct_dev->link_stats.fromhost.fw_err_pko +
			       oct_dev->link_stats.fromhost.fw_err_link +
			       oct_dev->link_stats.fromhost.fw_err_drop +
			       oct_dev->link_stats.fromhost.fw_err_pki);

	/* firmware tx stats */
	/*per_core_stats[cvmx_get_core_num()].link_stats[mdata->from_ifidx].
@@ -1798,6 +1809,7 @@ octnet_nic_stats_callback(struct octeon_device *oct_dev,
		rstats->jabber_err = rsp_rstats->jabber_err;
		rstats->l2_err    = rsp_rstats->l2_err;
		rstats->frame_err = rsp_rstats->frame_err;
		rstats->red_drops = rsp_rstats->red_drops;

		/* RX firmware stats */
		rstats->fw_total_rcvd = rsp_rstats->fw_total_rcvd;
+2 −0
Original line number Diff line number Diff line
@@ -2585,6 +2585,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
		if (dma_mapping_error(&oct->pci_dev->dev, dptr)) {
			dev_err(&oct->pci_dev->dev, "%s DMA mapping error 1\n",
				__func__);
			stats->tx_dmamap_fail++;
			return NETDEV_TX_BUSY;
		}

@@ -2624,6 +2625,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
		if (dma_mapping_error(&oct->pci_dev->dev, g->sg[0].ptr[0])) {
			dev_err(&oct->pci_dev->dev, "%s DMA mapping error 2\n",
				__func__);
			stats->tx_dmamap_fail++;
			return NETDEV_TX_BUSY;
		}
		add_sg_size(&g->sg[0], (skb->len - skb->data_len), 0);
+49 −26
Original line number Diff line number Diff line
@@ -779,18 +779,24 @@ struct liquidio_if_cfg_info {
/** Stats for each NIC port in RX direction. */
struct nic_rx_stats {
	/* link-level stats */
	u64 total_rcvd;
	u64 bytes_rcvd;
	u64 total_bcst;
	u64 total_mcst;
	u64 runts;
	u64 ctl_rcvd;
	u64 fifo_err;      /* Accounts for over/under-run of buffers */
	u64 dmac_drop;
	u64 fcs_err;
	u64 jabber_err;
	u64 l2_err;
	u64 frame_err;
	u64 total_rcvd;		/* Received packets */
	u64 bytes_rcvd;		/* Octets of received packets */
	u64 total_bcst;		/* Number of non-dropped L2 broadcast packets */
	u64 total_mcst;		/* Number of non-dropped L2 multicast packets */
	u64 runts;		/* Packets shorter than allowed */
	u64 ctl_rcvd;		/* Received PAUSE packets */
	u64 fifo_err;		/* Packets dropped due to RX FIFO full */
	u64 dmac_drop;		/* Packets dropped by the DMAC filter */
	u64 fcs_err;		/* Sum of fragment, overrun, and FCS errors */
	u64 jabber_err;		/* Packets larger than allowed */
	u64 l2_err;		/* Sum of DMA, parity, PCAM access, no memory,
				 * buffer overflow, malformed L2 header or
				 * length, oversize errors
				 **/
	u64 frame_err;		/* Sum of IPv4 and L4 checksum errors */
	u64 red_drops;		/* Packets dropped by RED due to buffer
				 * exhaustion
				 **/

	/* firmware stats */
	u64 fw_total_rcvd;
@@ -806,11 +812,11 @@ struct nic_rx_stats {
	u64 fw_lro_pkts;   /* Number of packets that are LROed      */
	u64 fw_lro_octs;   /* Number of octets that are LROed       */
	u64 fw_total_lro;  /* Number of LRO packets formed          */
	u64 fw_lro_aborts; /* Number of times lRO of packet aborted */
	u64 fw_lro_aborts; /* Number of times LRO of packet aborted */
	u64 fw_lro_aborts_port;
	u64 fw_lro_aborts_seq;
	u64 fw_lro_aborts_tsval;
	u64 fw_lro_aborts_timer;
	u64 fw_lro_aborts_timer;	/* Timer setting error */
	/* intrmod: packet forward rate */
	u64 fwd_rate;
};
@@ -818,18 +824,35 @@ struct nic_rx_stats {
/** Stats for each NIC port in RX direction. */
struct nic_tx_stats {
	/* link-level stats */
	u64 total_pkts_sent;
	u64 total_bytes_sent;
	u64 mcast_pkts_sent;
	u64 bcast_pkts_sent;
	u64 ctl_sent;
	u64 one_collision_sent;   /* Packets sent after one collision*/
	u64 multi_collision_sent; /* Packets sent after multiple collision*/
	u64 max_collision_fail;   /* Packets not sent due to max collisions */
	u64 max_deferral_fail;   /* Packets not sent due to max deferrals */
	u64 fifo_err;       /* Accounts for over/under-run of buffers */
	u64 runts;
	u64 total_collisions; /* Total number of collisions detected */
	u64 total_pkts_sent;		/* Total frames sent on the interface */
	u64 total_bytes_sent;		/* Total octets sent on the interface */
	u64 mcast_pkts_sent;		/* Packets sent to the multicast DMAC */
	u64 bcast_pkts_sent;		/* Packets sent to a broadcast DMAC */
	u64 ctl_sent;			/* Control/PAUSE packets sent */
	u64 one_collision_sent;		/* Packets sent that experienced a
					 * single collision before successful
					 * transmission
					 **/
	u64 multi_collision_sent;	/* Packets sent that experienced
					 * multiple collisions before successful
					 * transmission
					 **/
	u64 max_collision_fail;		/* Packets dropped due to excessive
					 * collisions
					 **/
	u64 max_deferral_fail;		/* Packets not sent due to max
					 * deferrals
					 **/
	u64 fifo_err;			/* Packets sent that experienced a
					 * transmit underflow and were
					 * truncated
					 **/
	u64 runts;			/* Packets sent with an octet count
					 * lessthan 64
					 **/
	u64 total_collisions;		/* Packets dropped due to excessive
					 * collisions
					 **/

	/* firmware stats */
	u64 fw_total_sent;
+2 −2
Original line number Diff line number Diff line
@@ -62,8 +62,8 @@ struct oct_iq_stats {
	u64 tx_tot_bytes;/**< Total count of bytes sento to network. */
	u64 tx_gso;  /* count of tso */
	u64 tx_vxlan; /* tunnel */
	u64 tx_dmamap_fail;
	u64 tx_restart;
	u64 tx_dmamap_fail; /* Number of times dma mapping failed */
	u64 tx_restart; /* Number of times this queue restarted */
};

#define OCT_IQ_STATS_SIZE   (sizeof(struct oct_iq_stats))