diff mbox series

[v4,net-next,1/2] net: dsa: add optional stats64 support

Message ID 20201204145624.11713-2-o.rempel@pengutronix.de
State Superseded
Headers show
Series net: dsa: add stats64 support | expand

Commit Message

Oleksij Rempel Dec. 4, 2020, 2:56 p.m. UTC
Allow DSA drivers to export stats64

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
---
 include/net/dsa.h |  3 +++
 net/dsa/slave.c   | 14 +++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

Comments

Andrew Lunn Dec. 5, 2020, 2:34 p.m. UTC | #1
On Fri, Dec 04, 2020 at 03:56:23PM +0100, Oleksij Rempel wrote:
> Allow DSA drivers to export stats64

> 

> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>

> Reviewed-by: Vladimir Oltean <olteanv@gmail.com>


Reviewed-by: Andrew Lunn <andrew@lunn.ch>


    Andrew
George McCollister Dec. 7, 2020, 5:21 p.m. UTC | #2
On Fri, Dec 4, 2020 at 8:59 AM Oleksij Rempel <o.rempel@pengutronix.de> wrote:
>

> Allow DSA drivers to export stats64

>

> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>

> Reviewed-by: Vladimir Oltean <olteanv@gmail.com>


Reviewed-by: George McCollister <george.mccollister@gmail.com>


I've already updated my xrs700x dsa driver for v3 to use this. I'm
blocked on sending v3 until this is in. Please CC me on any updates.

Thanks,
George
diff mbox series

Patch

diff --git a/include/net/dsa.h b/include/net/dsa.h
index 4e60d2610f20..457b89143875 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -655,6 +655,9 @@  struct dsa_switch_ops {
 	int	(*port_change_mtu)(struct dsa_switch *ds, int port,
 				   int new_mtu);
 	int	(*port_max_mtu)(struct dsa_switch *ds, int port);
+
+	void	(*get_stats64)(struct dsa_switch *ds, int port,
+				   struct rtnl_link_stats64 *s);
 };
 
 #define DSA_DEVLINK_PARAM_DRIVER(_id, _name, _type, _cmodes)		\
diff --git a/net/dsa/slave.c b/net/dsa/slave.c
index ff2266d2b998..6e1a4dc18a97 100644
--- a/net/dsa/slave.c
+++ b/net/dsa/slave.c
@@ -1602,6 +1602,18 @@  static struct devlink_port *dsa_slave_get_devlink_port(struct net_device *dev)
 	return dp->ds->devlink ? &dp->devlink_port : NULL;
 }
 
+static void dsa_slave_get_stats64(struct net_device *dev,
+				  struct rtnl_link_stats64 *s)
+{
+	struct dsa_port *dp = dsa_slave_to_port(dev);
+	struct dsa_switch *ds = dp->ds;
+
+	if (!ds->ops->get_stats64)
+		return dev_get_tstats64(dev, s);
+
+	return ds->ops->get_stats64(ds, dp->index, s);
+}
+
 static const struct net_device_ops dsa_slave_netdev_ops = {
 	.ndo_open	 	= dsa_slave_open,
 	.ndo_stop		= dsa_slave_close,
@@ -1621,7 +1633,7 @@  static const struct net_device_ops dsa_slave_netdev_ops = {
 #endif
 	.ndo_get_phys_port_name	= dsa_slave_get_phys_port_name,
 	.ndo_setup_tc		= dsa_slave_setup_tc,
-	.ndo_get_stats64	= dev_get_tstats64,
+	.ndo_get_stats64	= dsa_slave_get_stats64,
 	.ndo_get_port_parent_id	= dsa_slave_get_port_parent_id,
 	.ndo_vlan_rx_add_vid	= dsa_slave_vlan_rx_add_vid,
 	.ndo_vlan_rx_kill_vid	= dsa_slave_vlan_rx_kill_vid,