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

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
...@@ -96,11 +96,9 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = { ...@@ -96,11 +96,9 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = {
"tx_packets", "tx_packets",
"rx_bytes", "rx_bytes",
"tx_bytes", "tx_bytes",
"rx_errors", /*jabber_err+l2_err+frame_err */ "rx_errors",
"tx_errors", /*fw_err_pko+fw_err_link+fw_err_drop */ "tx_errors",
"rx_dropped", /*st->fromwire.total_rcvd - st->fromwire.fw_total_rcvd + "rx_dropped",
*st->fromwire.dmac_drop + st->fromwire.fw_err_drop
*/
"tx_dropped", "tx_dropped",
"tx_total_sent", "tx_total_sent",
...@@ -119,7 +117,7 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = { ...@@ -119,7 +117,7 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = {
"mac_tx_total_bytes", "mac_tx_total_bytes",
"mac_tx_mcast_pkts", "mac_tx_mcast_pkts",
"mac_tx_bcast_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_total_collisions",
"mac_tx_one_collision", "mac_tx_one_collision",
"mac_tx_multi_collison", "mac_tx_multi_collison",
...@@ -170,17 +168,17 @@ static const char oct_vf_stats_strings[][ETH_GSTRING_LEN] = { ...@@ -170,17 +168,17 @@ static const char oct_vf_stats_strings[][ETH_GSTRING_LEN] = {
"tx_packets", "tx_packets",
"rx_bytes", "rx_bytes",
"tx_bytes", "tx_bytes",
"rx_errors", /* jabber_err + l2_err+frame_err */ "rx_errors",
"tx_errors", /* fw_err_pko + fw_err_link+fw_err_drop */ "tx_errors",
"rx_dropped", /* total_rcvd - fw_total_rcvd + dmac_drop + fw_err_drop */ "rx_dropped",
"tx_dropped", "tx_dropped",
"link_state_changes", "link_state_changes",
}; };
/* statistics of host tx queue */ /* statistics of host tx queue */
static const char oct_iq_stats_strings[][ETH_GSTRING_LEN] = { static const char oct_iq_stats_strings[][ETH_GSTRING_LEN] = {
"packets", /*oct->instr_queue[iq_no]->stats.tx_done*/ "packets",
"bytes", /*oct->instr_queue[iq_no]->stats.tx_tot_bytes*/ "bytes",
"dropped", "dropped",
"iq_busy", "iq_busy",
"sgentry_sent", "sgentry_sent",
...@@ -197,13 +195,9 @@ static const char oct_iq_stats_strings[][ETH_GSTRING_LEN] = { ...@@ -197,13 +195,9 @@ static const char oct_iq_stats_strings[][ETH_GSTRING_LEN] = {
/* statistics of host rx queue */ /* statistics of host rx queue */
static const char oct_droq_stats_strings[][ETH_GSTRING_LEN] = { static const char oct_droq_stats_strings[][ETH_GSTRING_LEN] = {
"packets", /*oct->droq[oq_no]->stats.rx_pkts_received */ "packets",
"bytes", /*oct->droq[oq_no]->stats.rx_bytes_received */ "bytes",
"dropped", /*oct->droq[oq_no]->stats.rx_dropped+ "dropped",
*oct->droq[oq_no]->stats.dropped_nodispatch+
*oct->droq[oq_no]->stats.dropped_toomany+
*oct->droq[oq_no]->stats.dropped_nomem
*/
"dropped_nomem", "dropped_nomem",
"dropped_toomany", "dropped_toomany",
"fw_dropped", "fw_dropped",
...@@ -1080,16 +1074,33 @@ lio_get_ethtool_stats(struct net_device *netdev, ...@@ -1080,16 +1074,33 @@ lio_get_ethtool_stats(struct net_device *netdev,
data[i++] = CVM_CAST64(netstats->rx_bytes); data[i++] = CVM_CAST64(netstats->rx_bytes);
/*sum of oct->instr_queue[iq_no]->stats.tx_tot_bytes */ /*sum of oct->instr_queue[iq_no]->stats.tx_tot_bytes */
data[i++] = CVM_CAST64(netstats->tx_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); data[i++] = CVM_CAST64(netstats->tx_errors);
/*sum of oct->droq[oq_no]->stats->rx_dropped + /*sum of oct->droq[oq_no]->stats->rx_dropped +
*oct->droq[oq_no]->stats->dropped_nodispatch + *oct->droq[oq_no]->stats->dropped_nodispatch +
*oct->droq[oq_no]->stats->dropped_toomany + *oct->droq[oq_no]->stats->dropped_toomany +
*oct->droq[oq_no]->stats->dropped_nomem *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 */ /*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 */ /* firmware tx stats */
/*per_core_stats[cvmx_get_core_num()].link_stats[mdata->from_ifidx]. /*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, ...@@ -1798,6 +1809,7 @@ octnet_nic_stats_callback(struct octeon_device *oct_dev,
rstats->jabber_err = rsp_rstats->jabber_err; rstats->jabber_err = rsp_rstats->jabber_err;
rstats->l2_err = rsp_rstats->l2_err; rstats->l2_err = rsp_rstats->l2_err;
rstats->frame_err = rsp_rstats->frame_err; rstats->frame_err = rsp_rstats->frame_err;
rstats->red_drops = rsp_rstats->red_drops;
/* RX firmware stats */ /* RX firmware stats */
rstats->fw_total_rcvd = rsp_rstats->fw_total_rcvd; rstats->fw_total_rcvd = rsp_rstats->fw_total_rcvd;
......
...@@ -2585,6 +2585,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev) ...@@ -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)) { if (dma_mapping_error(&oct->pci_dev->dev, dptr)) {
dev_err(&oct->pci_dev->dev, "%s DMA mapping error 1\n", dev_err(&oct->pci_dev->dev, "%s DMA mapping error 1\n",
__func__); __func__);
stats->tx_dmamap_fail++;
return NETDEV_TX_BUSY; return NETDEV_TX_BUSY;
} }
...@@ -2624,6 +2625,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev) ...@@ -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])) { 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", dev_err(&oct->pci_dev->dev, "%s DMA mapping error 2\n",
__func__); __func__);
stats->tx_dmamap_fail++;
return NETDEV_TX_BUSY; return NETDEV_TX_BUSY;
} }
add_sg_size(&g->sg[0], (skb->len - skb->data_len), 0); add_sg_size(&g->sg[0], (skb->len - skb->data_len), 0);
......
...@@ -779,18 +779,24 @@ struct liquidio_if_cfg_info { ...@@ -779,18 +779,24 @@ struct liquidio_if_cfg_info {
/** Stats for each NIC port in RX direction. */ /** Stats for each NIC port in RX direction. */
struct nic_rx_stats { struct nic_rx_stats {
/* link-level stats */ /* link-level stats */
u64 total_rcvd; u64 total_rcvd; /* Received packets */
u64 bytes_rcvd; u64 bytes_rcvd; /* Octets of received packets */
u64 total_bcst; u64 total_bcst; /* Number of non-dropped L2 broadcast packets */
u64 total_mcst; u64 total_mcst; /* Number of non-dropped L2 multicast packets */
u64 runts; u64 runts; /* Packets shorter than allowed */
u64 ctl_rcvd; u64 ctl_rcvd; /* Received PAUSE packets */
u64 fifo_err; /* Accounts for over/under-run of buffers */ u64 fifo_err; /* Packets dropped due to RX FIFO full */
u64 dmac_drop; u64 dmac_drop; /* Packets dropped by the DMAC filter */
u64 fcs_err; u64 fcs_err; /* Sum of fragment, overrun, and FCS errors */
u64 jabber_err; u64 jabber_err; /* Packets larger than allowed */
u64 l2_err; u64 l2_err; /* Sum of DMA, parity, PCAM access, no memory,
u64 frame_err; * 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 */ /* firmware stats */
u64 fw_total_rcvd; u64 fw_total_rcvd;
...@@ -806,11 +812,11 @@ struct nic_rx_stats { ...@@ -806,11 +812,11 @@ struct nic_rx_stats {
u64 fw_lro_pkts; /* Number of packets that are LROed */ u64 fw_lro_pkts; /* Number of packets that are LROed */
u64 fw_lro_octs; /* Number of octets that are LROed */ u64 fw_lro_octs; /* Number of octets that are LROed */
u64 fw_total_lro; /* Number of LRO packets formed */ 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_port;
u64 fw_lro_aborts_seq; u64 fw_lro_aborts_seq;
u64 fw_lro_aborts_tsval; u64 fw_lro_aborts_tsval;
u64 fw_lro_aborts_timer; u64 fw_lro_aborts_timer; /* Timer setting error */
/* intrmod: packet forward rate */ /* intrmod: packet forward rate */
u64 fwd_rate; u64 fwd_rate;
}; };
...@@ -818,18 +824,35 @@ struct nic_rx_stats { ...@@ -818,18 +824,35 @@ struct nic_rx_stats {
/** Stats for each NIC port in RX direction. */ /** Stats for each NIC port in RX direction. */
struct nic_tx_stats { struct nic_tx_stats {
/* link-level stats */ /* link-level stats */
u64 total_pkts_sent; u64 total_pkts_sent; /* Total frames sent on the interface */
u64 total_bytes_sent; u64 total_bytes_sent; /* Total octets sent on the interface */
u64 mcast_pkts_sent; u64 mcast_pkts_sent; /* Packets sent to the multicast DMAC */
u64 bcast_pkts_sent; u64 bcast_pkts_sent; /* Packets sent to a broadcast DMAC */
u64 ctl_sent; u64 ctl_sent; /* Control/PAUSE packets sent */
u64 one_collision_sent; /* Packets sent after one collision*/ u64 one_collision_sent; /* Packets sent that experienced a
u64 multi_collision_sent; /* Packets sent after multiple collision*/ * single collision before successful
u64 max_collision_fail; /* Packets not sent due to max collisions */ * transmission
u64 max_deferral_fail; /* Packets not sent due to max deferrals */ **/
u64 fifo_err; /* Accounts for over/under-run of buffers */ u64 multi_collision_sent; /* Packets sent that experienced
u64 runts; * multiple collisions before successful
u64 total_collisions; /* Total number of collisions detected */ * 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 */ /* firmware stats */
u64 fw_total_sent; u64 fw_total_sent;
......
...@@ -62,8 +62,8 @@ struct oct_iq_stats { ...@@ -62,8 +62,8 @@ struct oct_iq_stats {
u64 tx_tot_bytes;/**< Total count of bytes sento to network. */ u64 tx_tot_bytes;/**< Total count of bytes sento to network. */
u64 tx_gso; /* count of tso */ u64 tx_gso; /* count of tso */
u64 tx_vxlan; /* tunnel */ u64 tx_vxlan; /* tunnel */
u64 tx_dmamap_fail; u64 tx_dmamap_fail; /* Number of times dma mapping failed */
u64 tx_restart; u64 tx_restart; /* Number of times this queue restarted */
}; };
#define OCT_IQ_STATS_SIZE (sizeof(struct oct_iq_stats)) #define OCT_IQ_STATS_SIZE (sizeof(struct oct_iq_stats))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment