nfp: report FW vNIC stats in interface stats
authorJakub Kicinski <jakub.kicinski@netronome.com>
Tue, 11 Sep 2018 13:44:08 +0000 (06:44 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 12 Sep 2018 20:20:49 +0000 (13:20 -0700)
Report in standard netdev stats drops and errors as well as
RX multicast from the FW vNIC counters.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/netronome/nfp/nfp_net_common.c

index 17a4785e8f4ce91989dc77d96dc6fa3bdc5cb765..1aac55d66404affca6d9a9124db8217c3d9b7fc0 100644 (file)
@@ -3167,6 +3167,7 @@ static void nfp_net_stat64(struct net_device *netdev,
        struct nfp_net *nn = netdev_priv(netdev);
        int r;
 
+       /* Collect software stats */
        for (r = 0; r < nn->max_r_vecs; r++) {
                struct nfp_net_r_vector *r_vec = &nn->r_vecs[r];
                u64 data[3];
@@ -3192,6 +3193,14 @@ static void nfp_net_stat64(struct net_device *netdev,
                stats->tx_bytes += data[1];
                stats->tx_errors += data[2];
        }
+
+       /* Add in device stats */
+       stats->multicast += nn_readq(nn, NFP_NET_CFG_STATS_RX_MC_FRAMES);
+       stats->rx_dropped += nn_readq(nn, NFP_NET_CFG_STATS_RX_DISCARDS);
+       stats->rx_errors += nn_readq(nn, NFP_NET_CFG_STATS_RX_ERRORS);
+
+       stats->tx_dropped += nn_readq(nn, NFP_NET_CFG_STATS_TX_DISCARDS);
+       stats->tx_errors += nn_readq(nn, NFP_NET_CFG_STATS_TX_ERRORS);
 }
 
 static int nfp_net_set_features(struct net_device *netdev,