From: Jakub Kicinski Date: Sun, 29 Mar 2026 18:21:29 +0000 (-0700) Subject: Merge branch 'convert-config_ipv6-to-built-in-and-remove-stubs' X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e531a081065d274a14f54441a38e1849453d06ec;p=thirdparty%2Fkernel%2Flinux.git Merge branch 'convert-config_ipv6-to-built-in-and-remove-stubs' Fernando Fernandez Mancera says: ==================== Convert CONFIG_IPV6 to built-in and remove stubs Historically, the Linux kernel has supported compiling the IPv6 stack as a loadable module. While this made sense in the early days of IPv6 adoption, modern deployments and distributions overwhelmingly either build IPv6 directly into the kernel (CONFIG_IPV6=y) or disable it entirely (CONFIG_IPV6=n). The modular IPv6 use-case offers image size and memory savings for specific setups, this benefit is outweighed by the architectural burden it imposes on the subsystems on implementation and maintenance. In addition, most of the distributions are already using CONFIG_IPV6=y by default [1], including openWRT [2] and Android gki_defconfig [3]. So this won't have an impact on them. The most impacted architecture would probably be arm64 as their default config is still using CONFIG_IPV6=m. To allow core networking, BPF, Netfilter, and various device drivers to safely interact with a potentially unloaded IPv6 module, the kernel relies on indirect call structures like ipv6_stub, ipv6_bpf_stub, and nf_ipv6_ops, along with dynamic RCU registrations for things like ICMPv6 senders. This patch series addresses this by changing CONFIG_IPV6 from a tristate to a boolean, enforcing that IPv6 is either built-in or disabled. This allows us to completely rip out the stub infrastructures and safely replace them with direct function calls. The bloat-o-meter report the following results for m68k, arm64, x86_64 defconfig. m68k (keep on mind that CONFIG_IPV6 is disabled now): add/remove: 65/938 grow/shrink: 36/254 up/down: 3022/-49692 (-46670) arm64: add/remove: 1251/265 grow/shrink: 81/46 up/down: 448740/-71519 (377221) x86_64: add/remove: 62/98 grow/shrink: 10/39 up/down: 2497/-4357 (-1860) Considering that each new kernel release increases sizes by 30-40KiB on average, this size increase isn't a huge jump for the distributions that are still using CONFIG_IPV6=m. For the ones that are already using CONFIG_IPV6=y, the size is reduced actually. All the patches has been independently build tested. With allmodconfig and allmodconfig + CONFIG_IPV6=n. In addition, net selftest has been run against them on virtme-ng. The series applied as a whole as been tested with allyesconfig and also allyesconfig + CONFIG_IPV6=n but not all patches has been independently tested this way. [1] https://github.com/nyrahul/linux-kernel-configs [2] https://github.com/openwrt/openwrt/commit/832e7b817221d288df76b763ca12c585365db5d8 [3] https://android.googlesource.com/kernel/common/+/refs/heads/android-mainline/arch/arm64/configs/gki_defconfig ==================== Link: https://patch.msgid.link/20260325120928.15848-1-fmancera@suse.de Signed-off-by: Jakub Kicinski --- e531a081065d274a14f54441a38e1849453d06ec