can: slcan: export slcan_ethtool_ops and remove slcan_set_ethtool_ops()
authorVincent Mailhol <mailhol.vincent@wanadoo.fr>
Wed, 27 Jul 2022 10:49:37 +0000 (19:49 +0900)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Wed, 27 Jul 2022 11:09:01 +0000 (13:09 +0200)
The function slcan_set_ethtool_ops() does one thing: populate
net_device::ethtool_ops. Instead, it is possible to directly assign
this field and remove one function call and slightly reduce the object
size. To do so, export slcan_ethtool_ops so it becomes visible to
sclan-core.c.

This patch reduces the footprint by 14 bytes:

| $ ./scripts/bloat-o-meter drivers/net/can/slcan/slcan.{old,new}.o
| drivers/net/can/slcan/slcan.o
| add/remove: 0/1 grow/shrink: 1/0 up/down: 15/-29 (-14)
| Function                                     old     new   delta
| slcan_open                                  1010    1025     +15
| slcan_set_ethtool_ops                         29       -     -29
| Total: Before=11115, After=11101, chg -0.13%

Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Link: https://lore.kernel.org/all/20220727104939.279022-2-mailhol.vincent@wanadoo.fr
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/slcan/slcan-core.c
drivers/net/can/slcan/slcan-ethtool.c
drivers/net/can/slcan/slcan.h

index dc28e715bbe17711dec93de1b475313d74dc8a52..6162e6132ea4f3fbc7a09f4c375bc5da098b29c9 100644 (file)
@@ -866,8 +866,8 @@ static struct slcan *slc_alloc(void)
 
        snprintf(dev->name, sizeof(dev->name), "slcan%d", i);
        dev->netdev_ops = &slc_netdev_ops;
+       dev->ethtool_ops = &slcan_ethtool_ops;
        dev->base_addr  = i;
-       slcan_set_ethtool_ops(dev);
        sl = netdev_priv(dev);
 
        /* Initialize channel control data */
index bf0afdc4e49d462c3f4c497246eaeb3a5f847172..328ae1fb065b5baedddc7be4ddc0aeaa23d056da 100644 (file)
@@ -52,14 +52,9 @@ static int slcan_get_sset_count(struct net_device *netdev, int sset)
        }
 }
 
-static const struct ethtool_ops slcan_ethtool_ops = {
+const struct ethtool_ops slcan_ethtool_ops = {
        .get_strings = slcan_get_strings,
        .get_priv_flags = slcan_get_priv_flags,
        .set_priv_flags = slcan_set_priv_flags,
        .get_sset_count = slcan_get_sset_count,
 };
-
-void slcan_set_ethtool_ops(struct net_device *netdev)
-{
-       netdev->ethtool_ops = &slcan_ethtool_ops;
-}
index d463c8d99e220ff91119ea79cdd798395f88aa63..85cedf856db3e0ec859e45f3d7b7401c2b4fab3a 100644 (file)
@@ -13,6 +13,7 @@
 
 bool slcan_err_rst_on_open(struct net_device *ndev);
 int slcan_enable_err_rst_on_open(struct net_device *ndev, bool on);
-void slcan_set_ethtool_ops(struct net_device *ndev);
+
+extern const struct ethtool_ops slcan_ethtool_ops;
 
 #endif /* _SLCAN_H */