Recently added memfd_secret() syscall had a flags parameter passed as unsigned long, which requires creation of compat entry for it. It was possible to change the type of flags to unsigned int and so avoid bothering with compat layer. https://www.spinics.net/lists/linux-mm/msg251550.html Documentation/process/adding-syscalls.rst doesn't point clearly about preference of ABI-agnostic types. This patch adds such notification. Signed-off-by: Yury Norov <yury.norov@xxxxxxxxx> --- Documentation/process/adding-syscalls.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Documentation/process/adding-syscalls.rst b/Documentation/process/adding-syscalls.rst index 9af35f4ec728..46add16edf14 100644 --- a/Documentation/process/adding-syscalls.rst +++ b/Documentation/process/adding-syscalls.rst @@ -172,6 +172,13 @@ arguments (i.e. parameter 1, 3, 5), to allow use of contiguous pairs of 32-bit registers. (This concern does not apply if the arguments are part of a structure that's passed in by pointer.) +Whenever possible, try to use ABI-agnostic types for passing parameters to +a syscall in order to avoid creating compat entry for it. Linux supports two +ABI models - ILP32 and LP64. The types like ``void *``, ``long``, ``size_t``, +``off_t`` have different size in those ABIs; types like ``char`` and ``int`` +have the same size and don't require a compat layer support. For flags, it's +always better to use ``unsigned int``. + Proposing the API ----------------- -- 2.25.1