* [PATCH v1 0/2] kbuild: Give jobserver-exec recipes the jobserver
@ 2026-10-09 6:27 Kees Cook
2026-10-09 6:27 ` [PATCH v1 2/2] kbuild: Mark the initcall ordering recipe as recursive Kees Cook
0 siblings, 1 reply; 3+ messages in thread
From: Kees Cook @ 2026-10-09 6:27 UTC (permalink / raw)
To: Nathan Chancellor
Cc: Kees Cook, Nicolas Schier, Lorenzo Stoakes, Manuel Ebner,
Paul E . McKenney, Sami Tolvanen, linux-kbuild, llvm,
linux-kernel, linux-hardening
Hi!
Paul reported a build failure on CentOS Stream 9 with linux-next[1]: the
kernel builds, but scripts/jobserver-exec prints
WARNING: Unable to reopen jobserver read-side pipe: FileNotFoundError(2, 'No such file or directory')
and rcutorture's build check counts the "Error" in that line. CentOS's
make 4.3 carries a backport of the fix for GNU Make bug 58232, so
sub-makes, like the top-level make, give the jobserver pipe only to
recipes marked recursive, while MAKEFLAGS still names it. The new pigz
step (1/2) and the older Clang LTO initcall ordering step (2/2) run
jobserver-exec from recipes without "+", so pigz gets one thread and the
initcall script caps its children at the CPU count instead of the free
job slots. Mark both recipes recursive, as was done for rustc.
Thanks!
-Kees
[1] https://lore.kernel.org/all/0ddb5e5e-f801-444c-aa98-0cfe814a3026@paulmck-laptop/
Kees Cook (2):
kbuild: Mark the kernel image gzip recipes as recursive
kbuild: Mark the initcall ordering recipe as recursive
arch/alpha/boot/Makefile | 4 ++--
arch/arc/boot/Makefile | 2 +-
arch/arm64/boot/Makefile | 2 +-
arch/microblaze/boot/Makefile | 2 +-
arch/mips/boot/Makefile | 2 +-
arch/nios2/boot/Makefile | 2 +-
arch/parisc/boot/compressed/Makefile | 2 +-
arch/riscv/boot/Makefile | 2 +-
arch/s390/boot/Makefile | 2 +-
arch/sh/boot/Makefile | 2 +-
arch/sh/boot/compressed/Makefile | 2 +-
arch/sparc/boot/Makefile | 4 ++--
arch/x86/boot/compressed/Makefile | 2 +-
arch/xtensa/boot/Makefile | 2 +-
scripts/Makefile.vmlinux_o | 2 +-
15 files changed, 17 insertions(+), 17 deletions(-)
--
2.55.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v1 2/2] kbuild: Mark the initcall ordering recipe as recursive
2026-10-09 6:27 [PATCH v1 0/2] kbuild: Give jobserver-exec recipes the jobserver Kees Cook
@ 2026-10-09 6:27 ` Kees Cook
2026-10-09 15:20 ` Nicolas Schier
0 siblings, 1 reply; 3+ messages in thread
From: Kees Cook @ 2026-10-09 6:27 UTC (permalink / raw)
To: Nathan Chancellor
Cc: Kees Cook, Nicolas Schier, Sami Tolvanen, linux-kbuild, llvm,
linux-kernel, linux-hardening
generate_initcall_order.pl, which orders initcalls for Clang LTO, forks
a child per input file, up to the job count scripts/jobserver-exec
passes it in PARALLELISM. It used to run from link-vmlinux.sh, which
the top-level Makefile invokes as a recursive recipe, but
commit 5d45950dfbb15 ("kbuild: move vmlinux.o link to
scripts/Makefile.vmlinux_o") moved it into a recipe without "+".
GNU Make passes the jobserver pipe only to recipes it treats as
recursive, and the make 4.3 in CentOS Stream 9 also hides it in
sub-makes (a backport of the fix for GNU Make bug 58232), so
jobserver-exec cannot open it and prints:
WARNING: Unable to reopen jobserver read-side pipe: FileNotFoundError(2, 'No such file or directory')
PARALLELISM is then left unset, and the script caps its children at the
number of online CPUs instead of the free job slots.
Mark the recipe as recursive again.
Tested ARCH=x86_64 defconfig with CONFIG_LTO_CLANG_THIN=y, LLVM=1
(Clang 24.0.0git), and GNU Make 4.3 plus CentOS Stream 9's
make-4.3-cloexec.patch.
Fixes: 5d45950dfbb15 ("kbuild: move vmlinux.o link to scripts/Makefile.vmlinux_o")
Assisted-by: LLM
Signed-off-by: Kees Cook <kees@kernel.org>
---
scripts/Makefile.vmlinux_o | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/Makefile.vmlinux_o b/scripts/Makefile.vmlinux_o
index 24a3a4fd271c..0b37bd5dc3a4 100644
--- a/scripts/Makefile.vmlinux_o
+++ b/scripts/Makefile.vmlinux_o
@@ -19,7 +19,7 @@ quiet_cmd_gen_initcalls_lds = GEN $@
.tmp_initcalls.lds: $(srctree)/scripts/generate_initcall_order.pl \
vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
- $(call if_changed,gen_initcalls_lds)
+ +$(call if_changed,gen_initcalls_lds)
targets := .tmp_initcalls.lds
--
2.55.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v1 2/2] kbuild: Mark the initcall ordering recipe as recursive
2026-10-09 6:27 ` [PATCH v1 2/2] kbuild: Mark the initcall ordering recipe as recursive Kees Cook
@ 2026-10-09 15:20 ` Nicolas Schier
0 siblings, 0 replies; 3+ messages in thread
From: Nicolas Schier @ 2026-10-09 15:20 UTC (permalink / raw)
To: Kees Cook
Cc: Nathan Chancellor, Nicolas Schier, Sami Tolvanen, linux-kbuild,
llvm, linux-kernel, linux-hardening
> generate_initcall_order.pl, which orders initcalls for Clang LTO, forks
> a child per input file, up to the job count scripts/jobserver-exec
> passes it in PARALLELISM. It used to run from link-vmlinux.sh, which
> the top-level Makefile invokes as a recursive recipe, but
> commit 5d45950dfbb15 ("kbuild: move vmlinux.o link to
> scripts/Makefile.vmlinux_o") moved it into a recipe without "+".
>
> GNU Make passes the jobserver pipe only to recipes it treats as
> recursive, and the make 4.3 in CentOS Stream 9 also hides it in
> sub-makes (a backport of the fix for GNU Make bug 58232), so
> jobserver-exec cannot open it and prints:
>
> WARNING: Unable to reopen jobserver read-side pipe: FileNotFoundError(2, 'No such file or directory')
>
> PARALLELISM is then left unset, and the script caps its children at the
> number of online CPUs instead of the free job slots.
>
> Mark the recipe as recursive again.
>
> Tested ARCH=x86_64 defconfig with CONFIG_LTO_CLANG_THIN=y, LLVM=1
> (Clang 24.0.0git), and GNU Make 4.3 plus CentOS Stream 9's
> make-4.3-cloexec.patch.
>
> Fixes: 5d45950dfbb15 ("kbuild: move vmlinux.o link to scripts/Makefile.vmlinux_o")
> Assisted-by: LLM
> Signed-off-by: Kees Cook <kees@kernel.org>
> ---
> scripts/Makefile.vmlinux_o | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/scripts/Makefile.vmlinux_o b/scripts/Makefile.vmlinux_o
> index 24a3a4fd271c..0b37bd5dc3a4 100644
> --- a/scripts/Makefile.vmlinux_o
> +++ b/scripts/Makefile.vmlinux_o
> @@ -19,7 +19,7 @@ quiet_cmd_gen_initcalls_lds = GEN $@
>
> .tmp_initcalls.lds: $(srctree)/scripts/generate_initcall_order.pl \
> vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
> - $(call if_changed,gen_initcalls_lds)
> + +$(call if_changed,gen_initcalls_lds)
b4 hinted me on [1], where a similar fix was rejected; but as we know
have more arguments to generate_initcall_order.pl
($(KBUILD_VMLINUX_LIBS)), the situation is slightly different.
Thanks!
Reviewed-by: Nicolas Schier <n.schier@fritz.com>
[1]: https://lore.kernel.org/all/CAK7LNARCM=rUm8mA8GRQ7ufeyfneGf4OEvHmESKt=zuxs2KrHw@mail.gmail.com/
--
Nicolas
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-09 15:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-09 6:27 [PATCH v1 0/2] kbuild: Give jobserver-exec recipes the jobserver Kees Cook
2026-10-09 6:27 ` [PATCH v1 2/2] kbuild: Mark the initcall ordering recipe as recursive Kees Cook
2026-10-09 15:20 ` Nicolas Schier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox