]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
netconsole: move netpoll_send_udp() from netpoll
authorBreno Leitao <leitao@debian.org>
Tue, 12 May 2026 10:46:35 +0000 (03:46 -0700)
committerJakub Kicinski <kuba@kernel.org>
Thu, 14 May 2026 01:09:12 +0000 (18:09 -0700)
Move netpoll_send_udp() from net/core/netpoll.c into
drivers/net/netconsole.c as a static helper, drop EXPORT_SYMBOL(),
and remove the prototype from include/linux/netpoll.h.

netconsole was the only in-tree caller of this entry point. Every
other netpoll consumer (bonding, team, vlan, bridge, macvlan, dsa)
already builds its own sk_buff and hands it to netpoll_send_skb(),
so the netpoll send-side interface is now skb-only.

The helpers it depends on (find_skb(), push_ipv6(), push_ipv4(),
push_udp(), push_eth(), netpoll_udp_checksum()) were exposed in
the previous patches and stay in net/core/netpoll.c for now.
Subsequent patches move each of them into netconsole one at a time
and drop the corresponding EXPORT_SYMBOL_GPL.

Pull <linux/ip.h>, <linux/ipv6.h> and <linux/udp.h> into netconsole.c
so the moved code can name the header structures.

Signed-off-by: Breno Leitao <leitao@debian.org>
Link: https://patch.msgid.link/20260512-netconsole_split-v2-2-1191d14ad66d@debian.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/netconsole.c
include/linux/netpoll.h
net/core/netpoll.c

index 57dd6821a8aa908c2888d84286c2884bd54b5275..56f310041ebdafa0a85493cfcc45d4a7b654f9b0 100644 (file)
@@ -32,6 +32,9 @@
 #include <linux/moduleparam.h>
 #include <linux/kernel.h>
 #include <linux/string.h>
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <linux/udp.h>
 #include <linux/netpoll.h>
 #include <linux/inet.h>
 #include <linux/configfs.h>
@@ -1648,6 +1651,41 @@ static struct notifier_block netconsole_netdev_notifier = {
        .notifier_call  = netconsole_netdev_event,
 };
 
+static int netpoll_send_udp(struct netpoll *np, const char *msg, int len)
+{
+       int total_len, ip_len, udp_len;
+       struct sk_buff *skb;
+
+       if (!IS_ENABLED(CONFIG_PREEMPT_RT))
+               WARN_ON_ONCE(!irqs_disabled());
+
+       udp_len = len + sizeof(struct udphdr);
+       if (np->ipv6)
+               ip_len = udp_len + sizeof(struct ipv6hdr);
+       else
+               ip_len = udp_len + sizeof(struct iphdr);
+
+       total_len = ip_len + LL_RESERVED_SPACE(np->dev);
+
+       skb = find_skb(np, total_len + np->dev->needed_tailroom,
+                      total_len - len);
+       if (!skb)
+               return -ENOMEM;
+
+       skb_copy_to_linear_data(skb, msg, len);
+       skb_put(skb, len);
+
+       push_udp(np, skb, len);
+       if (np->ipv6)
+               push_ipv6(np, skb, len);
+       else
+               push_ipv4(np, skb, len);
+       push_eth(np, skb);
+       skb->dev = np->dev;
+
+       return (int)netpoll_send_skb(np, skb);
+}
+
 /**
  * send_udp - Wrapper for netpoll_send_udp that counts errors
  * @nt: target to send message to
index e68c80b329411872e1892916a9b40407f9fd5d3c..57be72bb82dc9dbd484b33d2f8d34427f5bbb692 100644 (file)
@@ -67,7 +67,6 @@ static inline void netpoll_poll_disable(struct net_device *dev) { return; }
 static inline void netpoll_poll_enable(struct net_device *dev) { return; }
 #endif
 
-int netpoll_send_udp(struct netpoll *np, const char *msg, int len);
 int __netpoll_setup(struct netpoll *np, struct net_device *ndev);
 int netpoll_setup(struct netpoll *np);
 void __netpoll_free(struct netpoll *np);
index 41305056c56ffa1a1dfc0c38f3ad197dd84b8955..39209308efad042f2caf1a95745fc658f33311c1 100644 (file)
@@ -499,43 +499,6 @@ void push_eth(struct netpoll *np, struct sk_buff *skb)
 }
 EXPORT_SYMBOL_GPL(push_eth);
 
-int netpoll_send_udp(struct netpoll *np, const char *msg, int len)
-{
-       int total_len, ip_len, udp_len;
-       struct sk_buff *skb;
-
-       if (!IS_ENABLED(CONFIG_PREEMPT_RT))
-               WARN_ON_ONCE(!irqs_disabled());
-
-       udp_len = len + sizeof(struct udphdr);
-       if (np->ipv6)
-               ip_len = udp_len + sizeof(struct ipv6hdr);
-       else
-               ip_len = udp_len + sizeof(struct iphdr);
-
-       total_len = ip_len + LL_RESERVED_SPACE(np->dev);
-
-       skb = find_skb(np, total_len + np->dev->needed_tailroom,
-                      total_len - len);
-       if (!skb)
-               return -ENOMEM;
-
-       skb_copy_to_linear_data(skb, msg, len);
-       skb_put(skb, len);
-
-       push_udp(np, skb, len);
-       if (np->ipv6)
-               push_ipv6(np, skb, len);
-       else
-               push_ipv4(np, skb, len);
-       push_eth(np, skb);
-       skb->dev = np->dev;
-
-       return (int)netpoll_send_skb(np, skb);
-}
-EXPORT_SYMBOL(netpoll_send_udp);
-
-
 static void skb_pool_flush(struct netpoll *np)
 {
        struct sk_buff_head *skb_pool;