net: dsa: stop exposing tag proto module helpers to the world
authorVladimir Oltean <vladimir.oltean@nxp.com>
Tue, 15 Nov 2022 01:18:42 +0000 (03:18 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 18 Nov 2022 05:16:40 +0000 (21:16 -0800)
The DSA tagging protocol driver macros are in the public include/net/dsa.h
probably because that's also where the DSA_TAG_PROTO_*_VALUE macros are
(MODULE_ALIAS_DSA_TAG_DRIVER hinges on those macro definitions).

But there is no reason to expose these helpers to <net/dsa.h>. That
header is shared between switch drivers (drivers/net/dsa/), tagging
protocol drivers (net/dsa/tag_*.c), the DSA core (net/dsa/ sans tag_*.c),
and the rest of the world (DSA master drivers, network stack, etc).
Too much exposure.

On the other hand, net/dsa/dsa_priv.h is included only by the DSA core
and by DSA tagging protocol drivers (or IOW, "friend" modules). Also a
bit too much exposure - I've contemplated creating a new header which is
only included by tagging protocol drivers, but completely separating a
new dsa_tag_proto.h from dsa_priv.h is not immediately trivial - for
example dsa_slave_to_port() is used both from the fast path and from the
control path.

So for now, move these definitions to dsa_priv.h which at least hides
them from the world.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: Michael Walle <michael@walle.cc>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/dsa.h
net/dsa/dsa_priv.h

index dde364688739a31b2a3f4a437d4d806b7a6742bf..82da44561f4cb53cd07ef58f357498a9fa956595 100644 (file)
@@ -118,10 +118,6 @@ struct dsa_netdevice_ops {
                             int cmd);
 };
 
-#define DSA_TAG_DRIVER_ALIAS "dsa_tag-"
-#define MODULE_ALIAS_DSA_TAG_DRIVER(__proto)                           \
-       MODULE_ALIAS(DSA_TAG_DRIVER_ALIAS __stringify(__proto##_VALUE))
-
 struct dsa_lag {
        struct net_device *dev;
        unsigned int id;
@@ -1400,70 +1396,4 @@ static inline bool dsa_slave_dev_check(const struct net_device *dev)
 netdev_tx_t dsa_enqueue_skb(struct sk_buff *skb, struct net_device *dev);
 void dsa_port_phylink_mac_change(struct dsa_switch *ds, int port, bool up);
 
-struct dsa_tag_driver {
-       const struct dsa_device_ops *ops;
-       struct list_head list;
-       struct module *owner;
-};
-
-void dsa_tag_drivers_register(struct dsa_tag_driver *dsa_tag_driver_array[],
-                             unsigned int count,
-                             struct module *owner);
-void dsa_tag_drivers_unregister(struct dsa_tag_driver *dsa_tag_driver_array[],
-                               unsigned int count);
-
-#define dsa_tag_driver_module_drivers(__dsa_tag_drivers_array, __count)        \
-static int __init dsa_tag_driver_module_init(void)                     \
-{                                                                      \
-       dsa_tag_drivers_register(__dsa_tag_drivers_array, __count,      \
-                                THIS_MODULE);                          \
-       return 0;                                                       \
-}                                                                      \
-module_init(dsa_tag_driver_module_init);                               \
-                                                                       \
-static void __exit dsa_tag_driver_module_exit(void)                    \
-{                                                                      \
-       dsa_tag_drivers_unregister(__dsa_tag_drivers_array, __count);   \
-}                                                                      \
-module_exit(dsa_tag_driver_module_exit)
-
-/**
- * module_dsa_tag_drivers() - Helper macro for registering DSA tag
- * drivers
- * @__ops_array: Array of tag driver structures
- *
- * Helper macro for DSA tag drivers which do not do anything special
- * in module init/exit. Each module may only use this macro once, and
- * calling it replaces module_init() and module_exit().
- */
-#define module_dsa_tag_drivers(__ops_array)                            \
-dsa_tag_driver_module_drivers(__ops_array, ARRAY_SIZE(__ops_array))
-
-#define DSA_TAG_DRIVER_NAME(__ops) dsa_tag_driver ## _ ## __ops
-
-/* Create a static structure we can build a linked list of dsa_tag
- * drivers
- */
-#define DSA_TAG_DRIVER(__ops)                                          \
-static struct dsa_tag_driver DSA_TAG_DRIVER_NAME(__ops) = {            \
-       .ops = &__ops,                                                  \
-}
-
-/**
- * module_dsa_tag_driver() - Helper macro for registering a single DSA tag
- * driver
- * @__ops: Single tag driver structures
- *
- * Helper macro for DSA tag drivers which do not do anything special
- * in module init/exit. Each module may only use this macro once, and
- * calling it replaces module_init() and module_exit().
- */
-#define module_dsa_tag_driver(__ops)                                   \
-DSA_TAG_DRIVER(__ops);                                                 \
-                                                                       \
-static struct dsa_tag_driver *dsa_tag_driver_array[] = {               \
-       &DSA_TAG_DRIVER_NAME(__ops)                                     \
-};                                                                     \
-module_dsa_tag_drivers(dsa_tag_driver_array)
 #endif
-
index 71e9707d11d48b70ed249635020fe74d497267c1..23d2dfdbc1abec08a8527cbc276b7964e50412c2 100644 (file)
 
 #define DSA_MAX_NUM_OFFLOADING_BRIDGES         BITS_PER_LONG
 
+#define DSA_TAG_DRIVER_ALIAS "dsa_tag-"
+#define MODULE_ALIAS_DSA_TAG_DRIVER(__proto)                           \
+       MODULE_ALIAS(DSA_TAG_DRIVER_ALIAS __stringify(__proto##_VALUE))
+
+struct dsa_tag_driver {
+       const struct dsa_device_ops *ops;
+       struct list_head list;
+       struct module *owner;
+};
+
+void dsa_tag_drivers_register(struct dsa_tag_driver *dsa_tag_driver_array[],
+                             unsigned int count,
+                             struct module *owner);
+void dsa_tag_drivers_unregister(struct dsa_tag_driver *dsa_tag_driver_array[],
+                               unsigned int count);
+
+#define dsa_tag_driver_module_drivers(__dsa_tag_drivers_array, __count)        \
+static int __init dsa_tag_driver_module_init(void)                     \
+{                                                                      \
+       dsa_tag_drivers_register(__dsa_tag_drivers_array, __count,      \
+                                THIS_MODULE);                          \
+       return 0;                                                       \
+}                                                                      \
+module_init(dsa_tag_driver_module_init);                               \
+                                                                       \
+static void __exit dsa_tag_driver_module_exit(void)                    \
+{                                                                      \
+       dsa_tag_drivers_unregister(__dsa_tag_drivers_array, __count);   \
+}                                                                      \
+module_exit(dsa_tag_driver_module_exit)
+
+/**
+ * module_dsa_tag_drivers() - Helper macro for registering DSA tag
+ * drivers
+ * @__ops_array: Array of tag driver structures
+ *
+ * Helper macro for DSA tag drivers which do not do anything special
+ * in module init/exit. Each module may only use this macro once, and
+ * calling it replaces module_init() and module_exit().
+ */
+#define module_dsa_tag_drivers(__ops_array)                            \
+dsa_tag_driver_module_drivers(__ops_array, ARRAY_SIZE(__ops_array))
+
+#define DSA_TAG_DRIVER_NAME(__ops) dsa_tag_driver ## _ ## __ops
+
+/* Create a static structure we can build a linked list of dsa_tag
+ * drivers
+ */
+#define DSA_TAG_DRIVER(__ops)                                          \
+static struct dsa_tag_driver DSA_TAG_DRIVER_NAME(__ops) = {            \
+       .ops = &__ops,                                                  \
+}
+
+/**
+ * module_dsa_tag_driver() - Helper macro for registering a single DSA tag
+ * driver
+ * @__ops: Single tag driver structures
+ *
+ * Helper macro for DSA tag drivers which do not do anything special
+ * in module init/exit. Each module may only use this macro once, and
+ * calling it replaces module_init() and module_exit().
+ */
+#define module_dsa_tag_driver(__ops)                                   \
+DSA_TAG_DRIVER(__ops);                                                 \
+                                                                       \
+static struct dsa_tag_driver *dsa_tag_driver_array[] = {               \
+       &DSA_TAG_DRIVER_NAME(__ops)                                     \
+};                                                                     \
+module_dsa_tag_drivers(dsa_tag_driver_array)
+
 enum {
        DSA_NOTIFIER_AGEING_TIME,
        DSA_NOTIFIER_BRIDGE_JOIN,