net: move devres helpers into a separate source file
authorBartosz Golaszewski <bgolaszewski@baylibre.com>
Sat, 23 May 2020 13:27:08 +0000 (15:27 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 23 May 2020 23:56:17 +0000 (16:56 -0700)
There's currently only a single devres helper in net/ - devm variant
of alloc_etherdev. Let's move it to net/devres.c with the intention of
assing a second one: devm_register_netdev(). This new routine will need
to know the address of the release function of devm_alloc_etherdev() so
that it can verify (using devres_find()) that the struct net_device
that's being passed to it is also resource managed.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/Makefile
net/devres.c [new file with mode: 0644]
net/ethernet/eth.c

index 07ea481..5744bf1 100644 (file)
@@ -6,7 +6,7 @@
 # Rewritten to use lists instead of if-statements.
 #
 
-obj-$(CONFIG_NET)              := socket.o core/
+obj-$(CONFIG_NET)              := devres.o socket.o core/
 
 tmp-$(CONFIG_COMPAT)           := compat.o
 obj-$(CONFIG_NET)              += $(tmp-y)
diff --git a/net/devres.c b/net/devres.c
new file mode 100644 (file)
index 0000000..c1465d9
--- /dev/null
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * This file contains all networking devres helpers.
+ */
+
+#include <linux/device.h>
+#include <linux/etherdevice.h>
+#include <linux/netdevice.h>
+
+static void devm_free_netdev(struct device *dev, void *res)
+{
+       free_netdev(*(struct net_device **)res);
+}
+
+struct net_device *devm_alloc_etherdev_mqs(struct device *dev, int sizeof_priv,
+                                          unsigned int txqs, unsigned int rxqs)
+{
+       struct net_device **dr;
+       struct net_device *netdev;
+
+       dr = devres_alloc(devm_free_netdev, sizeof(*dr), GFP_KERNEL);
+       if (!dr)
+               return NULL;
+
+       netdev = alloc_etherdev_mqs(sizeof_priv, txqs, rxqs);
+       if (!netdev) {
+               devres_free(dr);
+               return NULL;
+       }
+
+       *dr = netdev;
+       devres_add(dev, dr);
+
+       return netdev;
+}
+EXPORT_SYMBOL(devm_alloc_etherdev_mqs);
index c8b9033..dac6518 100644 (file)
@@ -400,34 +400,6 @@ struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs,
 }
 EXPORT_SYMBOL(alloc_etherdev_mqs);
 
-static void devm_free_netdev(struct device *dev, void *res)
-{
-       free_netdev(*(struct net_device **)res);
-}
-
-struct net_device *devm_alloc_etherdev_mqs(struct device *dev, int sizeof_priv,
-                                          unsigned int txqs, unsigned int rxqs)
-{
-       struct net_device **dr;
-       struct net_device *netdev;
-
-       dr = devres_alloc(devm_free_netdev, sizeof(*dr), GFP_KERNEL);
-       if (!dr)
-               return NULL;
-
-       netdev = alloc_etherdev_mqs(sizeof_priv, txqs, rxqs);
-       if (!netdev) {
-               devres_free(dr);
-               return NULL;
-       }
-
-       *dr = netdev;
-       devres_add(dev, dr);
-
-       return netdev;
-}
-EXPORT_SYMBOL(devm_alloc_etherdev_mqs);
-
 ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len)
 {
        return scnprintf(buf, PAGE_SIZE, "%*phC\n", len, addr);