mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
netconsole: move netpoll_send_udp() from netpoll
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>
This commit is contained in:
parent
06baf87e21
commit
d3345a61e4
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user