mailing list of musl libc
 help / color / mirror / code / Atom feed
* [musl] Linux powerpc new system call instruction and ABI
@ 2020-06-11  8:12 Nicholas Piggin
  2020-06-11  8:12 ` [musl] [PATCH 1/2] powerpc/64s/exception: treat NIA below __end_interrupts as soft-masked Nicholas Piggin
                   ` (3 more replies)
  0 siblings, 4 replies; 42+ messages in thread
From: Nicholas Piggin @ 2020-06-11  8:12 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: Nicholas Piggin, musl, libc-dev, linux-api

Thanks to everyone who has given feedback on the proposed new system
call instruction and ABI, I think it has reached agreement and the
implementation can be merged into Linux.

I have a hacked glibc implementation (that doesn't do all the right
HWCAP detection and misses a few things) that I've tested several things
including some kernel selftests (involving signals and syscalls) with.

System Call Vectored (scv) ABI
==============================

The scv instruction is introduced with POWER9 / ISA3, it comes with an
rfscv counter-part. The benefit of these instructions is performance
(trading slower SRR0/1 with faster LR/CTR registers, and entering the
kernel with MSR[EE] and MSR[RI] left enabled, which can reduce MSR 
updates. The scv instruction has 128 levels (not enough to cover the Linux
system call space).

Assignment and advertisement
----------------------------
The proposal is to assign scv levels conservatively, and advertise them
with HWCAP feature bits as we add support for more.

Linux has not enabled FSCR[SCV] yet, so executing the scv instruction will
cause the kernel to log a "SCV facility unavilable" message, and deliver a
SIGILL with ILL_ILLOPC to the process. Linux has defined a HWCAP2 bit
PPC_FEATURE2_SCV for SCV support, but does not set it.

This change allocates the zero level ('scv 0'), advertised with
PPC_FEATURE2_SCV, which will be used to provide normal Linux system
calls (equivalent to 'sc').

Attempting to execute scv with other levels will cause a SIGILL to be
delivered the same as before, but will not log a "SCV facility unavailable"
message (because the processor facility is enabled).

Calling convention
------------------
The proposal is for scv 0 to provide the standard Linux system call ABI 
with the following differences from sc convention[1]:

- lr is to be volatile across scv calls. This is necessary because the 
  scv instruction clobbers lr. From previous discussion, this should be 
  possible to deal with in GCC clobbers and CFI.

- cr1 and cr5-cr7 are volatile. This matches the C ABI and would allow the
  kernel system call exit to avoid restoring the volatile cr registers
  (although we probably still would anyway to avoid information leaks).

- Error handling: The consensus among kernel, glibc, and musl is to move to
  using negative return values in r3 rather than CR0[SO]=1 to indicate error,
  which matches most other architectures, and is closer to a function call.

Notes
-----
- r0,r4-r8 are documented as volatile in the ABI, but the kernel patch as
  submitted currently preserves them. This is to leave room for deciding
  which way to go with these. Some small benefit was found by preserving
  them[1] but I'm not convinced it's worth deviating from the C function
  call ABI just for this. Release code should follow the ABI.

Previous discussions:
https://lists.ozlabs.org/pipermail/linuxppc-dev/2020-April/208691.html
https://lists.ozlabs.org/pipermail/linuxppc-dev/2020-April/209268.html

[1] https://github.com/torvalds/linux/blob/master/Documentation/powerpc/syscall64-abi.rst
[2] https://lists.ozlabs.org/pipermail/linuxppc-dev/2020-April/209263.html

The following patches to add scv support to Linux are posted to

 https://lists.ozlabs.org/pipermail/linuxppc-dev/

Nicholas Piggin (2):
  powerpc/64s/exception: treat NIA below __end_interrupts as soft-masked
  powerpc/64s: system call support for scv/rfscv instructions

Thanks,
Nick

-- 
2.23.0


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

end of thread, other threads:[~2021-05-24 20:33 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-11  8:12 [musl] Linux powerpc new system call instruction and ABI Nicholas Piggin
2020-06-11  8:12 ` [musl] [PATCH 1/2] powerpc/64s/exception: treat NIA below __end_interrupts as soft-masked Nicholas Piggin
2020-07-24 13:25   ` [musl] " Michael Ellerman
2020-06-11  8:12 ` [musl] [PATCH 2/2] powerpc/64s: system call support for scv/rfscv instructions Nicholas Piggin
2020-07-23  6:47   ` [musl] " Michael Ellerman
2020-07-23 16:48     ` Christophe Leroy
2020-07-24 10:45       ` Michael Ellerman
2020-06-11 21:02 ` [musl] Re: Linux powerpc new system call instruction and ABI Segher Boessenkool
2020-06-14  9:26   ` Nicholas Piggin
2021-05-18 23:13 ` Dmitry V. Levin
2021-05-19  2:50   ` Nicholas Piggin
2021-05-19  5:01     ` Nicholas Piggin
2021-05-21 19:40       ` Matheus Castanho
2021-05-21 19:52         ` Florian Weimer
2021-05-21 20:00           ` Matheus Castanho
2021-05-21 20:52             ` Dmitry V. Levin
2021-05-24 12:11               ` Matheus Castanho
2021-05-24 20:33                 ` Matheus Castanho
2021-05-19 10:24     ` Dmitry V. Levin
2021-05-19 10:59       ` Nicholas Piggin
2021-05-19 12:39         ` Tulio Magno Quites Machado Filho
2021-05-19 13:26         ` Dmitry V. Levin
2021-05-19 22:51           ` Nicholas Piggin
2021-05-19 23:27             ` Dmitry V. Levin
2021-05-20  2:40               ` Nicholas Piggin
2021-05-20  3:06                 ` Dmitry V. Levin
2021-05-20  5:12                   ` Nicholas Piggin
2021-05-19  7:33   ` Joakim Tjernlund
2021-05-19  7:55     ` Nicholas Piggin
2021-05-19  8:08       ` Joakim Tjernlund
2021-05-19  8:42         ` Nicholas Piggin
2021-05-19 11:12           ` Nicholas Piggin
2021-05-19 14:38           ` Segher Boessenkool
2021-05-19 15:06             ` Joakim Tjernlund
2021-05-19 15:22               ` Segher Boessenkool
2021-05-19 15:36                 ` Rich Felker
2021-05-19 18:09                 ` Joakim Tjernlund
2021-05-19 23:48                   ` Rich Felker
2021-05-20  1:06                     ` Dmitry V. Levin
2021-05-20  2:45                       ` Nicholas Piggin
2021-05-20  2:59                         ` Dmitry V. Levin
2021-05-20  7:20                           ` Nicholas Piggin

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).