On Wed, Jun 18, 2025, at 18:56, Sebastian Andrzej Siewior wrote: > On 2025-06-18 13:39:46 [-0300], André Almeida wrote: >> >> Ops, I forgot to address them. I will do it for v5. >> >> > - You say 64bit x86-64 does not have the problem due the compat syscall. >> > Arm64 has this problem. New arm64 do not provide arm32 facility. You >> > introduce the syscall here. Why not introduce the compat syscall >> > instead? I'm sorry if this has been answered somewhere below but this >> > was one question I had while I initially skimmed over the patches. >> > >> >> The main target for this new syscall is Arm64, that can't handle 32 pointers >> in the current syscall, so this new interface allows the robust list >> mechanism to know if it needs to do 64 or 32 bit pointer arithmetic >> operations to walk in the list. >> >> Introducing a compat syscall won't fix this, giving that it only works in >> x86-64. We need an entry point for Arm64 that can handle 32 bit pointers. > > I would need to dig into details to figure out why it won't work for > arm64 and works only for x86-64. > There is the set_robust_list syscall as compat which sets > ::compat_robust_list. And non-compat sets ::robust_list. The 32bit > application on 64bit kernel should set ::compat_robust_list which what > your syscall provides. > That is why I don't understand the need for it so far. Maybe I am > missing a detail. > We have other architectures with 64 bit kernel and a possible 32bit > userland such as mips, s390 or powerpc which would have the same issue > then. Or there is something special about arm64 in this case which makes > it unique.
x86 is the special case here, since it allows applications to call both the 32-bit (compat) and 64-bit syscalls directly on a 64-bit kernel. I think MIPS may do that as well, but the other architectures only allow a process to call syscalls for its native ABI, so the only way to call a compat syscall is from a 32-bit task. On Arm and RISC-V it's also common to have CPUs that cannot run 32-bit tasks at all, so even running your x86-32 emulator as an arm32 or rv32 task won't work. Arnd