On Wed, Jan 16, 2019 at 02:15:18PM +0100, Arnd Bergmann wrote:
Hi Heiko and Martin,
As promised, I gave this a go and changed the SYSCALL_DEFINEx() infrastructure to always include the wrappers for doing the 31-bit argument conversion on s390 compat mode.
This does three main things:
The UID16 rework saved a lot of duplicated code, and would probably make sense by itself, but is also required as we can no longer call sys_*() functions directly after the last step.
Removing the compat_wrapper.c file is of course the main goal here, in order to remove the need to maintain the compat_wrapper.c file when new system calls get added. Unfortunately, this requires adding some complexity in syscall_wrapper.h, and trades a small reduction in source code lines for a small increase in binary size for unused wrappers.
As an added benefit, the use of syscall_wrapper.h now makes it easy to change the syscall wrappers so they no longer see all user space register contents, similar to changes done in commits fa697140f9a2 ("syscalls/x86: Use 'struct pt_regs' based syscall calling convention for 64-bit syscalls") and 4378a7d4be30 ("arm64: implement syscall wrappers"). I leave the actual implementation of this for you, if you want to do it later.
I did not test the changes at runtime, but I looked at the generated object code, which seems fine here and includes the same conversions as before.
All looks good and seems to work fine. This is a very nice simplification of our compat code, even if it adds some dead code to the kernel image.
I did some tests and it all looks good. Also the generated code looks fine. So, if nothing breaks, this will go upstream with next merge window via the s390 tree.
Thanks again for your work!