Message ID | 20240704143611.2979589-11-arnd@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | arch: convert everything to syscall.tbl | expand |
On Thu, Jul 04, 2024 at 04:36:04PM +0200, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > Change the asm/unistd.h header for arm64 to no longer include > asm-generic/unistd.h itself, but instead generate both the asm/unistd.h > contents and the list of entry points using the syscall.tbl scripts that > we use on most other architectures. > > Once his is done for the remaining architectures, the generic unistd.h > header can be removed and the generated tbl file put in its place. > > The Makefile changes are more complex than they should be, I need > a little help to improve those. Ideally this should be done in an > architecture-independent way as well. > > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Catalin Marinas <catalin.marinas@arm.com>
On Thu, Jul 04, 2024 at 04:36:04PM +0200, Arnd Bergmann wrote: > #define __ARCH_WANT_SYS_CLONE > +#define __ARCH_WANT_NEW_STAT > > -#ifndef __COMPAT_SYSCALL_NR > -#include <uapi/asm/unistd.h> > -#endif > +#include <asm/unistd_64.h> It looks like this is causing widespread build breakage in kselftest in -next for arm64, there are *many* errors in the form: In file included from test_signals_utils.c:14: /build/stage/build-work/usr/include/asm/unistd.h:2:10: fatal error: unistd_64.h: No such file or directory 2 | #include <unistd_64.h> | ^~~~~~~~~~~~~ which obviously looks like it's tied to the above but I've not fully understood the patch/series yet. Build log at: https://builds.sirena.org.uk/82d01fe6ee52086035b201cfa1410a3b04384257/arm64/defconfig/build.log A bisect appears to confirm that it's this commit, which is in -next as 6e4a077c0b607c674536908c5b68f1c31e4e26ec. git bisect start # status: waiting for both good and bad commits # bad: [82d01fe6ee52086035b201cfa1410a3b04384257] Add linux-next specific files for 20240709 git bisect bad 82d01fe6ee52086035b201cfa1410a3b04384257 # status: waiting for good commit(s), bad commit known # good: [037206cd4cb43d535453723140fde1bcde0b296e] Merge branch 'for-linux-next-fixes' of https://gitlab.freedesktop.org/drm/misc/kernel.git git bisect good 037206cd4cb43d535453723140fde1bcde0b296e # bad: [2ae3e655fc40f1b6620194b90dcf9a4515257918] Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git git bisect bad 2ae3e655fc40f1b6620194b90dcf9a4515257918 # bad: [4f2a367612d46dff2068582feadfbdd8e1c0443f] Merge branch 'fs-next' of linux-next git bisect bad 4f2a367612d46dff2068582feadfbdd8e1c0443f # bad: [d3da7ed72840f3660f90966490adfd499d96ea8f] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git git bisect bad d3da7ed72840f3660f90966490adfd499d96ea8f # good: [6355edbb3dfe322f0748b1eb3987973a568bbb42] Merge tag 'v6.11-rockchip-dts64-2' of https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into soc/dt git bisect good 6355edbb3dfe322f0748b1eb3987973a568bbb42 # good: [2073cda629a47f2ebe2afcd3cb8b3000d5cd13d1] mm: optimization on page allocation when CMA enabled git bisect good 2073cda629a47f2ebe2afcd3cb8b3000d5cd13d1 # good: [91a2b5b12867f77dc68d2d15ec7381e6e43820cb] Merge branch 'perf-tools-next' of git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git git bisect good 91a2b5b12867f77dc68d2d15ec7381e6e43820cb # bad: [b8c38a39b6ee44b02ee563b60439f417fec441ad] Merge branch 'for-next/perf' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git git bisect bad b8c38a39b6ee44b02ee563b60439f417fec441ad # good: [c100216635e922f43d9e783da918a749995350ca] Merge branch 'for-next/vcpu-hotplug' into for-next/core git bisect good c100216635e922f43d9e783da918a749995350ca # bad: [fafb823fc82dfb746cc9043b1573c4b29ef1d52a] Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/rmk/linux.git git bisect bad fafb823fc82dfb746cc9043b1573c4b29ef1d52a # bad: [8d46f9dd06378e346a562c75bc2a260a03abe807] csky: convert to generic syscall table git bisect bad 8d46f9dd06378e346a562c75bc2a260a03abe807 # good: [57029ba74296a4dafe35f147e88d56d8ae7b69da] kbuild: add syscall table generation to scripts/Makefile.asm-headers git bisect good 57029ba74296a4dafe35f147e88d56d8ae7b69da # good: [ea0130bf3c45f276b1f9e005eeb255a80a10358b] arm64: convert unistd_32.h to syscall.tbl format git bisect good ea0130bf3c45f276b1f9e005eeb255a80a10358b # bad: [b2595bdb3eb3fe24137d0bd07a51bc622f068a81] arm64: rework compat syscall macros git bisect bad b2595bdb3eb3fe24137d0bd07a51bc622f068a81 # bad: [6e4a077c0b607c674536908c5b68f1c31e4e26ec] arm64: generate 64-bit syscall.tbl git bisect bad 6e4a077c0b607c674536908c5b68f1c31e4e26ec # first bad commit: [6e4a077c0b607c674536908c5b68f1c31e4e26ec] arm64: generate 64-bit syscall.tbl
On Tue, Jul 9, 2024, at 19:23, Mark Brown wrote: > On Thu, Jul 04, 2024 at 04:36:04PM +0200, Arnd Bergmann wrote: > >> #define __ARCH_WANT_SYS_CLONE >> +#define __ARCH_WANT_NEW_STAT >> >> -#ifndef __COMPAT_SYSCALL_NR >> -#include <uapi/asm/unistd.h> >> -#endif >> +#include <asm/unistd_64.h> > > It looks like this is causing widespread build breakage in kselftest in > -next for arm64, there are *many* errors in the form: > > In file included from test_signals_utils.c:14: > /build/stage/build-work/usr/include/asm/unistd.h:2:10: fatal error: > unistd_64.h: No such file or directory > 2 | #include <unistd_64.h> > | ^~~~~~~~~~~~~ > > which obviously looks like it's tied to the above but I've not fully > understood the patch/series yet. Build log at: > Thanks for the report! I just panicked a bit and thought I had done something entirely wrong here, but after having a closer look it turned out to be a silly typo: diff --git a/arch/arm64/include/uapi/asm/unistd.h b/arch/arm64/include/uapi/asm/unistd.h index 038dddf8f554..df36f23876e8 100644 --- a/arch/arm64/include/uapi/asm/unistd.h +++ b/arch/arm64/include/uapi/asm/unistd.h @@ -1,2 +1,2 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -#include <unistd_64.h> +#include <asm/unistd_64.h> I'm folding the fix into the tree now, in addition to the Acks I received and another small fixup. I checked that arm64 is the only architecture that has this particular bug, and I tried building kselftest now, which seems to work better. There are still a few warnings and errors I get doing that, but I suspect those are all preexisting issues. Arnd
On Wed, Jul 10, 2024 at 10:57:25AM +0200, Arnd Bergmann wrote: > Thanks for the report! I just panicked a bit and thought I had > done something entirely wrong here, but after having a closer > look it turned out to be a silly typo: > -#include <unistd_64.h> > +#include <asm/unistd_64.h> Doh, I should've spotted that even from the very quick look I gave it! Thanks for the quick fix. > I checked that arm64 is the only architecture that has this > particular bug, and I tried building kselftest now, which seems > to work better. There are still a few warnings and errors > I get doing that, but I suspect those are all preexisting > issues. Yeah, not everything there builds cleanly (and there's a bunch of external deps you need for many of the suites).
diff --git a/arch/arm64/include/asm/Kbuild b/arch/arm64/include/asm/Kbuild index 3fc45ef32e85..7d7d97ad3cd5 100644 --- a/arch/arm64/include/asm/Kbuild +++ b/arch/arm64/include/asm/Kbuild @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 syscall-y += syscall_table_32.h +syscall-y += syscall_table_64.h # arm32 syscall table used by lib/compat_audit.c: syscall-y += unistd_32.h diff --git a/arch/arm64/include/asm/seccomp.h b/arch/arm64/include/asm/seccomp.h index d56164d3cac5..c83ca2c8b936 100644 --- a/arch/arm64/include/asm/seccomp.h +++ b/arch/arm64/include/asm/seccomp.h @@ -23,6 +23,7 @@ #define SECCOMP_ARCH_NATIVE_NR NR_syscalls #define SECCOMP_ARCH_NATIVE_NAME "aarch64" #ifdef CONFIG_COMPAT +#include <asm/unistd_compat_32.h> # define SECCOMP_ARCH_COMPAT AUDIT_ARCH_ARM # define SECCOMP_ARCH_COMPAT_NR __NR_compat32_syscalls # define SECCOMP_ARCH_COMPAT_NAME "arm" diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h index 55ac26355be4..fdd16052f9bc 100644 --- a/arch/arm64/include/asm/unistd.h +++ b/arch/arm64/include/asm/unistd.h @@ -41,9 +41,8 @@ #endif #define __ARCH_WANT_SYS_CLONE +#define __ARCH_WANT_NEW_STAT -#ifndef __COMPAT_SYSCALL_NR -#include <uapi/asm/unistd.h> -#endif +#include <asm/unistd_64.h> #define NR_syscalls (__NR_syscalls) diff --git a/arch/arm64/include/uapi/asm/Kbuild b/arch/arm64/include/uapi/asm/Kbuild index 602d137932dc..c6d141d7b7d7 100644 --- a/arch/arm64/include/uapi/asm/Kbuild +++ b/arch/arm64/include/uapi/asm/Kbuild @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 +syscall-y += unistd_64.h generic-y += kvm_para.h diff --git a/arch/arm64/include/uapi/asm/unistd.h b/arch/arm64/include/uapi/asm/unistd.h index 9306726337fe..038dddf8f554 100644 --- a/arch/arm64/include/uapi/asm/unistd.h +++ b/arch/arm64/include/uapi/asm/unistd.h @@ -1,24 +1,2 @@ /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ -/* - * Copyright (C) 2012 ARM Ltd. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#define __ARCH_WANT_RENAMEAT -#define __ARCH_WANT_NEW_STAT -#define __ARCH_WANT_SET_GET_RLIMIT -#define __ARCH_WANT_TIME32_SYSCALLS -#define __ARCH_WANT_MEMFD_SECRET - -#include <asm-generic/unistd.h> +#include <unistd_64.h> diff --git a/arch/arm64/kernel/Makefile.syscalls b/arch/arm64/kernel/Makefile.syscalls index 1e14effb3921..3cfafd003b2d 100644 --- a/arch/arm64/kernel/Makefile.syscalls +++ b/arch/arm64/kernel/Makefile.syscalls @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 syscall_abis_32 += +syscall_abis_64 += renameat newstat rlimit memfd_secret syscalltbl = arch/arm64/tools/syscall_%.tbl diff --git a/arch/arm64/kernel/sys.c b/arch/arm64/kernel/sys.c index d5ffaaab31a7..f08408b6e826 100644 --- a/arch/arm64/kernel/sys.c +++ b/arch/arm64/kernel/sys.c @@ -48,14 +48,16 @@ asmlinkage long __arm64_sys_ni_syscall(const struct pt_regs *__unused) */ #define __arm64_sys_personality __arm64_sys_arm64_personality +#define __SYSCALL_WITH_COMPAT(nr, native, compat) __SYSCALL(nr, native) + #undef __SYSCALL #define __SYSCALL(nr, sym) asmlinkage long __arm64_##sym(const struct pt_regs *); -#include <asm/unistd.h> +#include <asm/syscall_table_64.h> #undef __SYSCALL #define __SYSCALL(nr, sym) [nr] = __arm64_##sym, const syscall_fn_t sys_call_table[__NR_syscalls] = { [0 ... __NR_syscalls - 1] = __arm64_sys_ni_syscall, -#include <asm/unistd.h> +#include <asm/syscall_table_64.h> }; diff --git a/arch/arm64/tools/Makefile b/arch/arm64/tools/Makefile index fa2251d9762d..c2b34e761006 100644 --- a/arch/arm64/tools/Makefile +++ b/arch/arm64/tools/Makefile @@ -3,12 +3,16 @@ gen := arch/$(ARCH)/include/generated kapi := $(gen)/asm -kapi-hdrs-y := $(kapi)/cpucap-defs.h $(kapi)/sysreg-defs.h +kapisyshdr-y := cpucap-defs.h sysreg-defs.h + +kapi-hdrs-y := $(addprefix $(kapi)/, $(kapisyshdr-y)) targets += $(addprefix ../../../, $(kapi-hdrs-y)) PHONY += kapi +all: $(syscall64) kapi + kapi: $(kapi-hdrs-y) quiet_cmd_gen_cpucaps = GEN $@ diff --git a/arch/arm64/tools/syscall_64.tbl b/arch/arm64/tools/syscall_64.tbl new file mode 120000 index 000000000000..63135cf34b65 --- /dev/null +++ b/arch/arm64/tools/syscall_64.tbl @@ -0,0 +1 @@ +../../../scripts/syscall.tbl \ No newline at end of file