This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] s390: optimize syscall function
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: Martin Schwidefsky <schwidefsky at de dot ibm dot com>
- Cc: Christian Borntraeger <borntraeger at de dot ibm dot com>, Stefan Liebler <stli at linux dot vnet dot ibm dot com>, Andreas Krebbel <krebbel at linux dot vnet dot ibm dot com>, libc-alpha at sourceware dot org
- Date: Tue, 13 Jun 2017 11:31:09 -0300
- Subject: Re: [PATCH] s390: optimize syscall function
- Authentication-results: sourceware.org; auth=none
- References: <1497007747-191015-1-git-send-email-borntraeger@de.ibm.com> <20170612074958.71090d0f@mschwideX1> <fe60b8c0-7105-0c9a-f62e-0e5540308d31@linaro.org> <20170612155505.07fcc961@mschwideX1>
On 12/06/2017 10:55, Martin Schwidefsky wrote:
> On Mon, 12 Jun 2017 09:04:36 -0300
> Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote:
>
>> On 12/06/2017 02:49, Martin Schwidefsky wrote:
>>> On Fri, 9 Jun 2017 13:29:07 +0200
>>> Christian Borntraeger <borntraeger@de.ibm.com> wrote:
>>>
>>>> Since kernel 2.6.0 all Linux version accept the system call number
>>>> in register 1 for svc 0. There is no need to have special handling
>>>> that uses EX for system calls < 256. This will simplify and speed
>>>> up that code.
>>>>
>>>> A microbenchmark doing "syscall(__NR_getpid);" in a loops gets faster
>>>> by ~12%.
>>>>
>>>> * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: Simplify
>>>> code by always using SVC 0 instead of EX.
>>>> * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: Likewise.
>>>>
>>>> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
>>>> ---
>>>> sysdeps/unix/sysv/linux/s390/s390-32/syscall.S | 12 +++---------
>>>> sysdeps/unix/sysv/linux/s390/s390-64/syscall.S | 12 +++---------
>>>> 2 files changed, 6 insertions(+), 18 deletions(-)
>>>
>>> NAK. E.g. this from glibc:
>>>
>>> sysdeps/unix/sysv/linux/s390/s390-64:
>>>
>>> ENTRY (syscall)
>>> ...
>>> basr %r8,0
>>> 0: clg %r1,4f-0b(%r8) /* svc number < 256? */
>>> jl 2f
>>> 1: svc 0
>>> j 3f
>>> 2: ex %r1,1b-0b(%r8) /* lsb of R1 is subsituted as SVC number */
>>> 3: lg %r15,0(%r15) /* load back chain */
>>> cfi_adjust_cfa_offset (-160)
>>> lmg %r6,15,48(%r15) /* Load registers. */
>>> ...
>>>
>>> And there are old version of glibc where NR_syscalls was < 256 that
>>> exclusively used the SVC instruction with the system call number
>>> encoded in the instruction itself.
>>>
>>
>> I am not following the NAK, is the 'svc' way not really allowed for current
>> minimum kernel supported for s390 (3.2) or is the 'svc' method not really the
>> fastest one for such syscalls?
>
> I claim lack of coffee after the long weekend ..
>
> Yes, with version 3.2 as the minimum kernel level for using a glibc with
> the prosed patch everything should be fine. The support for system calls
> larger than 256 has been added with 2.5.68.
Thanks, since it should be ok we can also cleanup the {INLINE,INTERNAL}_SYSCALL
macros in s390x sysdep.h as well.