mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs
@ 2026-07-28  2:47 André Almeida
  2026-07-28  2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: André Almeida @ 2026-07-28  2:47 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
  Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida

While implementing a new syscall, we need to wire up it's number to the arch
table. Since syscall number 403, all architectures are on sync regarding the
number (except alpha), which make things a lot easier but more repetitive as
well. Have a look at commit b36d4b6aa88 ("arch: hookup listns() system call"),
with 15 lines of mostly:

  +470    common  listns                          sys_listns

There's already a "common" table shared with a bunch of archs at
`scripts/syscall.tbl`, but due to historical reasons some archs will never be
able to move to this table and share all the numbers.

The generic table starts from 403 (clock_gettime64), the first common syscall.
The scripts are adapted to x86 specifics, like not generating the compat entry
point for x86_64 and placing x86_x32 things in the proper order. x32 is likely
to be dropped from Linux soon but for the moment I left the support there. If
this sounds good, next revision I can add the docs bits too.

I've tested this with x86 and arm64, by comparing the syscalls_*.h and
unistd_*.h files generated before and after this patchset and they are
identical.

Thanks!
	André

Changes in v2:
- Managed to move to the real first common syscall: 403 (clock_gettime64)
- Added -no-compat option to be used with x86_64
- v1: https://patch.msgid.link/20260724-tonyk-syscall_table-v1-0-9c53188423da@igalia.com

---
André Almeida (4):
      syscalls: Create unified partial table for all archs
      syscalls: Add support for x86_x32 for the common syscall table
      x86: Use common syscall table
      scripts/syscall.tbl: Use the common table

 arch/arm64/tools/syscall_32.tbl        | 68 ----------------------------
 arch/x86/entry/syscalls/Makefile       | 16 ++++---
 arch/x86/entry/syscalls/syscall_32.tbl | 68 ----------------------------
 arch/x86/entry/syscalls/syscall_64.tbl | 48 --------------------
 scripts/Makefile.asm-headers           |  4 +-
 scripts/syscall.tbl                    | 68 ----------------------------
 scripts/syscall_common.tbl             | 72 +++++++++++++++++++++++++++++
 scripts/syscallhdr.sh                  | 83 ++++++++++++++++++++++++++++------
 scripts/syscalltbl.sh                  | 35 +++++++++++---
 9 files changed, 181 insertions(+), 281 deletions(-)
---
base-commit: af5e34a41cd607c00ef752e00331736570992354
change-id: 20260724-tonyk-syscall_table-928bbb1b26bb

Best regards,
--  
André Almeida <andrealmeid@igalia.com>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH RFC v2 1/4] syscalls: Create unified partial table for all archs
  2026-07-28  2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
@ 2026-07-28  2:47 ` André Almeida
  2026-07-28  6:47   ` Arnd Bergmann
  2026-07-28  2:47 ` [PATCH RFC v2 2/4] syscalls: Add support for x86_x32 for the common syscall table André Almeida
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 7+ messages in thread
From: André Almeida @ 2026-07-28  2:47 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
  Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida

To take advantage of the subset of syscall numbers that are guaranteed to
be shared, create a new table and adapt generation scripts to use it. In
that way, every new syscall can be added to a single file.

Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
 scripts/syscall_common.tbl | 72 ++++++++++++++++++++++++++++++++++++++++++++++
 scripts/syscallhdr.sh      | 57 +++++++++++++++++++++++++++---------
 scripts/syscalltbl.sh      | 35 +++++++++++++++++-----
 3 files changed, 143 insertions(+), 21 deletions(-)

diff --git a/scripts/syscall_common.tbl b/scripts/syscall_common.tbl
new file mode 100644
index 000000000000..3ac8918a4035
--- /dev/null
+++ b/scripts/syscall_common.tbl
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
+#
+# syscall numbers shared by architectures
+
+403	32	clock_gettime64			sys_clock_gettime
+404	32	clock_settime64			sys_clock_settime
+405	32	clock_adjtime64			sys_clock_adjtime
+406	32	clock_getres_time64		sys_clock_getres
+407	32	clock_nanosleep_time64		sys_clock_nanosleep
+408	32	timer_gettime64			sys_timer_gettime
+409	32	timer_settime64			sys_timer_settime
+410	32	timerfd_gettime64		sys_timerfd_gettime
+411	32	timerfd_settime64		sys_timerfd_settime
+412	32	utimensat_time64		sys_utimensat
+413	32	pselect6_time64			sys_pselect6			compat_sys_pselect6_time64
+414	32	ppoll_time64			sys_ppoll			compat_sys_ppoll_time64
+416	32	io_pgetevents_time64		sys_io_pgetevents		compat_sys_io_pgetevents_time64
+417	32	recvmmsg_time64			sys_recvmmsg			compat_sys_recvmmsg_time64
+418	32	mq_timedsend_time64		sys_mq_timedsend
+419	32	mq_timedreceive_time64		sys_mq_timedreceive
+420	32	semtimedop_time64		sys_semtimedop
+421	32	rt_sigtimedwait_time64		sys_rt_sigtimedwait		compat_sys_rt_sigtimedwait_time64
+422	32	futex_time64			sys_futex
+423	32	sched_rr_get_interval_time64	sys_sched_rr_get_interval
+424	common	pidfd_send_signal		sys_pidfd_send_signal
+425	common	io_uring_setup			sys_io_uring_setup
+426	common	io_uring_enter			sys_io_uring_enter
+427	common	io_uring_register		sys_io_uring_register
+428	common	open_tree			sys_open_tree
+429	common	move_mount			sys_move_mount
+430	common	fsopen				sys_fsopen
+431	common	fsconfig			sys_fsconfig
+432	common	fsmount				sys_fsmount
+433	common	fspick				sys_fspick
+434	common	pidfd_open			sys_pidfd_open
+435	common	clone3				sys_clone3
+436	common	close_range			sys_close_range
+437	common	openat2				sys_openat2
+438	common	pidfd_getfd			sys_pidfd_getfd
+439	common	faccessat2			sys_faccessat2
+440	common	process_madvise			sys_process_madvise
+441	common	epoll_pwait2			sys_epoll_pwait2		compat_sys_epoll_pwait2
+442	common	mount_setattr			sys_mount_setattr
+443	common	quotactl_fd			sys_quotactl_fd
+444	common	landlock_create_ruleset		sys_landlock_create_ruleset
+445	common	landlock_add_rule		sys_landlock_add_rule
+446	common	landlock_restrict_self		sys_landlock_restrict_self
+447	memfd_secret	memfd_secret			sys_memfd_secret
+448	common	process_mrelease		sys_process_mrelease
+449	common	futex_waitv			sys_futex_waitv
+450	common	set_mempolicy_home_node		sys_set_mempolicy_home_node
+451	common	cachestat			sys_cachestat
+452	common	fchmodat2			sys_fchmodat2
+453	common	map_shadow_stack		sys_map_shadow_stack
+454	common	futex_wake			sys_futex_wake
+455	common	futex_wait			sys_futex_wait
+456	common	futex_requeue			sys_futex_requeue
+457	common	statmount			sys_statmount
+458	common	listmount			sys_listmount
+459	common	lsm_get_self_attr		sys_lsm_get_self_attr
+460	common	lsm_set_self_attr		sys_lsm_set_self_attr
+461	common	lsm_list_modules		sys_lsm_list_modules
+462	common	mseal				sys_mseal
+463	common	setxattrat			sys_setxattrat
+464	common	getxattrat			sys_getxattrat
+465	common	listxattrat			sys_listxattrat
+466	common	removexattrat			sys_removexattrat
+467	common	open_tree_attr			sys_open_tree_attr
+468	common	file_getattr			sys_file_getattr
+469	common	file_setattr			sys_file_setattr
+470	common	listns				sys_listns
+471	common	rseq_slice_yield		sys_rseq_slice_yield
diff --git a/scripts/syscallhdr.sh b/scripts/syscallhdr.sh
index 22e34cd46b9b..0fc3e8dfc7e5 100755
--- a/scripts/syscallhdr.sh
+++ b/scripts/syscallhdr.sh
@@ -16,7 +16,7 @@
 set -e
 
 usage() {
-	echo >&2 "usage: $0 [--abis ABIS] [--emit-nr] [--offset OFFSET] [--prefix PREFIX] INFILE OUTFILE" >&2
+	echo >&2 "usage: $0 [--abis ABIS] [--emit-nr] [--offset OFFSET] [--prefix PREFIX] [--common-tbl] INFILE OUTFILE" >&2
 	echo >&2
 	echo >&2 "  INFILE    input syscall table"
 	echo >&2 "  OUTFILE   output header file"
@@ -26,6 +26,7 @@ usage() {
 	echo >&2 "  --emit-nr          Emit the macro of the number of syscalls (__NR_syscalls)"
 	echo >&2 "  --offset OFFSET    The offset of syscall numbers"
 	echo >&2 "  --prefix PREFIX    The prefix to the macro like __NR_<PREFIX><NAME>"
+	echo >&2 "  --common-tbl       Use the common number table"
 	exit 1
 }
 
@@ -34,6 +35,9 @@ abis=
 emit_nr=
 offset=
 prefix=
+common_tbl=
+max=0
+COMMON_TBL_PATH="../scripts/syscall_common.tbl"
 
 while [ $# -gt 0 ]
 do
@@ -50,6 +54,9 @@ do
 	--prefix)
 		prefix=$2
 		shift 2;;
+	--common-tbl)
+		common_tbl=1
+		shift 1;;
 	-*)
 		echo "$1: unknown option" >&2
 		usage;;
@@ -69,13 +76,32 @@ guard=_UAPI_ASM_$(basename "$outfile" |
 	sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
 	-e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g')
 
-grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | {
+emit_start_guard() {
 	echo "#ifndef $guard"
 	echo "#define $guard"
 	echo
+}
+
+# emit_nr(prefix, nr)
+emit_nr() {
+	local nr=$1
+	local prefix=$2
+	echo
+	echo "#ifdef __KERNEL__"
+	echo "#define __NR_${prefix}syscalls $nr"
+	echo "#endif"
+}
+
+emit_end_guard() {
+	echo
+	echo "#endif /* $guard */"
+}
 
-	max=0
-	while read nr abi name native compat ; do
+# gen_hdr(infile)
+gen_hdr() {
+	input=$1
+
+	while read nr abi name native compat; do
 
 		max=$nr
 
@@ -84,15 +110,18 @@ grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$infile" | {
 		fi
 
 		echo "#define __NR_$prefix$name $nr"
-	done
 
-	if [ -n "$emit_nr" ]; then
-		echo
-		echo "#ifdef __KERNEL__"
-		echo "#define __NR_${prefix}syscalls $(($max + 1))"
-		echo "#endif"
-	fi
+	done < <(grep -E "^[0-9A-Fa-fXx]+[[:space:]]+$abis" "$input")
+}
 
-	echo
-	echo "#endif /* $guard */"
-} > "$outfile"
+emit_start_guard > $outfile
+
+gen_hdr $infile >> $outfile
+
+if [ -n "$common_tbl" ]; then
+	gen_hdr $COMMON_TBL_PATH  >> "$outfile"
+fi
+
+emit_nr $(($max + 1)) $prefix >> $outfile
+
+emit_end_guard >> $outfile
diff --git a/scripts/syscalltbl.sh b/scripts/syscalltbl.sh
index 6a903b87a7c2..f4b48c8e8682 100755
--- a/scripts/syscalltbl.sh
+++ b/scripts/syscalltbl.sh
@@ -16,18 +16,23 @@
 set -e
 
 usage() {
-	echo >&2 "usage: $0 [--abis ABIS] INFILE OUTFILE" >&2
+	echo >&2 "usage: $0 [--abis ABIS] [--common-tbl] [--no-compat] INFILE OUTFILE" >&2
 	echo >&2
 	echo >&2 "  INFILE    input syscall table"
 	echo >&2 "  OUTFILE   output header file"
 	echo >&2
 	echo >&2 "options:"
 	echo >&2 "  --abis ABIS        ABI(s) to handle (By default, all lines are handled)"
+	echo >&2 "  --common-tbl       Use the common syscall number table"
+	echo >&2 "  --no-compat        Don't generated the compat version"
 	exit 1
 }
 
 # default unless specified by options
 abis=
+common_tbl=
+no_compat=
+COMMON_TBL_PATH="../scripts/syscall_common.tbl"
 
 while [ $# -gt 0 ]
 do
@@ -35,6 +40,12 @@ do
 	--abis)
 		abis=$(echo "($2)" | tr ',' '|')
 		shift 2;;
+	--common-tbl)
+		common_tbl=1
+		shift 1;;
+	--no-compat)
+		no_compat=1
+		shift 1;;
 	-*)
 		echo "$1: unknown option" >&2
 		usage;;
@@ -52,12 +63,14 @@ outfile="$2"
 
 nxt=0
 
-grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | {
+# gen_tbl(infile)
+gen_tbl() {
+	input=$1
 
 	while read nr abi name native compat noreturn; do
 
 		if [ $nxt -gt $nr ]; then
-			echo "error: $infile: syscall table is not sorted or duplicates the same syscall number" >&2
+			echo "error: $input: syscall table is not sorted or duplicates the same syscall number" >&2
 			exit 1
 		fi
 
@@ -66,13 +79,13 @@ grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | {
 			nxt=$((nxt + 1))
 		done
 
-		if [ "$compat" = "-" ]; then
+		if [ "$compat" = "-" ] || [ -n "$no_compat" ]; then
 			unset compat
 		fi
 
 		if [ -n "$noreturn" ]; then
 			if [ "$noreturn" != "noreturn" ]; then
-				echo "error: $infile: invalid string \"$noreturn\" in 'noreturn' column"
+				echo "error: $input: invalid string \"$noreturn\" in 'noreturn' column"
 				exit 1
 			fi
 			if [ -n "$compat" ]; then
@@ -88,5 +101,13 @@ grep -E "^[0-9]+[[:space:]]+$abis" "$infile" | {
 			echo "__SYSCALL($nr, sys_ni_syscall)"
 		fi
 		nxt=$((nr + 1))
-	done
-} > "$outfile"
+
+	done < <(grep -E "^[0-9]+[[:space:]]+$abis" "$input")
+
+}
+
+gen_tbl $infile  > "$outfile"
+
+if [ -n "$common_tbl" ]; then
+	gen_tbl $COMMON_TBL_PATH >> "$outfile"
+fi

-- 
2.55.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH RFC v2 2/4] syscalls: Add support for x86_x32 for the common syscall table
  2026-07-28  2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
  2026-07-28  2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
@ 2026-07-28  2:47 ` André Almeida
  2026-07-28  2:47 ` [PATCH RFC v2 3/4] x86: Use " André Almeida
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: André Almeida @ 2026-07-28  2:47 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
  Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida

x86_x32 has a peculiar ordering: first, goes the x86 syscalls. Then, the
shared syscall numbers from the common table, and finally the x86_x32
syscall numbers. Adapt syscallhdr.sh script to take this into account.

Let's hope that x32 is deprecated before the syscall table reaches syscall
512, to avoid making the shared table more confusing.

Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
 scripts/syscallhdr.sh | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/scripts/syscallhdr.sh b/scripts/syscallhdr.sh
index 0fc3e8dfc7e5..06372006509e 100755
--- a/scripts/syscallhdr.sh
+++ b/scripts/syscallhdr.sh
@@ -72,6 +72,12 @@ fi
 infile="$1"
 outfile="$2"
 
+is_x32=
+
+if [[ "$abis" == *"x32"* ]]; then
+	is_x32=1
+fi
+
 guard=_UAPI_ASM_$(basename "$outfile" |
 	sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \
 	-e 's/[^A-Z0-9_]/_/g' -e 's/__/_/g')
@@ -116,10 +122,32 @@ gen_hdr() {
 
 emit_start_guard > $outfile
 
-gen_hdr $infile >> $outfile
+# x32 has a special ordering. We need to get first the common numbers from x86
+# table, then the common numbers from scripts/syscall_common.tbl and finally the
+# x32 numbers
+if [ -n "$is_x32" ]; then
+
+	abis="${abis//x32|/}"
+	abis="${abis//|x32/}"
+	abis="${abis//x32/}"
+
+	if [[ $abis != "()" ]]; then
+		gen_hdr $infile >> $outfile
+
+		if [ -n "$common_tbl" ]; then
+			gen_hdr $COMMON_TBL_PATH  >> "$outfile"
+		fi
+	fi
+
+	abis="(x32)"
+
+	gen_hdr $infile >> "$outfile"
+else
+	gen_hdr $infile >> $outfile
 
-if [ -n "$common_tbl" ]; then
-	gen_hdr $COMMON_TBL_PATH  >> "$outfile"
+	if [ -n "$common_tbl" ]; then
+		gen_hdr $COMMON_TBL_PATH  >> "$outfile"
+	fi
 fi
 
 emit_nr $(($max + 1)) $prefix >> $outfile

-- 
2.55.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH RFC v2 3/4] x86: Use common syscall table
  2026-07-28  2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
  2026-07-28  2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
  2026-07-28  2:47 ` [PATCH RFC v2 2/4] syscalls: Add support for x86_x32 for the common syscall table André Almeida
@ 2026-07-28  2:47 ` André Almeida
  2026-07-28  2:47 ` [PATCH RFC v2 4/4] scripts/syscall.tbl: Use the common table André Almeida
  2026-07-28  8:30 ` [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs Arnd Bergmann
  4 siblings, 0 replies; 7+ messages in thread
From: André Almeida @ 2026-07-28  2:47 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
  Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida

Use common syscall table and drop the shared numbers from the x86 tables.

Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
 arch/x86/entry/syscalls/Makefile       | 16 ++++----
 arch/x86/entry/syscalls/syscall_32.tbl | 68 ----------------------------------
 arch/x86/entry/syscalls/syscall_64.tbl | 48 ------------------------
 3 files changed, 9 insertions(+), 123 deletions(-)

diff --git a/arch/x86/entry/syscalls/Makefile b/arch/x86/entry/syscalls/Makefile
index eca5d6eff132..8dbf625c8e5f 100644
--- a/arch/x86/entry/syscalls/Makefile
+++ b/arch/x86/entry/syscalls/Makefile
@@ -15,30 +15,31 @@ prefix :=
 
 quiet_cmd_syshdr = SYSHDR  $@
       cmd_syshdr = $(CONFIG_SHELL) $(syshdr) --abis $(abis) --emit-nr \
+      		--common-tbl \
 		$(if $(offset),--offset $(offset)) \
 		$(if $(prefix),--prefix $(prefix)) \
 		$< $@
 quiet_cmd_systbl = SYSTBL  $@
-      cmd_systbl = $(CONFIG_SHELL) $(systbl) --abis $(abis) $< $@
+      cmd_systbl = $(CONFIG_SHELL) $(systbl) --abis $(abis) --common-tbl $(no-compat) $< $@
 
 quiet_cmd_hypercalls = HYPERCALLS $@
       cmd_hypercalls = $(CONFIG_SHELL) '$<' $@ $(filter-out $<, $(real-prereqs))
 
-$(uapi)/unistd_32.h: abis := i386
+$(uapi)/unistd_32.h: abis := common,i386,memfd_secret,32
 $(uapi)/unistd_32.h: $(syscall32) $(syshdr) FORCE
 	$(call if_changed,syshdr)
 
-$(out)/unistd_32_ia32.h: abis := i386
+$(out)/unistd_32_ia32.h: abis := common,i386,memfd_secret,32
 $(out)/unistd_32_ia32.h: prefix := ia32_
 $(out)/unistd_32_ia32.h: $(syscall32) $(syshdr) FORCE
 	$(call if_changed,syshdr)
 
-$(uapi)/unistd_x32.h: abis := common,x32
+$(uapi)/unistd_x32.h: abis := common,x32,memfd_secret
 $(uapi)/unistd_x32.h: offset := __X32_SYSCALL_BIT
 $(uapi)/unistd_x32.h: $(syscall64) $(syshdr) FORCE
 	$(call if_changed,syshdr)
 
-$(uapi)/unistd_64.h: abis := common,64
+$(uapi)/unistd_64.h: abis := common,64,memfd_secret
 $(uapi)/unistd_64.h: $(syscall64) $(syshdr) FORCE
 	$(call if_changed,syshdr)
 
@@ -47,10 +48,11 @@ $(out)/unistd_64_x32.h: prefix := x32_
 $(out)/unistd_64_x32.h: $(syscall64) $(syshdr) FORCE
 	$(call if_changed,syshdr)
 
-$(out)/syscalls_32.h: abis := i386
+$(out)/syscalls_32.h: abis := common,i386,memfd_secret,32
 $(out)/syscalls_32.h: $(syscall32) $(systbl) FORCE
 	$(call if_changed,systbl)
-$(out)/syscalls_64.h: abis := common,64
+$(out)/syscalls_64.h: abis := common,64,memfd_secret
+$(out)/syscalls_64.h: no-compat:= --no-compat
 $(out)/syscalls_64.h: $(syscall64) $(systbl) FORCE
 	$(call if_changed,systbl)
 $(out)/syscalls_x32.h: abis := common,x32
diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
index f832ebd2d79b..dfb1c75d72d6 100644
--- a/arch/x86/entry/syscalls/syscall_32.tbl
+++ b/arch/x86/entry/syscalls/syscall_32.tbl
@@ -409,71 +409,3 @@
 400	i386	msgsnd			sys_msgsnd    			compat_sys_msgsnd
 401	i386	msgrcv			sys_msgrcv    			compat_sys_msgrcv
 402	i386	msgctl			sys_msgctl    			compat_sys_msgctl
-403	i386	clock_gettime64		sys_clock_gettime
-404	i386	clock_settime64		sys_clock_settime
-405	i386	clock_adjtime64		sys_clock_adjtime
-406	i386	clock_getres_time64	sys_clock_getres
-407	i386	clock_nanosleep_time64	sys_clock_nanosleep
-408	i386	timer_gettime64		sys_timer_gettime
-409	i386	timer_settime64		sys_timer_settime
-410	i386	timerfd_gettime64	sys_timerfd_gettime
-411	i386	timerfd_settime64	sys_timerfd_settime
-412	i386	utimensat_time64	sys_utimensat
-413	i386	pselect6_time64		sys_pselect6			compat_sys_pselect6_time64
-414	i386	ppoll_time64		sys_ppoll			compat_sys_ppoll_time64
-416	i386	io_pgetevents_time64	sys_io_pgetevents		compat_sys_io_pgetevents_time64
-417	i386	recvmmsg_time64		sys_recvmmsg			compat_sys_recvmmsg_time64
-418	i386	mq_timedsend_time64	sys_mq_timedsend
-419	i386	mq_timedreceive_time64	sys_mq_timedreceive
-420	i386	semtimedop_time64	sys_semtimedop
-421	i386	rt_sigtimedwait_time64	sys_rt_sigtimedwait		compat_sys_rt_sigtimedwait_time64
-422	i386	futex_time64		sys_futex
-423	i386	sched_rr_get_interval_time64	sys_sched_rr_get_interval
-424	i386	pidfd_send_signal	sys_pidfd_send_signal
-425	i386	io_uring_setup		sys_io_uring_setup
-426	i386	io_uring_enter		sys_io_uring_enter
-427	i386	io_uring_register	sys_io_uring_register
-428	i386	open_tree		sys_open_tree
-429	i386	move_mount		sys_move_mount
-430	i386	fsopen			sys_fsopen
-431	i386	fsconfig		sys_fsconfig
-432	i386	fsmount			sys_fsmount
-433	i386	fspick			sys_fspick
-434	i386	pidfd_open		sys_pidfd_open
-435	i386	clone3			sys_clone3
-436	i386	close_range		sys_close_range
-437	i386	openat2			sys_openat2
-438	i386	pidfd_getfd		sys_pidfd_getfd
-439	i386	faccessat2		sys_faccessat2
-440	i386	process_madvise		sys_process_madvise
-441	i386	epoll_pwait2		sys_epoll_pwait2		compat_sys_epoll_pwait2
-442	i386	mount_setattr		sys_mount_setattr
-443	i386	quotactl_fd		sys_quotactl_fd
-444	i386	landlock_create_ruleset	sys_landlock_create_ruleset
-445	i386	landlock_add_rule	sys_landlock_add_rule
-446	i386	landlock_restrict_self	sys_landlock_restrict_self
-447	i386	memfd_secret		sys_memfd_secret
-448	i386	process_mrelease	sys_process_mrelease
-449	i386	futex_waitv		sys_futex_waitv
-450	i386	set_mempolicy_home_node		sys_set_mempolicy_home_node
-451	i386	cachestat		sys_cachestat
-452	i386	fchmodat2		sys_fchmodat2
-453	i386	map_shadow_stack	sys_map_shadow_stack
-454	i386	futex_wake		sys_futex_wake
-455	i386	futex_wait		sys_futex_wait
-456	i386	futex_requeue		sys_futex_requeue
-457	i386	statmount		sys_statmount
-458	i386	listmount		sys_listmount
-459	i386	lsm_get_self_attr	sys_lsm_get_self_attr
-460	i386	lsm_set_self_attr	sys_lsm_set_self_attr
-461	i386	lsm_list_modules	sys_lsm_list_modules
-462	i386	mseal 			sys_mseal
-463	i386	setxattrat		sys_setxattrat
-464	i386	getxattrat		sys_getxattrat
-465	i386	listxattrat		sys_listxattrat
-466	i386	removexattrat		sys_removexattrat
-467	i386	open_tree_attr		sys_open_tree_attr
-468	i386	file_getattr		sys_file_getattr
-469	i386	file_setattr		sys_file_setattr
-470	i386	listns			sys_listns
-471	i386	rseq_slice_yield	sys_rseq_slice_yield
diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
index 524155d655da..cd94c00c2cc5 100644
--- a/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/arch/x86/entry/syscalls/syscall_64.tbl
@@ -348,54 +348,6 @@
 336	common	uprobe			sys_uprobe
 # don't use numbers 387 through 423, add new calls after the last
 # 'common' entry
-424	common	pidfd_send_signal	sys_pidfd_send_signal
-425	common	io_uring_setup		sys_io_uring_setup
-426	common	io_uring_enter		sys_io_uring_enter
-427	common	io_uring_register	sys_io_uring_register
-428	common	open_tree		sys_open_tree
-429	common	move_mount		sys_move_mount
-430	common	fsopen			sys_fsopen
-431	common	fsconfig		sys_fsconfig
-432	common	fsmount			sys_fsmount
-433	common	fspick			sys_fspick
-434	common	pidfd_open		sys_pidfd_open
-435	common	clone3			sys_clone3
-436	common	close_range		sys_close_range
-437	common	openat2			sys_openat2
-438	common	pidfd_getfd		sys_pidfd_getfd
-439	common	faccessat2		sys_faccessat2
-440	common	process_madvise		sys_process_madvise
-441	common	epoll_pwait2		sys_epoll_pwait2
-442	common	mount_setattr		sys_mount_setattr
-443	common	quotactl_fd		sys_quotactl_fd
-444	common	landlock_create_ruleset	sys_landlock_create_ruleset
-445	common	landlock_add_rule	sys_landlock_add_rule
-446	common	landlock_restrict_self	sys_landlock_restrict_self
-447	common	memfd_secret		sys_memfd_secret
-448	common	process_mrelease	sys_process_mrelease
-449	common	futex_waitv		sys_futex_waitv
-450	common	set_mempolicy_home_node	sys_set_mempolicy_home_node
-451	common	cachestat		sys_cachestat
-452	common	fchmodat2		sys_fchmodat2
-453	common	map_shadow_stack	sys_map_shadow_stack
-454	common	futex_wake		sys_futex_wake
-455	common	futex_wait		sys_futex_wait
-456	common	futex_requeue		sys_futex_requeue
-457	common	statmount		sys_statmount
-458	common	listmount		sys_listmount
-459	common	lsm_get_self_attr	sys_lsm_get_self_attr
-460	common	lsm_set_self_attr	sys_lsm_set_self_attr
-461	common	lsm_list_modules	sys_lsm_list_modules
-462 	common  mseal			sys_mseal
-463	common	setxattrat		sys_setxattrat
-464	common	getxattrat		sys_getxattrat
-465	common	listxattrat		sys_listxattrat
-466	common	removexattrat		sys_removexattrat
-467	common	open_tree_attr		sys_open_tree_attr
-468	common	file_getattr		sys_file_getattr
-469	common	file_setattr		sys_file_setattr
-470	common	listns			sys_listns
-471	common	rseq_slice_yield	sys_rseq_slice_yield
 
 #
 # Due to a historical design error, certain syscalls are numbered differently

-- 
2.55.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH RFC v2 4/4] scripts/syscall.tbl: Use the common table
  2026-07-28  2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
                   ` (2 preceding siblings ...)
  2026-07-28  2:47 ` [PATCH RFC v2 3/4] x86: Use " André Almeida
@ 2026-07-28  2:47 ` André Almeida
  2026-07-28  8:30 ` [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs Arnd Bergmann
  4 siblings, 0 replies; 7+ messages in thread
From: André Almeida @ 2026-07-28  2:47 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
	H. Peter Anvin, Nathan Chancellor, Arnd Bergmann
  Cc: linux-kernel, linux-kbuild, kernel-dev, André Almeida

Use the common syscall number table and drop the shared numbers from the
table.

Signed-off-by: André Almeida <andrealmeid@igalia.com>
---
 arch/arm64/tools/syscall_32.tbl | 68 -----------------------------------------
 scripts/Makefile.asm-headers    |  4 +--
 scripts/syscall.tbl             | 68 -----------------------------------------
 3 files changed, 2 insertions(+), 138 deletions(-)

diff --git a/arch/arm64/tools/syscall_32.tbl b/arch/arm64/tools/syscall_32.tbl
index 62d93d88e0fe..957cb7d59443 100644
--- a/arch/arm64/tools/syscall_32.tbl
+++ b/arch/arm64/tools/syscall_32.tbl
@@ -415,71 +415,3 @@
 400	common	migrate_pages		sys_migrate_pages
 401	common	kexec_file_load		sys_kexec_file_load
 # 402 is unused
-403	common	clock_gettime64			sys_clock_gettime
-404	common	clock_settime64			sys_clock_settime
-405	common	clock_adjtime64			sys_clock_adjtime
-406	common	clock_getres_time64		sys_clock_getres
-407	common	clock_nanosleep_time64		sys_clock_nanosleep
-408	common	timer_gettime64			sys_timer_gettime
-409	common	timer_settime64			sys_timer_settime
-410	common	timerfd_gettime64		sys_timerfd_gettime
-411	common	timerfd_settime64		sys_timerfd_settime
-412	common	utimensat_time64		sys_utimensat
-413	common	pselect6_time64			sys_pselect6			compat_sys_pselect6_time64
-414	common	ppoll_time64			sys_ppoll			compat_sys_ppoll_time64
-416	common	io_pgetevents_time64		sys_io_pgetevents		compat_sys_io_pgetevents_time64
-417	common	recvmmsg_time64			sys_recvmmsg			compat_sys_recvmmsg_time64
-418	common	mq_timedsend_time64		sys_mq_timedsend
-419	common	mq_timedreceive_time64		sys_mq_timedreceive
-420	common	semtimedop_time64		sys_semtimedop
-421	common	rt_sigtimedwait_time64		sys_rt_sigtimedwait		compat_sys_rt_sigtimedwait_time64
-422	common	futex_time64			sys_futex
-423	common	sched_rr_get_interval_time64	sys_sched_rr_get_interval
-424	common	pidfd_send_signal		sys_pidfd_send_signal
-425	common	io_uring_setup			sys_io_uring_setup
-426	common	io_uring_enter			sys_io_uring_enter
-427	common	io_uring_register		sys_io_uring_register
-428	common	open_tree			sys_open_tree
-429	common	move_mount			sys_move_mount
-430	common	fsopen				sys_fsopen
-431	common	fsconfig			sys_fsconfig
-432	common	fsmount				sys_fsmount
-433	common	fspick				sys_fspick
-434	common	pidfd_open			sys_pidfd_open
-435	common	clone3				sys_clone3
-436	common	close_range			sys_close_range
-437	common	openat2				sys_openat2
-438	common	pidfd_getfd			sys_pidfd_getfd
-439	common	faccessat2			sys_faccessat2
-440	common	process_madvise			sys_process_madvise
-441	common	epoll_pwait2			sys_epoll_pwait2		compat_sys_epoll_pwait2
-442	common	mount_setattr			sys_mount_setattr
-443	common	quotactl_fd			sys_quotactl_fd
-444	common	landlock_create_ruleset		sys_landlock_create_ruleset
-445	common	landlock_add_rule		sys_landlock_add_rule
-446	common	landlock_restrict_self		sys_landlock_restrict_self
-# 447 reserved for memfd_secret
-448	common	process_mrelease		sys_process_mrelease
-449	common	futex_waitv			sys_futex_waitv
-450	common	set_mempolicy_home_node		sys_set_mempolicy_home_node
-451	common	cachestat			sys_cachestat
-452	common	fchmodat2			sys_fchmodat2
-453	common	map_shadow_stack		sys_map_shadow_stack
-454	common	futex_wake			sys_futex_wake
-455	common	futex_wait			sys_futex_wait
-456	common	futex_requeue			sys_futex_requeue
-457	common	statmount			sys_statmount
-458	common	listmount			sys_listmount
-459	common	lsm_get_self_attr		sys_lsm_get_self_attr
-460	common	lsm_set_self_attr		sys_lsm_set_self_attr
-461	common	lsm_list_modules		sys_lsm_list_modules
-462	common	mseal				sys_mseal
-463	common	setxattrat			sys_setxattrat
-464	common	getxattrat			sys_getxattrat
-465	common	listxattrat			sys_listxattrat
-466	common	removexattrat			sys_removexattrat
-467	common	open_tree_attr			sys_open_tree_attr
-468	common	file_getattr			sys_file_getattr
-469	common	file_setattr			sys_file_setattr
-470	common	listns				sys_listns
-471	common	rseq_slice_yield		sys_rseq_slice_yield
diff --git a/scripts/Makefile.asm-headers b/scripts/Makefile.asm-headers
index 8a4856e74180..995171dab2ca 100644
--- a/scripts/Makefile.asm-headers
+++ b/scripts/Makefile.asm-headers
@@ -58,14 +58,14 @@ quiet_cmd_remove = REMOVE  $(unwanted)
       cmd_remove = rm -f $(unwanted)
 
 quiet_cmd_syshdr = SYSHDR  $@
-      cmd_syshdr = $(CONFIG_SHELL) $(syshdr) \
+      cmd_syshdr = $(CONFIG_SHELL) $(syshdr) --common-tbl \
 		   $(if $(syshdr-args-$*),$(syshdr-args-$*),$(syshdr-args)) \
 		   $(if $(syscall_compat),--prefix "compat$*_") \
 		   --abis $(subst $(space),$(comma),$(strip $(syscall_abis_$*))) \
 		   $< $@
 
 quiet_cmd_systbl = SYSTBL  $@
-      cmd_systbl = $(CONFIG_SHELL) $(systbl) \
+      cmd_systbl = $(CONFIG_SHELL) $(systbl) --common-tbl \
 		   $(if $(systbl-args-$*),$(systbl-args-$*),$(systbl-args)) \
 		   --abis $(subst $(space),$(comma),$(strip $(syscall_abis_$*))) \
 		   $< $@
diff --git a/scripts/syscall.tbl b/scripts/syscall.tbl
index 7a42b32b6577..ee828d03094e 100644
--- a/scripts/syscall.tbl
+++ b/scripts/syscall.tbl
@@ -344,71 +344,3 @@
 293	common	rseq				sys_rseq
 294	common	kexec_file_load			sys_kexec_file_load
 # 295 through 402 are unassigned to sync up with generic numbers don't use
-403	32	clock_gettime64			sys_clock_gettime
-404	32	clock_settime64			sys_clock_settime
-405	32	clock_adjtime64			sys_clock_adjtime
-406	32	clock_getres_time64		sys_clock_getres
-407	32	clock_nanosleep_time64		sys_clock_nanosleep
-408	32	timer_gettime64			sys_timer_gettime
-409	32	timer_settime64			sys_timer_settime
-410	32	timerfd_gettime64		sys_timerfd_gettime
-411	32	timerfd_settime64		sys_timerfd_settime
-412	32	utimensat_time64		sys_utimensat
-413	32	pselect6_time64			sys_pselect6			compat_sys_pselect6_time64
-414	32	ppoll_time64			sys_ppoll			compat_sys_ppoll_time64
-416	32	io_pgetevents_time64		sys_io_pgetevents		compat_sys_io_pgetevents_time64
-417	32	recvmmsg_time64			sys_recvmmsg			compat_sys_recvmmsg_time64
-418	32	mq_timedsend_time64		sys_mq_timedsend
-419	32	mq_timedreceive_time64		sys_mq_timedreceive
-420	32	semtimedop_time64		sys_semtimedop
-421	32	rt_sigtimedwait_time64		sys_rt_sigtimedwait		compat_sys_rt_sigtimedwait_time64
-422	32	futex_time64			sys_futex
-423	32	sched_rr_get_interval_time64	sys_sched_rr_get_interval
-424	common	pidfd_send_signal		sys_pidfd_send_signal
-425	common	io_uring_setup			sys_io_uring_setup
-426	common	io_uring_enter			sys_io_uring_enter
-427	common	io_uring_register		sys_io_uring_register
-428	common	open_tree			sys_open_tree
-429	common	move_mount			sys_move_mount
-430	common	fsopen				sys_fsopen
-431	common	fsconfig			sys_fsconfig
-432	common	fsmount				sys_fsmount
-433	common	fspick				sys_fspick
-434	common	pidfd_open			sys_pidfd_open
-435	common	clone3				sys_clone3
-436	common	close_range			sys_close_range
-437	common	openat2				sys_openat2
-438	common	pidfd_getfd			sys_pidfd_getfd
-439	common	faccessat2			sys_faccessat2
-440	common	process_madvise			sys_process_madvise
-441	common	epoll_pwait2			sys_epoll_pwait2		compat_sys_epoll_pwait2
-442	common	mount_setattr			sys_mount_setattr
-443	common	quotactl_fd			sys_quotactl_fd
-444	common	landlock_create_ruleset		sys_landlock_create_ruleset
-445	common	landlock_add_rule		sys_landlock_add_rule
-446	common	landlock_restrict_self		sys_landlock_restrict_self
-447	memfd_secret	memfd_secret		sys_memfd_secret
-448	common	process_mrelease		sys_process_mrelease
-449	common	futex_waitv			sys_futex_waitv
-450	common	set_mempolicy_home_node		sys_set_mempolicy_home_node
-451	common	cachestat			sys_cachestat
-452	common	fchmodat2			sys_fchmodat2
-453	common	map_shadow_stack		sys_map_shadow_stack
-454	common	futex_wake			sys_futex_wake
-455	common	futex_wait			sys_futex_wait
-456	common	futex_requeue			sys_futex_requeue
-457	common	statmount			sys_statmount
-458	common	listmount			sys_listmount
-459	common	lsm_get_self_attr		sys_lsm_get_self_attr
-460	common	lsm_set_self_attr		sys_lsm_set_self_attr
-461	common	lsm_list_modules		sys_lsm_list_modules
-462	common	mseal				sys_mseal
-463	common	setxattrat			sys_setxattrat
-464	common	getxattrat			sys_getxattrat
-465	common	listxattrat			sys_listxattrat
-466	common	removexattrat			sys_removexattrat
-467	common	open_tree_attr			sys_open_tree_attr
-468	common	file_getattr			sys_file_getattr
-469	common	file_setattr			sys_file_setattr
-470	common	listns				sys_listns
-471	common	rseq_slice_yield		sys_rseq_slice_yield

-- 
2.55.0


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH RFC v2 1/4] syscalls: Create unified partial table for all archs
  2026-07-28  2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
@ 2026-07-28  6:47   ` Arnd Bergmann
  0 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2026-07-28  6:47 UTC (permalink / raw)
  To: André Almeida, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, Dave Hansen, H. Peter Anvin, Nathan Chancellor
  Cc: linux-kernel, linux-kbuild, kernel-dev

On Tue, Jul 28, 2026, at 04:47, André Almeida wrote:

>  	echo >&2 "options:"
>  	echo >&2 "  --abis ABIS        ABI(s) to handle (By default, all 
> lines are handled)"
> +	echo >&2 "  --common-tbl       Use the common syscall number table"
> +	echo >&2 "  --no-compat        Don't generated the compat version"
>  	exit 1

You don't explain what the --no-compat flag is good for.

I would hope we can avoid adding even more flags here since
there may be other (external) scripts that process the same data 
and that need to stay in sync.

> +COMMON_TBL_PATH="../scripts/syscall_common.tbl"

Hardcoding the path here means the script can no longer work
outside of the kernel tree.  Maybe you can you combine this with
the --common-tbl argument to pass the file name?

     Arnd

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs
  2026-07-28  2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
                   ` (3 preceding siblings ...)
  2026-07-28  2:47 ` [PATCH RFC v2 4/4] scripts/syscall.tbl: Use the common table André Almeida
@ 2026-07-28  8:30 ` Arnd Bergmann
  4 siblings, 0 replies; 7+ messages in thread
From: Arnd Bergmann @ 2026-07-28  8:30 UTC (permalink / raw)
  To: André Almeida, Thomas Gleixner, Ingo Molnar,
	Borislav Petkov, Dave Hansen, H. Peter Anvin, Nathan Chancellor
  Cc: linux-kernel, linux-kbuild, kernel-dev

On Tue, Jul 28, 2026, at 04:47, André Almeida wrote:
> The generic table starts from 403 (clock_gettime64), the first common syscall.
> The scripts are adapted to x86 specifics, like not generating the compat entry
> point for x86_64 and placing x86_x32 things in the proper order. x32 is likely
> to be dropped from Linux soon but for the moment I left the support there. If
> this sounds good, next revision I can add the docs bits too.

It may be easier to skip x32/x86-64 for the moment and focus on
the architectures that we know need small changes (mips, powerpc,
alpha).

The patch at
https://lore.kernel.org/all/20260707212252.bYk3-AlU@linutronix.de/
still hasn't been picked up yet. If your series is done before
we actually remove x32, we may still need to add a temporary
workaround for it, but it would be easier to avoid that altogether
by waiting a bit.

> I've tested this with x86 and arm64, by comparing the syscalls_*.h and
> unistd_*.h files generated before and after this patchset and they are
> identical.

I've had another look at what I tried previously, here is the list of
things we have to figure out to do this properly across all
architectures:

- separate offsets for base and common table on alpha. Maybe we can
  just process the two tables separately here and combine the
  output files afterwards?
- special __sys_clone3 entry points on alpha, m68k, mips, parisc and
  sparc.
- combine mips n32/n64 tables into a single file with regular
  use of compat entries for n32, in order to handle compat entry
  for the common calls (epoll_pwait2, pselect_time64, ppoll_time64,
  io_pgetevents_time64, recvmmsg_time64, rt_sigtimedwait_time64)
- come up with a solution for nospu syscalls on powerpc (clone3,
  set_mempolicy_home_node, rseq_slice_yield). Possibly dropping support
  for spu syscalls entirely, making all common syscalls implicitly
  nospu, incorporating this in the common table, or handling this
  in the syscall implementation where necessary.
  note that newlib still supports spu syscalls, but only lists
  numbers up to __NR_sync_file_range2 (#308). gcc-10 and higher
  no longer support SPU at all.

       Arnd

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-07-28  8:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-28  2:47 [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs André Almeida
2026-07-28  2:47 ` [PATCH RFC v2 1/4] syscalls: Create unified partial " André Almeida
2026-07-28  6:47   ` Arnd Bergmann
2026-07-28  2:47 ` [PATCH RFC v2 2/4] syscalls: Add support for x86_x32 for the common syscall table André Almeida
2026-07-28  2:47 ` [PATCH RFC v2 3/4] x86: Use " André Almeida
2026-07-28  2:47 ` [PATCH RFC v2 4/4] scripts/syscall.tbl: Use the common table André Almeida
2026-07-28  8:30 ` [PATCH RFC v2 0/4] syscalls: Add a shared table for all archs Arnd Bergmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®