From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
To: Breno Leitao <leitao@debian.org>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Clark Williams <clrkwllms@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>
Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-rt-devel@lists.linux.dev, kernel-team@meta.com,
efault@gmx.de, calvin@wbinvd.org,
Breno Leitao <leitao@debian.org>
Subject: Re: [PATCH 5/7] netpoll: Move SKBs pool to netconsole side
Date: Tue, 02 Sep 2025 18:56:13 -0400 [thread overview]
Message-ID: <willemdebruijn.kernel.a0f67bb6112a@gmail.com> (raw)
In-Reply-To: <20250902-netpoll_untangle_v3-v1-5-51a03d6411be@debian.org>
Breno Leitao wrote:
> Since netconsole is the sole user of the SKBs pool within netpoll, move
> the pool management into the netconsole driver.
>
> This change prevents other netpoll users from allocating and holding
> onto skb pool memory unnecessarily, thereby reducing memory usage when
> the pool is not required (which is all the cases except netconsole).
>
> The skb poll struct is still attached to the netpoll, but, eventually
> this should move to the netconsole target, since it has nothing to do
> with netpoll.
>
> Signed-off-by: Breno Leitao <leitao@debian.org>
> ---
> drivers/net/netconsole.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++--
> net/core/netpoll.c | 44 ------------------------------------
> 2 files changed, 56 insertions(+), 46 deletions(-)
>
> diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
> index 90e359b87469a..3fe55db07cfe5 100644
> --- a/drivers/net/netconsole.c
> +++ b/drivers/net/netconsole.c
> @@ -57,6 +57,19 @@ MODULE_LICENSE("GPL");
> #define MAX_EXTRADATA_ITEMS 16
> #define MAX_PRINT_CHUNK 1000
>
> +/*
> + * We maintain a small pool of fully-sized skbs, to make sure the
> + * message gets out even in extreme OOM situations.
> + */
> +
> +#define MAX_SKBS 32
> +#define MAX_UDP_CHUNK 1460
> +#define MAX_SKB_SIZE \
> + (sizeof(struct ethhdr) + \
> + sizeof(struct iphdr) + \
> + sizeof(struct udphdr) + \
> + MAX_UDP_CHUNK)
> +
> static char config[MAX_PARAM_LENGTH];
> module_param_string(netconsole, config, MAX_PARAM_LENGTH, 0);
> MODULE_PARM_DESC(netconsole, " netconsole=[src-port]@[src-ip]/[dev],[tgt-port]@<tgt-ip>/[tgt-macaddr]");
> @@ -172,6 +185,33 @@ struct netconsole_target {
> char buf[MAX_PRINT_CHUNK];
> };
>
> +static void refill_skbs(struct netpoll *np)
> +{
> + struct sk_buff_head *skb_pool;
> + struct sk_buff *skb;
> + unsigned long flags;
> +
> + skb_pool = &np->skb_pool;
> +
> + spin_lock_irqsave(&skb_pool->lock, flags);
> + while (skb_pool->qlen < MAX_SKBS) {
> + skb = alloc_skb(MAX_SKB_SIZE, GFP_ATOMIC);
> + if (!skb)
> + break;
> +
> + __skb_queue_tail(skb_pool, skb);
> + }
> + spin_unlock_irqrestore(&skb_pool->lock, flags);
> +}
> +
> +static void refill_skbs_work_handler(struct work_struct *work)
> +{
> + struct netpoll *np =
> + container_of(work, struct netpoll, refill_wq);
> +
> + refill_skbs(np);
> +}
> +
> #ifdef CONFIG_NETCONSOLE_DYNAMIC
>
> static struct configfs_subsystem netconsole_subsys;
> @@ -341,6 +381,20 @@ static int netpoll_parse_ip_addr(const char *str, union inet_addr *addr)
> return -1;
> }
>
> +static int setup_netpoll(struct netpoll *np)
Having both netpoll_setup and setup_netpoll is a bit confusing.
Maybe netconsole_setup_netpoll?
> +{
> + int err;
> +
> + err = netpoll_setup(np);
> + if (err)
> + return err;
> +
> + refill_skbs(np);
> + INIT_WORK(&np->refill_wq, refill_skbs_work_handler);
> +
> + return 0;
> +}
> +
> #ifdef CONFIG_NETCONSOLE_DYNAMIC
>
> /*
> @@ -615,7 +669,7 @@ static ssize_t enabled_store(struct config_item *item,
> */
> netconsole_print_banner(&nt->np);
>
> - ret = netpoll_setup(&nt->np);
> + ret = setup_netpoll(&nt->np);
> if (ret)
> goto out_unlock;
>
> @@ -2036,7 +2090,7 @@ static struct netconsole_target *alloc_param_target(char *target_config,
> if (err)
> goto fail;
>
> - err = netpoll_setup(&nt->np);
> + err = setup_netpoll(&nt->np);
> if (err) {
> pr_err("Not enabling netconsole for %s%d. Netpoll setup failed\n",
> NETCONSOLE_PARAM_TARGET_PREFIX, cmdline_count);
next prev parent reply other threads:[~2025-09-02 22:56 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-02 14:36 [PATCH 0/7] netpoll: Untangle netpoll and netconsole Breno Leitao
2025-09-02 14:36 ` [PATCH 1/7] netconsole: Split UDP message building and sending operations Breno Leitao
2025-09-02 22:41 ` Willem de Bruijn
2025-09-02 14:36 ` [PATCH 2/7] netpoll: move prepare skb functions to netconsole Breno Leitao
2025-09-02 22:44 ` Willem de Bruijn
2025-09-02 14:36 ` [PATCH 3/7] netpoll: Move netpoll_cleanup implementation " Breno Leitao
2025-09-02 22:49 ` Willem de Bruijn
2025-09-03 16:44 ` Breno Leitao
2025-09-03 17:13 ` Willem de Bruijn
2025-09-02 14:36 ` [PATCH 4/7] netpoll: Export zap_completion_queue Breno Leitao
2025-09-02 22:50 ` Willem de Bruijn
2025-09-03 16:51 ` Breno Leitao
2025-09-03 17:16 ` Willem de Bruijn
2025-09-02 14:36 ` [PATCH 5/7] netpoll: Move SKBs pool to netconsole side Breno Leitao
2025-09-02 22:56 ` Willem de Bruijn [this message]
2025-09-02 14:36 ` [PATCH 6/7] netpoll: Move find_skb() to netconsole and make it static Breno Leitao
2025-09-02 23:07 ` Willem de Bruijn
2025-09-02 14:36 ` [PATCH 7/7] netpoll: Flush skb_pool as part of netconsole cleanup Breno Leitao
2025-09-02 23:09 ` Willem de Bruijn
2025-09-03 0:09 ` Jakub Kicinski
2025-09-03 16:55 ` Breno Leitao
2025-09-02 15:23 ` [PATCH 0/7] netpoll: Untangle netpoll and netconsole Breno Leitao
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=willemdebruijn.kernel.a0f67bb6112a@gmail.com \
--to=willemdebruijn.kernel@gmail.com \
--cc=andrew+netdev@lunn.ch \
--cc=bigeasy@linutronix.de \
--cc=calvin@wbinvd.org \
--cc=clrkwllms@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=efault@gmx.de \
--cc=horms@kernel.org \
--cc=kernel-team@meta.com \
--cc=kuba@kernel.org \
--cc=leitao@debian.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.