From: Intiyaz Basha <intiyaz.ba...@cavium.com>

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: Intiyaz Basha <intiyaz.ba...@cavium.com>
Acked-by: Derek Chickles <derek.chick...@cavium.com>
Acked-by: Satanand Burla <satananda.bu...@cavium.com>
Signed-off-by: Felix Manlunas <felix.manlu...@cavium.com>
---
 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 54 ++++++++++------
 drivers/net/ethernet/cavium/liquidio/lio_main.c    |  2 +
 .../net/ethernet/cavium/liquidio/liquidio_common.h | 75 ++++++++++++++--------
 drivers/net/ethernet/cavium/liquidio/octeon_iq.h   |  4 +-
 4 files changed, 86 insertions(+), 49 deletions(-)

diff --git a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c 
b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
index a63ddf0..b40e8f5 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c
@@ -96,11 +96,9 @@ enum {
        "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 @@ enum {
        "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 @@ enum {
        "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 @@ enum {
 
 /* 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",
@@ -1068,16 +1062,33 @@ static void lio_vf_set_msglevel(struct net_device 
*netdev, u32 msglvl)
        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].
@@ -1786,6 +1797,7 @@ static int octnet_set_intrmod_cfg(struct lio *lio,
                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;
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c 
b/drivers/net/ethernet/cavium/liquidio/lio_main.c
index 010f4fe..736e082 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c
@@ -2780,6 +2780,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;
                }
 
@@ -2819,6 +2820,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);
diff --git a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h 
b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h
index ce793f2..82b0854 100644
--- a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h
+++ b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h
@@ -766,18 +766,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;
@@ -793,11 +799,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;
 };
@@ -805,18 +811,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;
diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_iq.h 
b/drivers/net/ethernet/cavium/liquidio/octeon_iq.h
index 81c9876..5fed7b6 100644
--- a/drivers/net/ethernet/cavium/liquidio/octeon_iq.h
+++ b/drivers/net/ethernet/cavium/liquidio/octeon_iq.h
@@ -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))
-- 
1.8.3.1

Reply via email to