[PATCH RFC v3 0/8] syscalls: Add a shared table for all archs

André Almeida posted 8 patches 1 month, 3 weeks ago
There is a newer version of this series
arch/arm/tools/Makefile                   | 10 ++--
arch/arm/tools/syscall.tbl                | 68 -------------------------
arch/arm64/tools/syscall_32.tbl           | 68 -------------------------
arch/mips/kernel/scall64-n32.S            |  1 +
arch/mips/kernel/syscalls/Makefile        | 27 +++++++---
arch/mips/kernel/syscalls/syscall_n32.tbl | 68 -------------------------
arch/mips/kernel/syscalls/syscall_n64.tbl | 48 ------------------
arch/mips/kernel/syscalls/syscall_o32.tbl | 68 -------------------------
arch/mips/kernel/syscalls/syscallnr.sh    | 26 ----------
arch/s390/kernel/syscalls/Makefile        |  8 ++-
arch/s390/kernel/syscalls/syscall.tbl     | 48 ------------------
arch/sparc/kernel/syscalls/Makefile       |  8 ++-
arch/sparc/kernel/syscalls/syscall.tbl    | 68 -------------------------
scripts/Makefile.asm-headers              |  9 ++--
scripts/syscall.tbl                       | 68 -------------------------
scripts/syscall_common.tbl                | 83 +++++++++++++++++++++++++++++++
scripts/syscallhdr.sh                     | 62 +++++++++++++++++------
scripts/syscalltbl.sh                     | 38 +++++++++++---
18 files changed, 205 insertions(+), 571 deletions(-)
[PATCH RFC v3 0/8] syscalls: Add a shared table for all archs
Posted by André Almeida 1 month, 3 weeks ago
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.

I've compile tested for arm32, arm64, s390, mips and sparc, by comparing the
syscalls_*.h and unistd_*.h files generated before and after this patchset. For
most of cases the files are identical, for the few cases that they are not,
there's a note in the commit explaining why they are equivalent.

Thanks!
	André

Changes in v3:
- Removed x86 for now, let's wait till x32 is dropped
- Added much more archs
- v2: https://patch.msgid.link/20260727-tonyk-syscall_table-v2-0-95d4f1ee471f@igalia.com

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 (8):
      syscalls: Make --abis parsing more robust
      syscalls: Create unified partial table for all archs
      scripts/syscall.tbl: Use the common table
      arm: Use the common syscall table
      s390: Use the common syscall table
      sparc: Use the common syscall table
      mips: Remove duplicated syscallnr.sh
      mips: Use the common syscall table

 arch/arm/tools/Makefile                   | 10 ++--
 arch/arm/tools/syscall.tbl                | 68 -------------------------
 arch/arm64/tools/syscall_32.tbl           | 68 -------------------------
 arch/mips/kernel/scall64-n32.S            |  1 +
 arch/mips/kernel/syscalls/Makefile        | 27 +++++++---
 arch/mips/kernel/syscalls/syscall_n32.tbl | 68 -------------------------
 arch/mips/kernel/syscalls/syscall_n64.tbl | 48 ------------------
 arch/mips/kernel/syscalls/syscall_o32.tbl | 68 -------------------------
 arch/mips/kernel/syscalls/syscallnr.sh    | 26 ----------
 arch/s390/kernel/syscalls/Makefile        |  8 ++-
 arch/s390/kernel/syscalls/syscall.tbl     | 48 ------------------
 arch/sparc/kernel/syscalls/Makefile       |  8 ++-
 arch/sparc/kernel/syscalls/syscall.tbl    | 68 -------------------------
 scripts/Makefile.asm-headers              |  9 ++--
 scripts/syscall.tbl                       | 68 -------------------------
 scripts/syscall_common.tbl                | 83 +++++++++++++++++++++++++++++++
 scripts/syscallhdr.sh                     | 62 +++++++++++++++++------
 scripts/syscalltbl.sh                     | 38 +++++++++++---
 18 files changed, 205 insertions(+), 571 deletions(-)
---
base-commit: 075b74841bd0065a3bda3440873c747938e69b68
change-id: 20260724-tonyk-syscall_table-928bbb1b26bb

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

Re: [PATCH RFC v3 0/8] syscalls: Add a shared table for all archs
Posted by Arnd Bergmann 1 month, 3 weeks ago
On Fri, Aug 7, 2026, at 21:34, André Almeida wrote:
>
> 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.
>
> I've compile tested for arm32, arm64, s390, mips and sparc, by comparing the
> syscalls_*.h and unistd_*.h files generated before and after this patchset. For
> most of cases the files are identical, for the few cases that they are not,
> there's a note in the commit explaining why they are equivalent.

Any reason you still didn't include the alpha version? As I mentioned
before, I think this is the most important one to be in the initial
set, to ensure the script can deal with the having two separate offsets
without becoming too messy, or needing a rewrite to take multiple passes.

      Arnd
Re: [PATCH RFC v3 0/8] syscalls: Add a shared table for all archs
Posted by André Almeida 1 month, 2 weeks ago
Em 07/08/2026 17:43, Arnd Bergmann escreveu:
> On Fri, Aug 7, 2026, at 21:34, André Almeida wrote:
>>
>> 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.
>>
>> I've compile tested for arm32, arm64, s390, mips and sparc, by comparing the
>> syscalls_*.h and unistd_*.h files generated before and after this patchset. For
>> most of cases the files are identical, for the few cases that they are not,
>> there's a note in the commit explaining why they are equivalent.
> 
> Any reason you still didn't include the alpha version? As I mentioned
> before, I think this is the most important one to be in the initial
> set, to ensure the script can deal with the having two separate offsets
> without becoming too messy, or needing a rewrite to take multiple passes.
> 
>        Arnd


One reason that I didn't include alpha on this version yet (but forgot 
to explain in the cover letter) is that alpha is the only arch that 
doesn't implement `set_mempolicy_home_node`, and the commit message that 
creates this syscall doesn't help to explain why. But for now I think I 
can do something similar to `memfd_secret` and add a new ABI or use the 
stub implementation.
Re: [PATCH RFC v3 0/8] syscalls: Add a shared table for all archs
Posted by Arnd Bergmann 1 month, 2 weeks ago
On Mon, Aug 10, 2026, at 15:25, André Almeida wrote:
> Em 07/08/2026 17:43, Arnd Bergmann escreveu:
>> On Fri, Aug 7, 2026, at 21:34, André Almeida wrote:
>>>
>>> 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.
>>>
>>> I've compile tested for arm32, arm64, s390, mips and sparc, by comparing the
>>> syscalls_*.h and unistd_*.h files generated before and after this patchset. For
>>> most of cases the files are identical, for the few cases that they are not,
>>> there's a note in the commit explaining why they are equivalent.
>> 
>> Any reason you still didn't include the alpha version? As I mentioned
>> before, I think this is the most important one to be in the initial
>> set, to ensure the script can deal with the having two separate offsets
>> without becoming too messy, or needing a rewrite to take multiple passes.
>
> One reason that I didn't include alpha on this version yet (but forgot 
> to explain in the cover letter) is that alpha is the only arch that 
> doesn't implement `set_mempolicy_home_node`, and the commit message that 
> creates this syscall doesn't help to explain why. But for now I think I 
> can do something similar to `memfd_secret` and add a new ABI or use the 
> stub implementation.

No, I think we can just keep the normal table here. There is
already a definition for the syscall macro on alpha, just the
entry point is set to sys_ni_syscall. On alpha, CONFIG_NUMA
is always disabled as of fdb7d9b7acd0 ("alpha: remove DISCONTIGMEM
and NUMA"), so sys_mempolicy_home_node always points to
sys_ni_syscall through the kernel/sys_ni.c redirect.

I would split that change out to a separate commit, but that
patch is clearly only cosmetic here.

We probably want the same thing for memfd_secret() as well, and
always define that for all architectures, with the kernel/sys_ni.c
file taking care of the CONFIG_SECRETMEM=n builds, but that is
not entirely a nop, since it adds a __NR_memfd_seret macro
on architectures that don't already have it.

       Arnd