nfp: make the representor get stats app-independent
authorJakub Kicinski <jakub.kicinski@netronome.com>
Tue, 27 Jun 2017 07:50:21 +0000 (00:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Jun 2017 19:48:48 +0000 (15:48 -0400)
Thanks to the fact that all representors will now have an nfp_port,
we can depend on information there to provide a app-independent
.ndo_get_stats64().

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/flower/main.c
drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
drivers/net/ethernet/netronome/nfp/nfp_net_repr.h

index 757bc3d78ea4452443fc626e0c96da3796929f51..2e66d51ec10413c2dff8aa4b4f8936c145921d69 100644 (file)
@@ -104,20 +104,6 @@ nfp_flower_repr_get(struct nfp_app *app, u32 port_id)
        return reprs->reprs[port];
 }
 
-static void
-nfp_flower_repr_netdev_get_stats64(struct net_device *netdev,
-                                  struct rtnl_link_stats64 *stats)
-{
-       struct nfp_repr *repr = netdev_priv(netdev);
-       enum nfp_repr_type type;
-       u32 port_id;
-       u8 port = 0;
-
-       port_id = repr->dst->u.port_info.port_id;
-       type = nfp_flower_repr_get_type_and_port(repr->app, port_id, &port);
-       nfp_repr_get_stats64(repr->app, type, port, stats);
-}
-
 static int nfp_flower_repr_netdev_open(struct net_device *netdev)
 {
        int err;
@@ -144,7 +130,7 @@ static const struct net_device_ops nfp_flower_repr_netdev_ops = {
        .ndo_open               = nfp_flower_repr_netdev_open,
        .ndo_stop               = nfp_flower_repr_netdev_stop,
        .ndo_start_xmit         = nfp_repr_xmit,
-       .ndo_get_stats64        = nfp_flower_repr_netdev_get_stats64,
+       .ndo_get_stats64        = nfp_repr_get_stats64,
        .ndo_has_offload_stats  = nfp_repr_has_offload_stats,
        .ndo_get_offload_stats  = nfp_repr_get_offload_stats,
 };
index 44adcc5df11ec8ad1f6d0c834a8f6c83d9b6bab3..6f1548c6840c1027503574e7e80122ba14e2066f 100644 (file)
@@ -37,6 +37,7 @@
 #include <net/dst_metadata.h>
 
 #include "nfpcore/nfp_cpp.h"
+#include "nfpcore/nfp_nsp.h"
 #include "nfp_app.h"
 #include "nfp_main.h"
 #include "nfp_net_ctrl.h"
@@ -136,18 +137,27 @@ nfp_repr_pf_get_stats64(const struct nfp_app *app, u8 pf,
 }
 
 void
-nfp_repr_get_stats64(const struct nfp_app *app, enum nfp_repr_type type,
-                    u8 port, struct rtnl_link_stats64 *stats)
+nfp_repr_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats)
 {
-       switch (type) {
-       case NFP_REPR_TYPE_PHYS_PORT:
-               nfp_repr_phy_port_get_stats64(app, port, stats);
+       struct nfp_repr *repr = netdev_priv(netdev);
+       struct nfp_eth_table_port *eth_port;
+       struct nfp_app *app = repr->app;
+
+       if (WARN_ON(!repr->port))
+               return;
+
+       switch (repr->port->type) {
+       case NFP_PORT_PHYS_PORT:
+               eth_port = __nfp_port_get_eth_port(repr->port);
+               if (!eth_port)
+                       break;
+               nfp_repr_phy_port_get_stats64(app, eth_port->index, stats);
                break;
-       case NFP_REPR_TYPE_PF:
-               nfp_repr_pf_get_stats64(app, port, stats);
+       case NFP_PORT_PF_PORT:
+               nfp_repr_pf_get_stats64(app, repr->port->pf_id, stats);
                break;
-       case NFP_REPR_TYPE_VF:
-               nfp_repr_vf_get_stats64(app, port, stats);
+       case NFP_PORT_VF_PORT:
+               nfp_repr_vf_get_stats64(app, repr->port->vf_id, stats);
        default:
                break;
        }
index c5ed6611f7087be9288d18695171cf5e0c15a83b..e970661ecd420c5b72138b87dec89b75c5ce6b4c 100644 (file)
@@ -99,8 +99,8 @@ enum nfp_repr_type {
 
 void nfp_repr_inc_rx_stats(struct net_device *netdev, unsigned int len);
 void
-nfp_repr_get_stats64(const struct nfp_app *app, enum nfp_repr_type type,
-                    u8 port, struct rtnl_link_stats64 *stats);
+nfp_repr_get_stats64(struct net_device *netdev,
+                    struct rtnl_link_stats64 *stats);
 bool nfp_repr_has_offload_stats(const struct net_device *dev, int attr_id);
 int nfp_repr_get_offload_stats(int attr_id, const struct net_device *dev,
                               void *stats);