From nobody Fri Oct 3 10:11:18 2025 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A69573126CF; Tue, 2 Sep 2025 14:36:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823808; cv=none; b=IYwkIbZqF9ZbtPsiHlPkRqZsQf+TWlo6w0mzDtpGrxCosgnOsWDnLYZGeL4hP/+HTy1HBnIw5UMAkSAL/W2DxQ9IviClRuySjrLxWSAcnBeYH31mKOSzYuUSYwQZ4YY5IMHzEe1GOjxuCgHazu43DYZtlEcnqEtOW2HdagLIr1c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823808; c=relaxed/simple; bh=uv+sRDVE9UdYp/rrXBaRI2PRNEO+AlIgCJajD1luaOc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qxNAvNXSJ1Wow+7zJs9f9PAvqrO11B3CRAYl+Ho6p6MhbbnQ2ui81lPX3Aq/R6B9It0O1e43eY+9k+UQZZuCmqxBhfAab9aBe9Aj/kv+ZbZqVbBX7pBhdq8+7Y8JGza6kcfs+gTzXG7PXp1zNoZzPFMoK9ENkPQ9VkJxX4qIaAw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.208.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-6188b6f501cso6339786a12.2; Tue, 02 Sep 2025 07:36:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756823805; x=1757428605; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5ixDvZ/+7M4TDPK7mHzqbLvaRWPSa4oHJo2q4oJdkek=; b=pduvmmtfyhjaHmpzgf/HaBuo6iSVIGemGAVvPd3Gj27igMfkxXDRSjFvG7bQjod2nX ErYlFQUxKIJGc4GrgFNRvMZOfKjSPnFoHBcZyTjrGEpCGdBVsxffhgR9ZdbYbuGmV/u7 1LbJjGxg418QPgH7HEXiH9/bU3QatcAfVznuzfvUTkTbD2mvbwjZUyn8NHObIbcaOazk pHqYWvTSorzwVv6103H/QqVy2pqQUfhTjWuRlr0DI8xm0xvWCPow96mogEIb5FjPACmW wfJoJUTX6qZOqUMvKOpUqIDoXM+kQ7Qq8Z9ydszK0wGX0TMqRf+CTNS2brdOEda8YtQ8 7cug== X-Forwarded-Encrypted: i=1; AJvYcCXYajrw2Wdx03kILRHo2NCMq/lNPUwOR3RWihSz60LgZbN93wP/d+KdzzWzszlMZjpGSsvTgW6kK8CTMVk=@vger.kernel.org X-Gm-Message-State: AOJu0Yya9ysoeq1NX1yTiHytAp7R2oinBFARmGRMActdub24KduniyOo yqtAraXkI6QvodpD4qOIm/adXcgJtAhMs3HyyeMwISdNn+Tng1feLz8H X-Gm-Gg: ASbGncuAEV0L2IpFAqNIQbY6sYoVLtlW11agGN7f7B2PFYF+afwsw6WQI/4Yy6xtvL7 fs116uVnRE1jIXs73BBGF2PNlaNSBH/leRPuKfnG7LJNiC9uO5s0o/gqY9GC640dPt7M50BWyzO MtfzGodwpfi0rK2iggQWNrA67TJtRgAkjYygxQ3TpZabPpteAkFe3p7jDYJI0b3nfUPyuQikDIm uP/IkhzjlJqdFmmA7zCcBSjHUxic2+rTpH8e4joMADNQxi4POLhOa0JI5uG8/BnRzMu/WI1h0B2 mlnO8hD5fx3P9FgXsB+CHA0vYfRDq1mIHM6vEq2M5JuxguUa48L6w/Ahgcyn7hhazkm/0pbkqD5 jWNyknwcAHp4P X-Google-Smtp-Source: AGHT+IEJ8WIFf9X4wGSznvxjCKq9+or8baY6JK/xSM4+M8dwgeLla+mziXvq/7bTmdPlq+UE2gO+Pg== X-Received: by 2002:a17:907:3f9a:b0:b04:590a:a5b5 with SMTP id a640c23a62f3a-b04590ace5fmr169723166b.24.1756823804683; Tue, 02 Sep 2025 07:36:44 -0700 (PDT) Received: from localhost ([2a03:2880:30ff:9::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b0432937d7esm447457966b.17.2025.09.02.07.36.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Sep 2025 07:36:44 -0700 (PDT) From: Breno Leitao Date: Tue, 02 Sep 2025 07:36:23 -0700 Subject: [PATCH 1/7] netconsole: Split UDP message building and sending operations Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250902-netpoll_untangle_v3-v1-1-51a03d6411be@debian.org> References: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> In-Reply-To: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt 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 X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=3991; i=leitao@debian.org; h=from:subject:message-id; bh=uv+sRDVE9UdYp/rrXBaRI2PRNEO+AlIgCJajD1luaOc=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBotwD5rHYtgODXvDjBr+4mxuJmvXSRnDOQlekjb 8uY3bQrCaSJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLcA+QAKCRA1o5Of/Hh3 bQZoEACHZ96Nadl46FRJbWI/4E1Gzzlm+kqKGlfPX+MXLMSXtiA6t/LNDeliZvwvYJiYzN8+7r8 Awb69iYfvz9djH/hl3znBuNkTrOmRsESsRyS/PXm5zImdPeRKl2p1tyS1sZQ1YMqrTZEYdMAZQR kctI5ZkHKBMPlcG04WXstHdTivxfFwHd2tKSxzZURVM37KCL2xbkyWAhQAKwozTjUqLurnZ5t3i IlxxhHdfTHJRd2uLPeg+Rw+WiJX0YWDIzb93Vw7JW5rPO62VpeBwLZBsrnc624n0CGt3jBMIGo7 auEEY6aUqYigyZRb4kFheTVV/5FPxRkBPVUn9+zZ0zku1Ot/LvYW0EvYz9aKTVuXL5fMW98B4A8 cjMZCBkjXKtZzdUp6JncE/QBh7A3ZT4tGPgqrlCid7oxxkR9aunXzg9JWwREbCR7q9KDtI9Neqv Rd6sYGZ8ulftOsHlBt7w7yjmn80r2H/ZEqVdq1+wM34HfGCOnVegXeb27o1syUR4kiRhAAPHRzR rLmlSbXSzLNYBBMMmctb8hyS9l/pVQtEHR/ljDRUcvDqHqT6RB4P3YsSQ5Ju4cBF6BvP+VBQ9uC 1Cr5a4sDBf2dtiMFUOEFHhclZycDQSQzdPAHCJmFj911hdVSNMlUaeXsTRQhD27uVkLuaPCAvhR iOXVNTHBxNMOGCw== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D Split the netpoll_send_udp() function into two separate operations: netpoll_prepare_skb() for message preparation and netpoll_send_skb() for transmission. This improves separation of concerns. SKB building logic is now isolated from the actual network transmission, improving code modularity and testability. Why? The separation of SKB preparation and transmission operations enables more granular locking strategies. The netconsole buffer requires lock protection during packet construction, but the transmission phase can proceed without holding the same lock. Also, this makes netpoll only reponsible for handling SKB. netpoll_prepare_skb() is now exported, but, in the upcoming change, it will be moved to netconsole, and become static. Signed-off-by: Breno Leitao Reviewed-by: Willem de Bruijn --- drivers/net/netconsole.c | 21 ++++++++++++++------- include/linux/netpoll.h | 2 ++ net/core/netpoll.c | 9 +++++---- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 194570443493b..5b8af2de719a2 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1492,18 +1492,25 @@ static struct notifier_block netconsole_netdev_noti= fier =3D { */ static void send_udp(struct netconsole_target *nt, const char *msg, int le= n) { - int result =3D netpoll_send_udp(&nt->np, msg, len); + struct sk_buff *skb; + netdev_tx_t result; =20 - if (IS_ENABLED(CONFIG_NETCONSOLE_DYNAMIC)) { - if (result =3D=3D NET_XMIT_DROP) { - u64_stats_update_begin(&nt->stats.syncp); - u64_stats_inc(&nt->stats.xmit_drop_count); - u64_stats_update_end(&nt->stats.syncp); - } else if (result =3D=3D -ENOMEM) { + skb =3D netpoll_prepare_skb(&nt->np, msg, len); + if (!skb) { + if (IS_ENABLED(CONFIG_NETCONSOLE_DYNAMIC)) { u64_stats_update_begin(&nt->stats.syncp); u64_stats_inc(&nt->stats.enomem_count); u64_stats_update_end(&nt->stats.syncp); } + return; + } + + result =3D netpoll_send_skb(&nt->np, skb); + + if (IS_ENABLED(CONFIG_NETCONSOLE_DYNAMIC) && result =3D=3D NET_XMIT_DROP)= { + u64_stats_update_begin(&nt->stats.syncp); + u64_stats_inc(&nt->stats.xmit_drop_count); + u64_stats_update_end(&nt->stats.syncp); } } =20 diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index b5ea9882eda8b..ed74889e126c7 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -69,6 +69,8 @@ static inline void netpoll_poll_enable(struct net_device = *dev) { return; } #endif =20 int netpoll_send_udp(struct netpoll *np, const char *msg, int len); +struct sk_buff *netpoll_prepare_skb(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); diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 5f65b62346d4e..e2098c19987f4 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -496,7 +496,8 @@ static void push_eth(struct netpoll *np, struct sk_buff= *skb) eth->h_proto =3D htons(ETH_P_IP); } =20 -int netpoll_send_udp(struct netpoll *np, const char *msg, int len) +struct sk_buff *netpoll_prepare_skb(struct netpoll *np, const char *msg, + int len) { int total_len, ip_len, udp_len; struct sk_buff *skb; @@ -515,7 +516,7 @@ int netpoll_send_udp(struct netpoll *np, const char *ms= g, int len) skb =3D find_skb(np, total_len + np->dev->needed_tailroom, total_len - len); if (!skb) - return -ENOMEM; + return NULL; =20 skb_copy_to_linear_data(skb, msg, len); skb_put(skb, len); @@ -528,9 +529,9 @@ int netpoll_send_udp(struct netpoll *np, const char *ms= g, int len) push_eth(np, skb); skb->dev =3D np->dev; =20 - return (int)netpoll_send_skb(np, skb); + return skb; } -EXPORT_SYMBOL(netpoll_send_udp); +EXPORT_SYMBOL(netpoll_prepare_skb); =20 =20 static void skb_pool_flush(struct netpoll *np) --=20 2.47.3 From nobody Fri Oct 3 10:11:18 2025 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1F152322C99; Tue, 2 Sep 2025 14:36:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823811; cv=none; b=SDkDALkHSUKa8vCyIBX0Acvv3PsVNtcfgX+SLz9GiXHl6yfEEDX/GwUzHrg3NPOsdFP3N+3DgnGiZkKOmP4xgIjRhFkyzgfjJo/CLDIisHJNIpsNfTMFrovqt/FYqRnqQvQQLYO6m0ZJdF4p1XrZ336JjnQFxt74GuDyqx0NUqc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823811; c=relaxed/simple; bh=QH91dZqx9n+fa6UJWQhKmr6KoM9wkO/zEYWaL3iLxbw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hhXjarzV1kJscq6szAsYiJcLN/3L/Fhy5McpQCM/agDj2Xk8IA0UPR07LvoIxanwUTlf7PQufk8Ve22iOEXi8vs/CBmAIxh8JMDVM+OyypgD0gjwJodWbOtyswfXRSsXGE9vLeTKa/96FNJA+/1Bt7zNeQLO368k55gYA6kg3mg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-b043da5a55fso242486766b.0; Tue, 02 Sep 2025 07:36:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756823806; x=1757428606; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cSUfMX9h9/cWRq/fgGMN/opuKAJc5EH3ViaOxfsE3gs=; b=uVXYQEn6TqvnQuH/sOGPnme+6NGnSJb0qUnW4TgXb0SR/c+Y/kQCTOLdLZff4zA0q4 4K+/dWbRQKrCpi82JsyvZZTOJbU6aRDoYRYtwTGXoE/7WSBsCIKZNprl70eNNJ2zbIQm DIIMxwIwNKApo+06Qus/MyKoTSqmmz47gJarVR641ZK4qonsoKTSpXd/WxtodiIMGrkJ QrVpSc0mvUfI1VydPC6qHf3GzBCxGrA9Ti67n7RnllZhliUbNnS5t+/1r1Yz8mH8ZrCx O9T5ZKHTpc8Njf62NvNd04iDd/UxWeCV0Rw1QZ3Otgghdu/H8hv+qB/P4sl03qxJAMG0 On6g== X-Forwarded-Encrypted: i=1; AJvYcCVMHiu+TaAmUyNgrzUXvglz00OMmZa/mglx+BE88GHSJt7Cggmev2MrVZTVCymX57J8PrFNAhMVWlqwwN0=@vger.kernel.org X-Gm-Message-State: AOJu0Yy37zmq+Me+5pJLQl1fxGKxvBj8xwaKXpWIg+zMzXbM5Adr8mV6 7PMHW7wHWGEYx5x+anT1aYYCexQZz1MPzY6PgDqTmYziFoLJo8q7KiAMRYG/Sg== X-Gm-Gg: ASbGncsrpQ67Ak8bo77I/3mkXuOHdPMnm6YznhCy+WAICf/gl1P8ID1/pIAw6LEBGGG mJwumUt8sMYncEHFCl6mUZxKqdPkURM0XVohLT7Q6kozKYGUtma3MnAD0Gyh43Zhsj+PYApt7MS J+m6FDqit2f2UT8/1cFkdLXq7MIwopQGOYuN33q9VeWmj3hrVL6XmwqQBmkhA8b+b89O9XCm40C abkhV05RQ/RfidJrZu1jZHpge2LFr11u/1/VYv+i4El0B6TQzZ7HBnkrn3bwEI7uO3rCiq2a1j0 BQkN/zEKB8nJnqK8k7aIK5ltHwP+OWEm5E9LUVqvCEKxl7DC1NhtKYuYbRhMxSdN+mF1yTmBZvn q1UJc6sn/IsbKCTLDF7KC0do= X-Google-Smtp-Source: AGHT+IHfacPAJ0eqlJ4ikR5eNCtobwVkC6Qxg+UKHjXDyjYPFMM+X27TbG9HQkfnuOzbL9fqKbVNmQ== X-Received: by 2002:a17:907:2da7:b0:afe:7909:f42a with SMTP id a640c23a62f3a-b01d97744a5mr1142142366b.51.1756823806238; Tue, 02 Sep 2025 07:36:46 -0700 (PDT) Received: from localhost ([2a03:2880:30ff:1::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b0444252c2dsm295439166b.81.2025.09.02.07.36.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Sep 2025 07:36:45 -0700 (PDT) From: Breno Leitao Date: Tue, 02 Sep 2025 07:36:24 -0700 Subject: [PATCH 2/7] netpoll: move prepare skb functions to netconsole Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250902-netpoll_untangle_v3-v1-2-51a03d6411be@debian.org> References: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> In-Reply-To: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt 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 X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=11674; i=leitao@debian.org; h=from:subject:message-id; bh=QH91dZqx9n+fa6UJWQhKmr6KoM9wkO/zEYWaL3iLxbw=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBotwD5UNbLZUNgiNKJYGRkTDovTVZyqOaKlSyK6 TYgooOeZG+JAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLcA+QAKCRA1o5Of/Hh3 bSg4D/9JoRLSmgTNXM77atgyT/Q6ZeVcXmI56CiK9qdz5y3XbAYDusi5xwbc+ZWmjhUpquk0IXL XTJxIshkfa/qgv6MNO4R0JqQT5Us1VudXtJacbAnI9LDgsKk+zwlIrx0VdAgGgTSO5a/QyRs5pd NyoINFQwDu760evpMlWAB3Q0xMKT46h9bdh7SonuiJ5WvTLiwlNA8paRYjekubZCYjqzkeGZvDq ppJDm0OLCoYDUV9mDFjojd3Q63jWNwp8D+cR+5ZrqQ5VkcZ5UIQDkm1G1LFiSILlNIwfIJcn6jM 15Lsti3eaTZThyiiLotFxtw2chqlw3mt3HRLXp+5pxUm4NtkD/0a2kD1YcaqWkMpeOMfZDvzzT7 7Ep3aMTivqViwlTxuiVy3YhKWPCYLtVQPUEgRR06/RooT9o17pC6sStucB0gFopF5fmPe0sHwFJ W2z6yyXx39MiprNtlJK8oQl+6cVYiSjH0LhPm1LBiBwiTITwuMlI2owgz75JTpTwbsMk5KVFQb4 McQx0uYrUhwqC7fPCXMxlN0gpAAShfygaxit4zYtIWVCjvpl78wuLZscDjraWINVoHmKYFj4X29 EcJYIrAmUPwhkMvAxXNNBXDVckswpi3hP1ee5SOplkldDBChICDN0KEJYMKc/sWYDqagcTs3xYZ Tf2uaRd/ktyWCoQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D Move the UDP packet preparation logic from netpoll core to netconsole driver, consolidating network console-specific functionality. Changes include: - Move netpoll_prepare_skb() from net/core/netpoll.c to netconsole.c - Move all UDP/IP header construction helpers (push_udp, push_ipv4, push_ipv6, push_eth, netpoll_udp_checksum) to netconsole.c - Add necessary network header includes to netconsole.c - Export find_skb() from netpoll core to allow netconsole access * This is temporary, given that skb pool management is a netconsole thing. This will be removed in the upcoming change in this patchset. With this in mind, netconsole become another usual netpoll user, by calling it with SKBs instead of msgs and len. Signed-off-by: Breno Leitao Reviewed-by: Willem de Bruijn --- drivers/net/netconsole.c | 147 +++++++++++++++++++++++++++++++++++++++++++= ++ include/linux/netpoll.h | 3 +- net/core/netpoll.c | 151 +------------------------------------------= ---- 3 files changed, 150 insertions(+), 151 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 5b8af2de719a2..30731711571be 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -40,6 +40,10 @@ #include #include =20 +#include +#include +#include + MODULE_AUTHOR("Matt Mackall "); MODULE_DESCRIPTION("Console driver for network interfaces"); MODULE_LICENSE("GPL"); @@ -1480,6 +1484,149 @@ static struct notifier_block netconsole_netdev_noti= fier =3D { .notifier_call =3D netconsole_netdev_event, }; =20 +static void netpoll_udp_checksum(struct netpoll *np, struct sk_buff *skb, + int len) +{ + struct udphdr *udph; + int udp_len; + + udp_len =3D len + sizeof(struct udphdr); + udph =3D udp_hdr(skb); + + /* check needs to be set, since it will be consumed in csum_partial */ + udph->check =3D 0; + if (np->ipv6) + udph->check =3D csum_ipv6_magic(&np->local_ip.in6, + &np->remote_ip.in6, + udp_len, IPPROTO_UDP, + csum_partial(udph, udp_len, 0)); + else + udph->check =3D csum_tcpudp_magic(np->local_ip.ip, + np->remote_ip.ip, + udp_len, IPPROTO_UDP, + csum_partial(udph, udp_len, 0)); + if (udph->check =3D=3D 0) + udph->check =3D CSUM_MANGLED_0; +} + +static void push_ipv6(struct netpoll *np, struct sk_buff *skb, int len) +{ + struct ipv6hdr *ip6h; + + skb_push(skb, sizeof(struct ipv6hdr)); + skb_reset_network_header(skb); + ip6h =3D ipv6_hdr(skb); + + /* ip6h->version =3D 6; ip6h->priority =3D 0; */ + *(unsigned char *)ip6h =3D 0x60; + ip6h->flow_lbl[0] =3D 0; + ip6h->flow_lbl[1] =3D 0; + ip6h->flow_lbl[2] =3D 0; + + ip6h->payload_len =3D htons(sizeof(struct udphdr) + len); + ip6h->nexthdr =3D IPPROTO_UDP; + ip6h->hop_limit =3D 32; + ip6h->saddr =3D np->local_ip.in6; + ip6h->daddr =3D np->remote_ip.in6; + + skb->protocol =3D htons(ETH_P_IPV6); +} + +static void push_ipv4(struct netpoll *np, struct sk_buff *skb, int len) +{ + static atomic_t ip_ident; + struct iphdr *iph; + int ip_len; + + ip_len =3D len + sizeof(struct udphdr) + sizeof(struct iphdr); + + skb_push(skb, sizeof(struct iphdr)); + skb_reset_network_header(skb); + iph =3D ip_hdr(skb); + + /* iph->version =3D 4; iph->ihl =3D 5; */ + *(unsigned char *)iph =3D 0x45; + iph->tos =3D 0; + put_unaligned(htons(ip_len), &iph->tot_len); + iph->id =3D htons(atomic_inc_return(&ip_ident)); + iph->frag_off =3D 0; + iph->ttl =3D 64; + iph->protocol =3D IPPROTO_UDP; + iph->check =3D 0; + put_unaligned(np->local_ip.ip, &iph->saddr); + put_unaligned(np->remote_ip.ip, &iph->daddr); + iph->check =3D ip_fast_csum((unsigned char *)iph, iph->ihl); + skb->protocol =3D htons(ETH_P_IP); +} + +static void push_udp(struct netpoll *np, struct sk_buff *skb, int len) +{ + struct udphdr *udph; + int udp_len; + + udp_len =3D len + sizeof(struct udphdr); + + skb_push(skb, sizeof(struct udphdr)); + skb_reset_transport_header(skb); + + udph =3D udp_hdr(skb); + udph->source =3D htons(np->local_port); + udph->dest =3D htons(np->remote_port); + udph->len =3D htons(udp_len); + + netpoll_udp_checksum(np, skb, len); +} + +static void push_eth(struct netpoll *np, struct sk_buff *skb) +{ + struct ethhdr *eth; + + eth =3D skb_push(skb, ETH_HLEN); + skb_reset_mac_header(skb); + ether_addr_copy(eth->h_source, np->dev->dev_addr); + ether_addr_copy(eth->h_dest, np->remote_mac); + if (np->ipv6) + eth->h_proto =3D htons(ETH_P_IPV6); + else + eth->h_proto =3D htons(ETH_P_IP); +} + +static struct sk_buff *netpoll_prepare_skb(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 =3D len + sizeof(struct udphdr); + if (np->ipv6) + ip_len =3D udp_len + sizeof(struct ipv6hdr); + else + ip_len =3D udp_len + sizeof(struct iphdr); + + total_len =3D ip_len + LL_RESERVED_SPACE(np->dev); + + skb =3D find_skb(np, total_len + np->dev->needed_tailroom, + total_len - len); + if (!skb) + return NULL; + + 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 =3D np->dev; + + return skb; +} + /** * send_udp - Wrapper for netpoll_send_udp that counts errors * @nt: target to send message to diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index ed74889e126c7..481ec474fa6b9 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -69,14 +69,13 @@ static inline void netpoll_poll_enable(struct net_devic= e *dev) { return; } #endif =20 int netpoll_send_udp(struct netpoll *np, const char *msg, int len); -struct sk_buff *netpoll_prepare_skb(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); void netpoll_cleanup(struct netpoll *np); void do_netpoll_cleanup(struct netpoll *np); netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb); +struct sk_buff *find_skb(struct netpoll *np, int len, int reserve); =20 #ifdef CONFIG_NETPOLL static inline void *netpoll_poll_lock(struct napi_struct *napi) diff --git a/net/core/netpoll.c b/net/core/netpoll.c index e2098c19987f4..b4634e91568e8 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -29,11 +29,8 @@ #include #include #include -#include -#include #include #include -#include #include #include #include @@ -271,7 +268,7 @@ static void zap_completion_queue(void) put_cpu_var(softnet_data); } =20 -static struct sk_buff *find_skb(struct netpoll *np, int len, int reserve) +struct sk_buff *find_skb(struct netpoll *np, int len, int reserve) { int count =3D 0; struct sk_buff *skb; @@ -297,6 +294,7 @@ static struct sk_buff *find_skb(struct netpoll *np, int= len, int reserve) skb_reserve(skb, reserve); return skb; } +EXPORT_SYMBOL_GPL(find_skb); =20 static int netpoll_owner_active(struct net_device *dev) { @@ -372,31 +370,6 @@ static netdev_tx_t __netpoll_send_skb(struct netpoll *= np, struct sk_buff *skb) return ret; } =20 -static void netpoll_udp_checksum(struct netpoll *np, struct sk_buff *skb, - int len) -{ - struct udphdr *udph; - int udp_len; - - udp_len =3D len + sizeof(struct udphdr); - udph =3D udp_hdr(skb); - - /* check needs to be set, since it will be consumed in csum_partial */ - udph->check =3D 0; - if (np->ipv6) - udph->check =3D csum_ipv6_magic(&np->local_ip.in6, - &np->remote_ip.in6, - udp_len, IPPROTO_UDP, - csum_partial(udph, udp_len, 0)); - else - udph->check =3D csum_tcpudp_magic(np->local_ip.ip, - np->remote_ip.ip, - udp_len, IPPROTO_UDP, - csum_partial(udph, udp_len, 0)); - if (udph->check =3D=3D 0) - udph->check =3D CSUM_MANGLED_0; -} - netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) { unsigned long flags; @@ -414,126 +387,6 @@ netdev_tx_t netpoll_send_skb(struct netpoll *np, stru= ct sk_buff *skb) } EXPORT_SYMBOL(netpoll_send_skb); =20 -static void push_ipv6(struct netpoll *np, struct sk_buff *skb, int len) -{ - struct ipv6hdr *ip6h; - - skb_push(skb, sizeof(struct ipv6hdr)); - skb_reset_network_header(skb); - ip6h =3D ipv6_hdr(skb); - - /* ip6h->version =3D 6; ip6h->priority =3D 0; */ - *(unsigned char *)ip6h =3D 0x60; - ip6h->flow_lbl[0] =3D 0; - ip6h->flow_lbl[1] =3D 0; - ip6h->flow_lbl[2] =3D 0; - - ip6h->payload_len =3D htons(sizeof(struct udphdr) + len); - ip6h->nexthdr =3D IPPROTO_UDP; - ip6h->hop_limit =3D 32; - ip6h->saddr =3D np->local_ip.in6; - ip6h->daddr =3D np->remote_ip.in6; - - skb->protocol =3D htons(ETH_P_IPV6); -} - -static void push_ipv4(struct netpoll *np, struct sk_buff *skb, int len) -{ - static atomic_t ip_ident; - struct iphdr *iph; - int ip_len; - - ip_len =3D len + sizeof(struct udphdr) + sizeof(struct iphdr); - - skb_push(skb, sizeof(struct iphdr)); - skb_reset_network_header(skb); - iph =3D ip_hdr(skb); - - /* iph->version =3D 4; iph->ihl =3D 5; */ - *(unsigned char *)iph =3D 0x45; - iph->tos =3D 0; - put_unaligned(htons(ip_len), &iph->tot_len); - iph->id =3D htons(atomic_inc_return(&ip_ident)); - iph->frag_off =3D 0; - iph->ttl =3D 64; - iph->protocol =3D IPPROTO_UDP; - iph->check =3D 0; - put_unaligned(np->local_ip.ip, &iph->saddr); - put_unaligned(np->remote_ip.ip, &iph->daddr); - iph->check =3D ip_fast_csum((unsigned char *)iph, iph->ihl); - skb->protocol =3D htons(ETH_P_IP); -} - -static void push_udp(struct netpoll *np, struct sk_buff *skb, int len) -{ - struct udphdr *udph; - int udp_len; - - udp_len =3D len + sizeof(struct udphdr); - - skb_push(skb, sizeof(struct udphdr)); - skb_reset_transport_header(skb); - - udph =3D udp_hdr(skb); - udph->source =3D htons(np->local_port); - udph->dest =3D htons(np->remote_port); - udph->len =3D htons(udp_len); - - netpoll_udp_checksum(np, skb, len); -} - -static void push_eth(struct netpoll *np, struct sk_buff *skb) -{ - struct ethhdr *eth; - - eth =3D skb_push(skb, ETH_HLEN); - skb_reset_mac_header(skb); - ether_addr_copy(eth->h_source, np->dev->dev_addr); - ether_addr_copy(eth->h_dest, np->remote_mac); - if (np->ipv6) - eth->h_proto =3D htons(ETH_P_IPV6); - else - eth->h_proto =3D htons(ETH_P_IP); -} - -struct sk_buff *netpoll_prepare_skb(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 =3D len + sizeof(struct udphdr); - if (np->ipv6) - ip_len =3D udp_len + sizeof(struct ipv6hdr); - else - ip_len =3D udp_len + sizeof(struct iphdr); - - total_len =3D ip_len + LL_RESERVED_SPACE(np->dev); - - skb =3D find_skb(np, total_len + np->dev->needed_tailroom, - total_len - len); - if (!skb) - return NULL; - - 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 =3D np->dev; - - return skb; -} -EXPORT_SYMBOL(netpoll_prepare_skb); - - static void skb_pool_flush(struct netpoll *np) { struct sk_buff_head *skb_pool; --=20 2.47.3 From nobody Fri Oct 3 10:11:18 2025 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9B1AB324B07; Tue, 2 Sep 2025 14:36:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823811; cv=none; b=heui629QB8gb2JFkCjlm8NwvtOOesvyVYgd+ePzCgDizqtNmxayCgMp+YlvVp22BpT/9Qzrf2obfRlA2DAoY8a346eOSXL95xBwfJXi0OuhbrrEY3Z2msrz89Vs/8jfAkzD/E2s700G7rzh9FQPWVj+k7rGv+kQ1UP6V6eyB28I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823811; c=relaxed/simple; bh=vdJ3o7SQzqokdbSPEfnxGV0IOZXYQuFhEVIrfm9ulm8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Qmjd5Fak3VWmmB2EJIKtpqeOShT1FtZ7MkaJLTnXmSM+XEaXbRnNljBVOFAF5cK2kBk6bbRhgplDB1O1Jw6FjssetShdOJGtT1yg8oqNooc+/9CJHZRh4pFhGZQv/tPV0UAFoJm4EB7rEafjQ3tcldRNFcUxMHFKpVhZobIpcZo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-b042cc39551so318435466b.0; Tue, 02 Sep 2025 07:36:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756823808; x=1757428608; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UiAPf+HDKdH8QBueSzvHjjUvhHwaKw+els1x3HrZ4RU=; b=ltrKNn373TNmcfP6U/CYqxglsElpy08VH4XRlxHNNR2hrKNavrrZstqIlGBLm6Dldn D+gCkwP4FzNczGtd/0iofBFXQY0ZrCExuz6f38OR1YWIYnxhoVBLfFPy7WwPi4riJFT7 TKZxfMLGsALttTAlSfXdSn5aSY78C4RYa36zmaeamar6R0AP1FaShL2lI5vaaYGFqXk/ ba9grEr3Zu7TDBvsc03qxwgBA/Pw05QFxdzDQTz6M2RtUvSROwJiy+4m948mkLnDn+XN CMtd8T5Rw0LAfqPw6bbvSFnYblXvHfFw1GtqkJwpuCCKjg3Vrw1y/CV1cAoqPQoza/St pB/w== X-Forwarded-Encrypted: i=1; AJvYcCVRFtmq2vnaiwj0tZBR+VbLVpoEXjCZXWxfaI6oQLzsSYxgd4Y75LFjOM6RWIndhcccxUvp8vn14S/NPB8=@vger.kernel.org X-Gm-Message-State: AOJu0YzPU4popP4CJmBSOADoSE4fTdDrWUkshXWWbCsKIzDzLq9MFqaX B45RceWl2k7Y4jhCsU5g+RTRAobHK8yQAuIZBU6BQYgvbFByyc+zLS2r X-Gm-Gg: ASbGncujYI4E4o4/ZEPtHHmxSJN0wYWGIA4VK7faU/tPYGkY8/RL8Nq+UPAncBtAceL b8mbhW/kfiTAOLRq7BX1rGUKQIlUTzpu3ye2/GCSxgbywM1PrZoNWRJJdqnlrX1sdHGChfUdwG4 s6oMwuUFDEnHrubJ7qlOU7hwrX1g4yCclm/79OMbzjR5N/JPc0Emlql7JLezXdhu63PbnaHo2iC 25Z2pgZ1/20MIHWmrXuel2C+TLxNDBUGinA6rKXaZFQnAAOQP12p9kZJjiKr+UBahKsOk4fkHya cXHgwWdxpfcDwKJz2GacJ1GTp3jDNj8jVf84vFI9l88jH06/uXZ0w2kMc1p9Mv6OEVl/3y+mYl3 on36DPYxyYmc2 X-Google-Smtp-Source: AGHT+IFBbylTXgioEB03UJeR/a9ael5sSxKGno3BrjK1Q6HEnT3bGvVV8SiL8gFlPBGOoxtICYj/2A== X-Received: by 2002:a17:906:c445:b0:b04:198c:54a9 with SMTP id a640c23a62f3a-b04198c5b14mr763047966b.61.1756823807717; Tue, 02 Sep 2025 07:36:47 -0700 (PDT) Received: from localhost ([2a03:2880:30ff:1::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b042b0046ecsm523355066b.71.2025.09.02.07.36.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Sep 2025 07:36:47 -0700 (PDT) From: Breno Leitao Date: Tue, 02 Sep 2025 07:36:25 -0700 Subject: [PATCH 3/7] netpoll: Move netpoll_cleanup implementation to netconsole Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250902-netpoll_untangle_v3-v1-3-51a03d6411be@debian.org> References: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> In-Reply-To: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt 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 X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=2154; i=leitao@debian.org; h=from:subject:message-id; bh=vdJ3o7SQzqokdbSPEfnxGV0IOZXYQuFhEVIrfm9ulm8=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBotwD5fUdVRbJh9XQBsFtAPxXKE9nRNZAr8ehgN T8VUZFGtkWJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLcA+QAKCRA1o5Of/Hh3 bUFgD/0QFYgP3e916ToEj41ZVMjK8Hy81YOhOrzdsh/fRhQenOOgsfPXPa5TBmbSevlZZ5Qe+nW Ati0sKNcuAhwrfir+A2iCgNb2KzFkwhvJOWrea3SMDEmyp8Cs7AbtV65sI5AUI8+pqj0w5amDPU h2ic3xNiHxM0ytgibne1aasxf1Q5kKWsU6zQ51EzNZ1Xhh5pQqmuVGC9UfCRczH5ZNhBc/eQNXG AcGPfppgEW3PEcSO2GwMH8ff96CKwK6DV33CUlvNcUTf9e8NKCLym3Y9Jru88mo5GqRsV38/uRO 0JUN7TEPmFDiB/SROV/97ZyIKG4DeFeQunCDFMqgoOr3OXeiDdu3VyWNmlAbaL2nFb4S58Fz4Vl P/iwHhTb0UpZgSc75k4ShSWpcNuMcHxuO0YhPLaCpli/3VivMJ0ldbbwlSRYsN/bTcDoKhLu3oe +Oj+7wdrfj6tIht+6/mEkWumOc5N1WI6EdOdHKykOOKlrKQ/8oVTqs6SEFJosJPrjpYsYsb//fW 9c+WGN1k+20B6q+gIZDCEPDphQMVipXOekj2DOKamwFHlG/pm0Mn+5FR730HGVC+qBAl7x6ej6a 1bJqsFr8yHb6x7TpAtXh+b2saL057ftY4+veU9MtpGzViT9oBQNl52qBNH9a1Lk51hG8k3E/nIa YEB2AaE2pObJCvA== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D Shift the definition of netpoll_cleanup() from netpoll core to the netconsole driver, updating all relevant file references. This change centralizes cleanup logic alongside netconsole target management, Given netpoll_cleanup() is only called by netconsole, keep it there. Signed-off-by: Breno Leitao Reviewed-by: Willem de Bruijn --- drivers/net/netconsole.c | 10 ++++++++++ include/linux/netpoll.h | 1 - net/core/netpoll.c | 10 ---------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 30731711571be..90e359b87469a 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -260,6 +260,16 @@ static struct netconsole_target *alloc_and_init(void) return nt; } =20 +static void netpoll_cleanup(struct netpoll *np) +{ + rtnl_lock(); + if (!np->dev) + goto out; + do_netpoll_cleanup(np); +out: + rtnl_unlock(); +} + /* Clean up every target in the cleanup_list and move the clean targets ba= ck to * the main target_list. */ diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index 481ec474fa6b9..65bfade025f09 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -72,7 +72,6 @@ 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); -void netpoll_cleanup(struct netpoll *np); void do_netpoll_cleanup(struct netpoll *np); netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb); struct sk_buff *find_skb(struct netpoll *np, int len, int reserve); diff --git a/net/core/netpoll.c b/net/core/netpoll.c index b4634e91568e8..9e12a667a5f0a 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -703,13 +703,3 @@ void do_netpoll_cleanup(struct netpoll *np) } EXPORT_SYMBOL(do_netpoll_cleanup); =20 -void netpoll_cleanup(struct netpoll *np) -{ - rtnl_lock(); - if (!np->dev) - goto out; - do_netpoll_cleanup(np); -out: - rtnl_unlock(); -} -EXPORT_SYMBOL(netpoll_cleanup); --=20 2.47.3 From nobody Fri Oct 3 10:11:18 2025 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 70D12324B38; Tue, 2 Sep 2025 14:36:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823813; cv=none; b=unACDbl+UixNH4m4/Ip9j7PnVZYpO+HGw94rqMlvwOH1Fo/CQGg1+1U7EYdr3OU83B2kaxrxvALr1yF+dMY/YUxR8dYwVR1CMXsomI+keMvs94eqhDNNyXuEBQQLB75+npmTHROT97AZ3ku6kiQZlF6tZGVok46qct02OXgG8Ag= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823813; c=relaxed/simple; bh=fBTiCfurI7dxZQKPkwQFVbTBFADCdtM6FvMkk97zj/A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LIG9eftbB/auRlqGUrJwyy5FruBogf9RY4/U8ciH5PAM3rGmVsqE+x9xE0drSBcvYJiTX0Whq1xqC59ubx56W+mNHjmIVx3U2MUoGIZmXTGifKQoMIIPkTgicjr14KSSA0HtkBo2DDnLwoP8i2bXaIEft+W8s9dixC+Rga4mf5w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.208.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-61cd3748c6dso11315136a12.3; Tue, 02 Sep 2025 07:36:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756823809; x=1757428609; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TdT0QyqHw8TFh37W3ZGyN5wTJOSamT7r/yaGCZKnaWk=; b=t9KMHiQqEIT5szHnA0dNkPaKUrNMWAoIsO6xyMv0G6LBGgglJZ9qfrbYCGBRM9CC66 Ay/oDvLDLYKSKsdHv+YhD9iqD9l8M9uMMhjV2QrceJ8hwy/uq/+TGYDbFnTFvb3Gvp59 B9j8MbfyJ+ECMdg3pfykT2iparFk/38MR+rr2KVZ6X2DCdEvxkOcRx7f9209d6CU2qyG 0i/iyIO85wSW4Mz8eZsIMTGiJwXqZuATCZl9u4gyJaO/7oirY3Tazuh2TfcgY3y//FU+ I4EtkmC+IYmt5DEg9YGzidyV5Khh0lta86SbTLKWJg9NW4AaNbXWubDW4cbCBdxP0xEm TCbA== X-Forwarded-Encrypted: i=1; AJvYcCXmbkgDuI9N2ydvuA/2ixh+aF7Va3OcMSfqmOH874vPo8QuVnQk8hiJDjdtE2qbFXxBCJKWsJ1arS+ddhY=@vger.kernel.org X-Gm-Message-State: AOJu0YwQ1LQZFhvftFTU5QNhHOAIBumaBm2H4PouWI6CDBVelwOIewnt mpreaortMaPyQnDvwkoHUsANBJmB9FmBsd8gFn3wFjSLRFyeC1wHLd6Z X-Gm-Gg: ASbGncsU916/QMIQmtAEaM1EC9eBzhBRMiBDY0mq6Bepmx63YZ8qlRhzT0uBNRIOnGU 2kGwBwID6IxZuZ418Ba/AmU2nw0/OYkdCOSyw/im2oMyMvT89AHteV3tFRpa7L0LXkaMkQK7ENK kJY0MymziC2HK6F2dAImNwIk8CTClCSBm/gRynU59M1TKVoDYNIRBiN26hkSOkaGrBHwHLfieaW 35v7zuZr3RdDeEgokAmwufS+5caxIuB8aXrSvDiWTOPZA78Au5xd3qNR1g7aZAzSbOexmcD2niO WQDsfAMuwPQsrKIzSF+bJx7+3IjG/wzqp1iZ77cGON+SIRXtZrlTABXOGn8u3sUcu3zp6/OTqOP VuUjGO1x8vA== X-Google-Smtp-Source: AGHT+IEHuzvAoaTJbReKihr4Y0+Pz01K1SXjkSISpeaK7d+VFZby3xDPxx5UZ48jlE8bdq8epjBMog== X-Received: by 2002:a17:906:6a04:b0:b04:37c4:115f with SMTP id a640c23a62f3a-b0437c41a5dmr683227466b.39.1756823809191; Tue, 02 Sep 2025 07:36:49 -0700 (PDT) Received: from localhost ([2a03:2880:30ff::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b042dcb9105sm504898266b.2.2025.09.02.07.36.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Sep 2025 07:36:48 -0700 (PDT) From: Breno Leitao Date: Tue, 02 Sep 2025 07:36:26 -0700 Subject: [PATCH 4/7] netpoll: Export zap_completion_queue Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250902-netpoll_untangle_v3-v1-4-51a03d6411be@debian.org> References: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> In-Reply-To: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt 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 X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=1998; i=leitao@debian.org; h=from:subject:message-id; bh=fBTiCfurI7dxZQKPkwQFVbTBFADCdtM6FvMkk97zj/A=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBotwD5A2uswZH86oyEbSVUftlref/NBbjXIxRCb j8dbNrtpDaJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLcA+QAKCRA1o5Of/Hh3 bTnpEACaL/WY9SZPtvR2SrvKuVhDen4RCN5P/smxFwX/+Pj56tSnTIZHDAVXdKbQpovFZwA6+12 pJmDybLaqffBt5AooIimbU/u95I7B511jO0rfU0oW78qXqgNFtq2Af31gjqGVMUpT3JW9E8KjDs nvQtDUF5TV/hXVE5ts8WQKHHp/c8xPyY80swiyeeEGX90UYPrjxV/PQGLLfnDiUiBecLU3M+hDO eDibeFkvbxt3m4T2FiFrcpdXIVnMGnpbJZa1KtVLKxhmTGoF1l/ezvHSKLILPOhjFu5ZSpN4kUG AUIKkaNgunm3Dt7tlOVm7DLNv6+Wpdk7KCf53N3lr3+F/kiOL9GQoIpR8OhMeZN3De7ZUwqRfqX ziMcq8CQEgQ+wbJnsr04Lm/pR5h6IgeGjQ57KgE8BLnh1eU8E/6eDl90QeVIT56ivszzf31HikQ ENcaqowI93CrDbVWCo2IH+wFA2EHbZBrqJscJYadl2hd96hBrpc+5tvB2E4E4o+HeawdX4GJXM+ 9Ik2YrwFZIwcpGjMLOB1hS2rU/LvnE+4w9h0MpOGfI+S7NNrvtV3kE/+ZoD01ltF16IxZdFh0cU mAsXne+MJBbDTQVVgoEy6TJ4zRO2qP7XKECKRCuWYMPiOSeTaeJPSBar3fuHGmWJP1Kf9VUwoyj n5OJ9rJtI2zDzqQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D Make zap_completion_queue() a globally visible symbol by changing its linkage to non-static and adding EXPORT_SYMBOL_GPL. This is a true netpoll function that will be needed by non-netpoll functions that will be moved away from netpoll. This will allow moving the skb pool management to netconsole, mainly find_skb(), which invokes zap_completion_queue(), and will be moved to netconsole. Signed-off-by: Breno Leitao Reviewed-by: Willem de Bruijn --- include/linux/netpoll.h | 1 + net/core/netpoll.c | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index 65bfade025f09..7f8b4d758a1e7 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -75,6 +75,7 @@ void __netpoll_free(struct netpoll *np); void do_netpoll_cleanup(struct netpoll *np); netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb); struct sk_buff *find_skb(struct netpoll *np, int len, int reserve); +void zap_completion_queue(void); =20 #ifdef CONFIG_NETPOLL static inline void *netpoll_poll_lock(struct napi_struct *napi) diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 9e12a667a5f0a..04a55ec392fd2 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -50,8 +50,6 @@ sizeof(struct udphdr) + \ MAX_UDP_CHUNK) =20 -static void zap_completion_queue(void); - static unsigned int carrier_timeout =3D 4; module_param(carrier_timeout, uint, 0644); =20 @@ -240,7 +238,7 @@ static void refill_skbs(struct netpoll *np) spin_unlock_irqrestore(&skb_pool->lock, flags); } =20 -static void zap_completion_queue(void) +void zap_completion_queue(void) { unsigned long flags; struct softnet_data *sd =3D &get_cpu_var(softnet_data); @@ -267,6 +265,7 @@ static void zap_completion_queue(void) =20 put_cpu_var(softnet_data); } +EXPORT_SYMBOL_GPL(zap_completion_queue); =20 struct sk_buff *find_skb(struct netpoll *np, int len, int reserve) { --=20 2.47.3 From nobody Fri Oct 3 10:11:18 2025 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 72DE1334385; Tue, 2 Sep 2025 14:36:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823816; cv=none; b=f4knn8GOnB76eEtd8M7x1Ptg8izzzjsb6r9gPwnGL7t258dOnTHQNUSZlcY9EUi5mKydAMAhC4LItXrZGleJeV/wgqkuYBhBP6FPpqOi19gsGr5aI8QsQMA9wfwYnoap8IgXF22US6j1BPMGEmGMcPY2AC9SAqPkSvbUWxwE494= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823816; c=relaxed/simple; bh=vsrCuCc+y3e2UkrkHsJWcHRSJIHfaZdVu6TPSorMirA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GnkmEFXuVAHUbkvFLaIraCdguesfB5I/1eafR5ePCYqsJZLNO3L3bIAUat8lIsDTeBkYWpPhXBZ5m36wev2xOwE8ISrphxwi/sCe86BJNT75Sr1plj/SA2L+lI7S6W+LAgkUvuBe+vHneGrtCw3zNw9T3rdc5k3UY7gb4//d2sY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-b04271cfc3eso283732166b.3; Tue, 02 Sep 2025 07:36:54 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756823813; x=1757428613; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AqIPIeQVq0Fjz/lLCF7nvzMdLzgG3+VjQlkd5zloZBo=; b=ewbmWdz8MorNOLKbV1ukDwY6cyECdJ39ir3EJgmCiTy/AVdYmtOOUIVH9P9fnPg/60 UdfVXBtigPZ1zrIbOTlCkARhvaq67mOF3/K8AaXFMOzOpcCF8Sc979VwA1XdxzcWTKFK tiv1Hq84wwZRlUORsRkxs35pAzvz9SAZP1xo1Oq/NwCp/cnkqU27cpXhQi28DGrvQ4fI FqeTC7wj/XysNNe6YLo0EaFrplhP1GB5fHy+yadbZs3OgjpADUplR9qRenmfbpWFxehq pZkgNyYYoeQQIX9YhNeqgaoIkKojKyPcFnaNps+cqOsYONObISsNTaOg5UqRKDBY6pCs nSFA== X-Forwarded-Encrypted: i=1; AJvYcCVC0ovC2l4RySM1l27cxoAnDMeco+SfZBF2VuQluqCOVY+0RyDLJJRod4zuwHSP0fUDuIkpFf4gu+IYPUo=@vger.kernel.org X-Gm-Message-State: AOJu0YxmtP0FA/mLwC/Q2YPLWo7XKLRhv6iLezrosEyvH6ZIifKBiwJy IKy318Q1E8lUj4lJUWZGpkMFQOrNRmMHPehSKzXxRynjXBaZ74NJK+7l X-Gm-Gg: ASbGncvdG5wzkNiVoDe9L7ZbttMc2f+Swa3+XhiAAlN8BbYXB9e2xKXEwpOPX6ow+Wa 5XuiGTr1M4wLy082RDr8IrlpuG8ot0S3mWs3yrok5GbYNiDNIOBmmHbsUCIVB7doohffgI4oHM8 u7AyPw7wKAc2TtDFgvWP3cULPRvCZ7Ysq/eDI210i1HqRm+WghqLkc3h/9pBRUt+Tpa/+sAeu6a PsqNJOyQCovEmpHagqm5/sfRFLJt1K8k/o2LhLWyBQSnNKfj/KrFfvLmpjbIdiXgt6Xl0UYlnTS 1QXg9heOf0tDP2JazGe+zNzAB41glo9xEOJfjXsqRZkOQRtbwpjg2LlS/jPUgklGSxNwOmlZliC USVsmN6vKTUeP X-Google-Smtp-Source: AGHT+IF8xZJixysxsFusbsE0Ye6Xr4jK/k2DZ2OhraPE7YLKOsg62XcMQkuZLz0FTLgQFbEE7IkJ4Q== X-Received: by 2002:a17:907:7f8d:b0:b04:4147:9f81 with SMTP id a640c23a62f3a-b044147a275mr500322766b.21.1756823810696; Tue, 02 Sep 2025 07:36:50 -0700 (PDT) Received: from localhost ([2a03:2880:30ff:4::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b0423ed35e4sm557901966b.25.2025.09.02.07.36.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Sep 2025 07:36:50 -0700 (PDT) From: Breno Leitao Date: Tue, 02 Sep 2025 07:36:27 -0700 Subject: [PATCH 5/7] netpoll: Move SKBs pool to netconsole side Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250902-netpoll_untangle_v3-v1-5-51a03d6411be@debian.org> References: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> In-Reply-To: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt 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 X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=5421; i=leitao@debian.org; h=from:subject:message-id; bh=vsrCuCc+y3e2UkrkHsJWcHRSJIHfaZdVu6TPSorMirA=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBotwD5c+qcxpIMfrTkCDp6s6lxxxbSQgY5ysHQM vNdoU/AX5uJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLcA+QAKCRA1o5Of/Hh3 bbrLD/98wwy4jxs70ben86y7aoFfmrV5I+9qF5baLE8s0DQM6unhSSxAvbk4kzy+EhUyC0DPSnS lwNzWyB1uzAJRYSlsl6Pg1tdjxkCCuXyGUbEVJwLMRWbTRKRcNqoU0RiEnAFNY4uCtUt7UQpCE5 0ypeROqBBoe6wldechrkjzdJey6Yve3RI4gAzmsKtuv9UZ2iQ9069XqHShTjFi+gf+vy+CONUpG mk/N2o4pn2MlYg0ZuoG2Z1UZEI2+LNfdDIuuYnsRKiAqqfKzW429FH2X2CWfM+PwzHk3dhtn/J8 xxAlVdVs5zlDhr2fIU9Y/bgyzuFH982p6wnahSTTRBRwSD/2mS1jmBTK5Ji8sGJoK8Jgqh32viE OaB//1b09UTDKylPF9qgJRHu2wMxAKG4Dq/vE3Lhd4/BHw1ed6C2QSEi+iSuqN+VZI9CqCOnXjG 1H/W0y5Ow4DFMKW1DpOIJaqq+2Ku3Y8sXfmOml2Yp+OHNhdMakLF096An9mZ2S95VwxB8nRavB2 YXCe92mUUJkUne4jigcUlrhjHB0YgeLCIJowIBVH9zOz0STVPxTA1caWFw98VKkMDpTYsM0wly+ 8s9nR9UGCRnBycyUdVJ38WmvT/gtlYL8Lq3xhk5IcIh6y4cGAa5KHKBmMWv6f+4kmIlqxhywDoP yRwCG7kaoGiNb8g== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D 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 --- 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 =20 +/* + * 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=3D[src-port]@[src-ip]/[dev],[tgt= -port]@/[tgt-macaddr]"); @@ -172,6 +185,33 @@ struct netconsole_target { char buf[MAX_PRINT_CHUNK]; }; =20 +static void refill_skbs(struct netpoll *np) +{ + struct sk_buff_head *skb_pool; + struct sk_buff *skb; + unsigned long flags; + + skb_pool =3D &np->skb_pool; + + spin_lock_irqsave(&skb_pool->lock, flags); + while (skb_pool->qlen < MAX_SKBS) { + skb =3D 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 =3D + container_of(work, struct netpoll, refill_wq); + + refill_skbs(np); +} + #ifdef CONFIG_NETCONSOLE_DYNAMIC =20 static struct configfs_subsystem netconsole_subsys; @@ -341,6 +381,20 @@ static int netpoll_parse_ip_addr(const char *str, unio= n inet_addr *addr) return -1; } =20 +static int setup_netpoll(struct netpoll *np) +{ + int err; + + err =3D 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 =20 /* @@ -615,7 +669,7 @@ static ssize_t enabled_store(struct config_item *item, */ netconsole_print_banner(&nt->np); =20 - ret =3D netpoll_setup(&nt->np); + ret =3D setup_netpoll(&nt->np); if (ret) goto out_unlock; =20 @@ -2036,7 +2090,7 @@ static struct netconsole_target *alloc_param_target(c= har *target_config, if (err) goto fail; =20 - err =3D netpoll_setup(&nt->np); + err =3D setup_netpoll(&nt->np); if (err) { pr_err("Not enabling netconsole for %s%d. Netpoll setup failed\n", NETCONSOLE_PARAM_TARGET_PREFIX, cmdline_count); diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 04a55ec392fd2..94c75f39787bb 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -35,21 +35,8 @@ #include #include =20 -/* - * We maintain a small pool of fully-sized skbs, to make sure the - * message gets out even in extreme OOM situations. - */ - -#define MAX_UDP_CHUNK 1460 -#define MAX_SKBS 32 #define USEC_PER_POLL 50 =20 -#define MAX_SKB_SIZE \ - (sizeof(struct ethhdr) + \ - sizeof(struct iphdr) + \ - sizeof(struct udphdr) + \ - MAX_UDP_CHUNK) - static unsigned int carrier_timeout =3D 4; module_param(carrier_timeout, uint, 0644); =20 @@ -219,25 +206,6 @@ void netpoll_poll_enable(struct net_device *dev) up(&ni->dev_lock); } =20 -static void refill_skbs(struct netpoll *np) -{ - struct sk_buff_head *skb_pool; - struct sk_buff *skb; - unsigned long flags; - - skb_pool =3D &np->skb_pool; - - spin_lock_irqsave(&skb_pool->lock, flags); - while (skb_pool->qlen < MAX_SKBS) { - skb =3D alloc_skb(MAX_SKB_SIZE, GFP_ATOMIC); - if (!skb) - break; - - __skb_queue_tail(skb_pool, skb); - } - spin_unlock_irqrestore(&skb_pool->lock, flags); -} - void zap_completion_queue(void) { unsigned long flags; @@ -395,14 +363,6 @@ static void skb_pool_flush(struct netpoll *np) skb_queue_purge_reason(skb_pool, SKB_CONSUMED); } =20 -static void refill_skbs_work_handler(struct work_struct *work) -{ - struct netpoll *np =3D - container_of(work, struct netpoll, refill_wq); - - refill_skbs(np); -} - int __netpoll_setup(struct netpoll *np, struct net_device *ndev) { struct netpoll_info *npinfo; @@ -446,10 +406,6 @@ int __netpoll_setup(struct netpoll *np, struct net_dev= ice *ndev) strscpy(np->dev_name, ndev->name, IFNAMSIZ); npinfo->netpoll =3D np; =20 - /* fill up the skb queue */ - refill_skbs(np); - INIT_WORK(&np->refill_wq, refill_skbs_work_handler); - /* last thing to do is link it to the net device structure */ rcu_assign_pointer(ndev->npinfo, npinfo); =20 --=20 2.47.3 From nobody Fri Oct 3 10:11:18 2025 Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D11F334389; Tue, 2 Sep 2025 14:36:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823816; cv=none; b=dnwetPoPqnwyO7QlNwS/XGm+xGl7fuv6PHN1AjgVUQA3YR9T47SrvbzNOXRpqKxQEBBZdOU59AzZvbhKOu2a+wxDpcc0OIqSEJ95axtkZYpnRtq9VH/KWo7YSa75HialA7PwbFzGMKcBeVVRu9G/f0P3PLRG5PqBrUWjO3AyzV0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823816; c=relaxed/simple; bh=hEoM6CFJdWE31w8xFW6aTHY60k+r+bWwOR/kv/6lIlw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=J/4nFhjlEKfCT/XyS9z03zGCfl8QtkkuNSKvG35CIHovZRvzOCSQ0JLn+LPyO5lkclWZ5TX/Bo2ybDB+ncOmUrQCdMbbZMr1ge82eeJ5/1+2nap/8lQuptfHzO2s7EBWs4QGPxbxTu3PBeeuonL+z26IRfAKTsrDqKnFiGx2ymI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-b04271cfc3eso283731366b.3; Tue, 02 Sep 2025 07:36:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756823812; x=1757428612; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PRNRDuYiIKp0gOeHmM6Ebihd3noRhR1pzhy50CtibRc=; b=YB5zbCo5FMmzELhtgVT8d80a93IyW8iUgL3ipxNJrM4fChLZy3/e05bI6t/OFi77Hr sGgaxYD0Yey165E/TjDv4CYJbYfgQTs5VqDZen/VzCC4QhfAAGuWD5pgX+gZLiWCTJ2S jHrbE9oBz4z/BdZkX8HzjfGb+sP5s+C5cAzPkoHCPVX1cQ1WKYm1CimHoKDdw5la9Oio o3oiZYZazMdXg1bp4Qlxw6UhgNSzWi4hEZkWlqUmWJh0vt2ncKjkOq9E2Yno/tK+tGEM q6DZBf5BEPQR6WEdVpAzFcYqLZkhllWiBYVjUg//q51mp4+sBAS6pwzVU+LeBEJzz/4l l97Q== X-Forwarded-Encrypted: i=1; AJvYcCUe8BilBCtcUSViw4WTTqNaTcv7DzvHCtOPugv/0RX1st1Jv8qwToSwYxHNK3/6pkYYJLo4dRjlxzILytU=@vger.kernel.org X-Gm-Message-State: AOJu0YzXeodP/uRHuhCLp+1Fft0Oo5OpOxRNfIhdvlhenjk90EDKLNEU zpSwo5fVnyA82TP8u1N/dJy/6tt+FCQ3zVMHd7i4X5AIrm3HuvDTfxxrDp1FBw== X-Gm-Gg: ASbGncsVXCjYBWxBEQc9qdWHKUJiXotOyQy7AmK5JEtPYe4hI5+hpTi9f42SKhd6Q3F TmRfzt2k9+yC85dx2nrddR4Dl7/ilSrSjyvPjn+T3+JwyAChLlSl62lBvcSIZBY7eg41be7bkXl jgcqc8DrnlxPxDWc3Wd5QK96etOOQPfSeMujsbMQ9TgkD5FJ1ihkTTnOOhVmOkCkUkVhrOcuUU1 o3nK23KqaQUhHbOWi63anO0gr1TjwP6GhVTKeqf2ILwxs96UVRmFNCkYXU1HnW/4zgtUrwlTGQn 9ugq27BDpkJj5Jv5MHZbO/4lAsqU7NKhvxtbbHop6etpCUTKn4aS8ASe6hfNACg/77p8m2wEsFG 5qEQL+GstplUN X-Google-Smtp-Source: AGHT+IG/WSpRufGwBIFMbBbi+61qwCv7PSPv3muO5uBC52/ZhXkQb7Fx32UBp+CjF7KUcWoQPUAUkw== X-Received: by 2002:a17:907:72ce:b0:b04:61aa:6adc with SMTP id a640c23a62f3a-b0461aa6b6fmr6842766b.7.1756823812082; Tue, 02 Sep 2025 07:36:52 -0700 (PDT) Received: from localhost ([2a03:2880:30ff:2::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b042b0046ecsm523369366b.71.2025.09.02.07.36.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Sep 2025 07:36:51 -0700 (PDT) From: Breno Leitao Date: Tue, 02 Sep 2025 07:36:28 -0700 Subject: [PATCH 6/7] netpoll: Move find_skb() to netconsole and make it static Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250902-netpoll_untangle_v3-v1-6-51a03d6411be@debian.org> References: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> In-Reply-To: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt 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 X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=3890; i=leitao@debian.org; h=from:subject:message-id; bh=hEoM6CFJdWE31w8xFW6aTHY60k+r+bWwOR/kv/6lIlw=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBotwD5xjohKd6EfSj8DIEFNfTJu4cHqZEarDmav ttZ7edvlSSJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLcA+QAKCRA1o5Of/Hh3 bXUVEAChtWWNrf/dSg9KAE95hR4+7Hqmjea00XpB7Kh+1klR1Igo/rVxU76NaLGb5LpGYXUOAnw 9bhWEyULgeChkHaOoUAZ7b5+6zajPlyD4q3AhIR+4SRVZCIQRZiE2Hj1Swa9JXFxVFQcsJc0aTf NnJcgFAhD6l8elm2vnGN2cOn3RHavdnW11pVwAx4mmJgVHgY3mBuAZTWniHRoKO9vLyTlJwSiv8 ODa7UwXT11sdxjPhZkbeNAXXVWghNp3mqvNUI08kqemEWPLck+elTmea7Y7ZRyt9oBqKApNNUHq ZRX4d3N7fxsB0iK+R1YWmri1hg532j/4yZTboJAh6cEvn92jXsyoPkB27+cThknfPwtXktSrWhA ttpSLiBQ+qgML5egeZorXWZ4qec1MwW50XvD6xiWC7+Vu06Mo+52YO90MzM6wSvv/BnX7W6y+Pl Tbn4h9CToSI0SlHE8PU3UNeu2N8JO9pDFHHWBgSXZDx4j9rRDe9S4OubXgVjWepOrwenxcokDxj DHcMgJ9i3VXs/AT4nlQZN67O+wdSjUSYyCMg4GGEgZ3b3lRd7JOTlsx/8VVZxD7NJG3zaDsXc8D IFHbC54zCkKjnyZsq4PkQdzjyE1A6SyA+Z5LOewNXwrg/KGueUy4dq4OOGWdtDtqJJcNuuw1vdq 5vI0O6NBUG/W5MQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D Complete the SKB pool management refactoring by moving find_skb() from netpoll core to netconsole driver, making it a static function. This is the final step in removing SKB pool management from the generic netpoll infrastructure. With this change: 1. Netpoll core is now purely transmission-focused: Contains only the essential netpoll_send_skb() function for low-level packet transmission, with no knowledge of SKB allocation or pool management. 2. Complete encapsulation in netconsole: All SKB lifecycle management (allocation, pool handling, packet construction) is now contained within the netconsole driver where it belongs. 3. Cleaner API surface: Removes the last SKB management export from netpoll, leaving only zap_completion_queue() as a utility function and netpoll_send_skb() for transmission. 4. Better maintainability: Changes to SKB allocation strategies or pool management can now be made entirely within netconsole without affecting the core netpoll infrastructure. The find_skb() function is made static since it's now only used within netconsole.c for its internal SKB allocation needs. This completes the architectural cleanup that separates generic netpoll transmission capabilities from console-specific resource management. Signed-off-by: Breno Leitao Reviewed-by: Willem de Bruijn --- drivers/net/netconsole.c | 27 +++++++++++++++++++++++++++ include/linux/netpoll.h | 1 - net/core/netpoll.c | 28 ---------------------------- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 3fe55db07cfe5..bf7bab7a9c2f0 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1655,6 +1655,33 @@ static void push_eth(struct netpoll *np, struct sk_b= uff *skb) eth->h_proto =3D htons(ETH_P_IP); } =20 +static struct sk_buff *find_skb(struct netpoll *np, int len, int reserve) +{ + int count =3D 0; + struct sk_buff *skb; + + zap_completion_queue(); +repeat: + + skb =3D alloc_skb(len, GFP_ATOMIC); + if (!skb) { + skb =3D skb_dequeue(&np->skb_pool); + schedule_work(&np->refill_wq); + } + + if (!skb) { + if (++count < 10) { + netpoll_poll_dev(np->dev); + goto repeat; + } + return NULL; + } + + refcount_set(&skb->users, 1); + skb_reserve(skb, reserve); + return skb; +} + static struct sk_buff *netpoll_prepare_skb(struct netpoll *np, const char = *msg, int len) { diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index 7f8b4d758a1e7..f89bc9fb1f773 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -74,7 +74,6 @@ int netpoll_setup(struct netpoll *np); void __netpoll_free(struct netpoll *np); void do_netpoll_cleanup(struct netpoll *np); netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb); -struct sk_buff *find_skb(struct netpoll *np, int len, int reserve); void zap_completion_queue(void); =20 #ifdef CONFIG_NETPOLL diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 94c75f39787bb..5aa83c9c09e05 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -235,34 +235,6 @@ void zap_completion_queue(void) } EXPORT_SYMBOL_GPL(zap_completion_queue); =20 -struct sk_buff *find_skb(struct netpoll *np, int len, int reserve) -{ - int count =3D 0; - struct sk_buff *skb; - - zap_completion_queue(); -repeat: - - skb =3D alloc_skb(len, GFP_ATOMIC); - if (!skb) { - skb =3D skb_dequeue(&np->skb_pool); - schedule_work(&np->refill_wq); - } - - if (!skb) { - if (++count < 10) { - netpoll_poll_dev(np->dev); - goto repeat; - } - return NULL; - } - - refcount_set(&skb->users, 1); - skb_reserve(skb, reserve); - return skb; -} -EXPORT_SYMBOL_GPL(find_skb); - static int netpoll_owner_active(struct net_device *dev) { struct napi_struct *napi; --=20 2.47.3 From nobody Fri Oct 3 10:11:18 2025 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E046C3376AE; Tue, 2 Sep 2025 14:36:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823818; cv=none; b=p3Vclmn8vBosBmCzsGhi75nkHrJVY8siz1uIk2fSBH7gN5XiJPJZTY/FqYEf8nI6kwjVFIAlUvF7ozA8xK+ZNibHrhHBqqPKqu49sb5oN4fmrMGGqdTOB6e784lD3TutJSSqocLIpJtsT1JTjEHbneQUseR/Dlw09oZ+QfPaUHo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1756823818; c=relaxed/simple; bh=QOwKb2hEwQaGFHvUWM1aHkkgzXtur1DMIlEfQlknmM4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Hgembdo3ev0j9zSr37teMutI5w/oHWQQ1UkqgwVb6aei1068sS4O4EcPkg4zJEXVHq7BtGlkvjQaqe+IxiiQwIeDdBncfvKf88nBY4W4iUbltWvmtmV4TgRF1m6PN7AP/AgakIxrMCKCC11M3decoQxCVRI8BThFq+uyg1xLd2k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b02c719a117so338625666b.1; Tue, 02 Sep 2025 07:36:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756823814; x=1757428614; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sGgQwclxV+InBl48sbLkPeBpWw53bOiCuvt5WtGZiTs=; b=P8OVWSxee+HHjK5Rj/QB8Qgh83GS2KHFhuwLaI1lrCI/5I1766WAno/34XrtoP1KDK bG0CBTOuzx5Z8ld+KzY6I5q8fUNS9HdC5B1SoTIhcjeEV8XOj60ptCzJFrR4K+bCrOw2 Ujo/9bdvZeLOwZNXRZWwrEVVwGCDxogAlTMyXBZbXlfS+JjGUh5SZqqjCz9WyZy3fGLa HnskuyCKuxAPyfkc44RlqWftR6n4b3hVn4bDlPSFQcQtAjugk5xFCVX3zpwFvANqlgEW hPWMinuNrrsZARs4WjCocpEjT2l7P3TMaLHo0xHclobJmLG2noXIl6Aku8y9dmNpd803 MbEQ== X-Forwarded-Encrypted: i=1; AJvYcCWDUmQ3HDbVxwbsHQJJscI4yJ0h70Ph8O/Ba6NxFztzBdjRuEDD/7yzi8T8bIchQ0nQ+MhgATjAEk/62+0=@vger.kernel.org X-Gm-Message-State: AOJu0YwEy5+B3/o4vVaR9rhXPeg06x+BBE6Klo288AsNtxbDVt42IDPi Vbr+BTNBi2uqZfVrBiyOxoz8GlftboqU8SUQJm477fkhaWAh96EvReIv X-Gm-Gg: ASbGncucwaAy9YwkPhLZqmSg1rrfQ+dE2zKnv6cWI2pBROkPUBYZ4xgUmPHor0lNTFv 4cAcid1jkTu3/r9PxTsowyOQHbm0nXbV7/trrd9Ru21bNGP2VfToECKWHYBdY6+tgjDVnXPyGQh MWUlwidswTtQR6kH+SfE/Xwvy++RMHHTeerBPIdyKdbb9SAZsI0dquANShyg0LZMQhi05zspMpU wq9qQK8kfjD8QZpA5UqcgRO0Y+0epSTY0qaAN6hpo9mq1XdYa0rADyqnuuGAst6se0W0OmsTyBw LA8/O+xKIJjAG+1qMXn2Tfh7UafJc8GK2CI0eFMSLXtAqgxOJpMgum6YJqYXCOJE5MF+cTvdBhP okVpuNcwsF2O85GIoLztosg== X-Google-Smtp-Source: AGHT+IEpSTMgUVxh+9BmW5H958NG8p75QgWGA7ru5f+izVOhd1AyXRzufdrpFBjNB8HWq480f8/7fg== X-Received: by 2002:a17:906:f588:b0:b04:3268:a6c8 with SMTP id a640c23a62f3a-b043268b4a0mr704297466b.43.1756823813778; Tue, 02 Sep 2025 07:36:53 -0700 (PDT) Received: from localhost ([2a03:2880:30ff:1::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b04129eccbfsm727728366b.7.2025.09.02.07.36.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 02 Sep 2025 07:36:53 -0700 (PDT) From: Breno Leitao Date: Tue, 02 Sep 2025 07:36:29 -0700 Subject: [PATCH 7/7] netpoll: Flush skb_pool as part of netconsole cleanup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250902-netpoll_untangle_v3-v1-7-51a03d6411be@debian.org> References: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> In-Reply-To: <20250902-netpoll_untangle_v3-v1-0-51a03d6411be@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Sebastian Andrzej Siewior , Clark Williams , Steven Rostedt 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 X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=2533; i=leitao@debian.org; h=from:subject:message-id; bh=QOwKb2hEwQaGFHvUWM1aHkkgzXtur1DMIlEfQlknmM4=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBotwD5LX2SXM4Un8klcyCjqO4sv2Lht3xKRNhV5 vbufV5MTXSJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLcA+QAKCRA1o5Of/Hh3 bTyGD/9YXblp9JM07zJx/HWzzAhbrtLXUMe4oIu02xOZ18sFDnDIANmRrJWl2rg72H6wIoRxt8Z aUg81x1PhyCTRZ709Mkqe5d5S+ewu1Bi/qie4INs6FSvFuIexD1pNG2FasJ1xmn7kEOUnwVO0kZ VTGrX+HbqwmqRAfDQRDOsX9ecyP5kVVfXQ2Xe7jcA6dddCgaSTIzND3VlTQbpegC/YsFJI4wAhT WAyn3w9Y+e/4CygORus/Q+QZMVrqI+QnQOK+8cWYDkhSisjwynUF/k9Wa7P10kz32uw09dCva6e m0WXbFDId/wE3hTMNcuemwGtJdtTQmrnRdxa9rSnJOC8qqd/gN8HiifT+Gtsx8e675V5bd/yl7W 2L7jGynwnfzQLQ2HIQi2DnauKpUfkW/YuAusTa01zhO/EtpdLgFEomxgTg/mLWihKNJZ97EQTBG FfXovDkqTM6FnUQumAR1Nj/A/8DM1wheKEQLRTGuJF6y0pKB93lZfL8gZ12MxSELb+tMJxSXDNN eWYs1Ab9DlDaOu9uedefYkyk/43CbAThJHlXfFNljNppV5dY38cnsDNYrV9dYz5CaxluTx/HnWR rHWE2mxf2heynoVGnIQb/clg49busTnUx2K2h2GMlj7MJTpsGYNGMLdd88PZhnilv76VIulRjiy jw3Ggs8CR5rb40w== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D Transfer the skb_pool_flush() function from netpoll to netconsole, and call it within netpoll_cleanup() to ensure skb pool resources are properly released once the device is down. The invocation of skb_pool_flush() was removed from netpoll_setup(), as the pool is now only managed after successful allocation. This complete the move of skb pool management from netpoll to netconsole. Signed-off-by: Breno Leitao Reviewed-by: Willem de Bruijn --- drivers/net/netconsole.c | 10 ++++++++++ net/core/netpoll.c | 15 +-------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index bf7bab7a9c2f0..b9bfb78560b3c 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -300,12 +300,22 @@ static struct netconsole_target *alloc_and_init(void) return nt; } =20 +static void skb_pool_flush(struct netpoll *np) +{ + struct sk_buff_head *skb_pool; + + cancel_work_sync(&np->refill_wq); + skb_pool =3D &np->skb_pool; + skb_queue_purge_reason(skb_pool, SKB_CONSUMED); +} + static void netpoll_cleanup(struct netpoll *np) { rtnl_lock(); if (!np->dev) goto out; do_netpoll_cleanup(np); + skb_pool_flush(np); out: rtnl_unlock(); } diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 5aa83c9c09e05..c0eeeb9ac3daf 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -326,15 +326,6 @@ netdev_tx_t netpoll_send_skb(struct netpoll *np, struc= t sk_buff *skb) } EXPORT_SYMBOL(netpoll_send_skb); =20 -static void skb_pool_flush(struct netpoll *np) -{ - struct sk_buff_head *skb_pool; - - cancel_work_sync(&np->refill_wq); - skb_pool =3D &np->skb_pool; - skb_queue_purge_reason(skb_pool, SKB_CONSUMED); -} - int __netpoll_setup(struct netpoll *np, struct net_device *ndev) { struct netpoll_info *npinfo; @@ -547,7 +538,7 @@ int netpoll_setup(struct netpoll *np) =20 err =3D __netpoll_setup(np, ndev); if (err) - goto flush; + goto put; rtnl_unlock(); =20 /* Make sure all NAPI polls which started before dev->npinfo @@ -558,8 +549,6 @@ int netpoll_setup(struct netpoll *np) =20 return 0; =20 -flush: - skb_pool_flush(np); put: DEBUG_NET_WARN_ON_ONCE(np->dev); if (ip_overwritten) @@ -607,8 +596,6 @@ static void __netpoll_cleanup(struct netpoll *np) call_rcu(&npinfo->rcu, rcu_cleanup_netpoll_info); } else RCU_INIT_POINTER(np->dev->npinfo, NULL); - - skb_pool_flush(np); } =20 void __netpoll_free(struct netpoll *np) --=20 2.47.3