Message ID | 1497007747-191015-1-git-send-email-borntraeger@de.ibm.com |
---|---|
State | New, archived |
Headers |
Received: (qmail 45207 invoked by alias); 9 Jun 2017 11:29:28 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: <libc-alpha.sourceware.org> List-Unsubscribe: <mailto:libc-alpha-unsubscribe-##L=##H@sourceware.org> List-Subscribe: <mailto:libc-alpha-subscribe@sourceware.org> List-Archive: <http://sourceware.org/ml/libc-alpha/> List-Post: <mailto:libc-alpha@sourceware.org> List-Help: <mailto:libc-alpha-help@sourceware.org>, <http://sourceware.org/ml/#faqs> Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 45148 invoked by uid 89); 9 Jun 2017 11:29:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-27.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy=1.7.1 X-HELO: mx0a-001b2d01.pphosted.com From: Christian Borntraeger <borntraeger@de.ibm.com> To: Stefan Liebler <stli@linux.vnet.ibm.com>, Andreas Krebbel <krebbel@linux.vnet.ibm.com> Cc: libc-alpha@sourceware.org, Martin Schwidefsky <schwidefsky@de.ibm.com>, Christian Borntraeger <borntraeger@de.ibm.com> Subject: [PATCH] s390: optimize syscall function Date: Fri, 9 Jun 2017 13:29:07 +0200 X-TM-AS-GCONF: 00 x-cbid: 17060911-0040-0000-0000-000003C6130A X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17060911-0041-0000-0000-0000205E29F7 Message-Id: <1497007747-191015-1-git-send-email-borntraeger@de.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:, , definitions=2017-06-09_06:, , signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1703280000 definitions=main-1706090204 |
Commit Message
Christian Borntraeger
June 9, 2017, 11:29 a.m. UTC
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(-)
Comments
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.
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?
On Mon, Jun 12, 2017 at 1:49 AM, Martin Schwidefsky <schwidefsky@de.ibm.com> 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: Uh, I believe Christian was proposing to change the exact code you are quoting. Did you think he was proposing to remove backward compatibility for EX from the kernel-side syscall path? zw
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.
On Mon, 12 Jun 2017 08:06:36 -0400 Zack Weinberg <zackw@panix.com> wrote: > On Mon, Jun 12, 2017 at 1:49 AM, Martin Schwidefsky > <schwidefsky@de.ibm.com> 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: > > Uh, I believe Christian was proposing to change the exact code you are > quoting. Did you think he was proposing to remove backward > compatibility for EX from the kernel-side syscall path? Indeed, I was thinking too much about the kernel side of things.
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.
On Tue, 13 Jun 2017 11:31:09 -0300 Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > 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. How so? If you have a fixed system call number smaller than 256 the best option is to encode the system call number in the instruction. Loading the number to %r1 and then doing SVC-0 requires an additional instruction, no?
> On 13 Jun 2017, at 13:01, Martin Schwidefsky <schwidefsky@de.ibm.com> wrote: > > On Tue, 13 Jun 2017 11:31:09 -0300 > Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > >>> 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. > > How so? If you have a fixed system call number smaller than 256 the best option > is to encode the system call number in the instruction. Loading the number to > %r1 and then doing SVC-0 requires an additional instruction, no? Indeed, I had the wrong assumption the syscall.S method was used in sysdep.h.
On 06/12/2017 03:57 PM, Martin Schwidefsky wrote: > On Mon, 12 Jun 2017 08:06:36 -0400 > Zack Weinberg <zackw@panix.com> wrote: > >> On Mon, Jun 12, 2017 at 1:49 AM, Martin Schwidefsky >> <schwidefsky@de.ibm.com> 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: >> >> Uh, I believe Christian was proposing to change the exact code you are >> quoting. Did you think he was proposing to remove backward >> compatibility for EX from the kernel-side syscall path? Exactly, this is a glibc patch :-) The mimimum kernel version for glibc is high enough, so that the kernel will always understand svc 0, which allows us to get rid of ex in glibc for svc. > > Indeed, I was thinking too much about the kernel side of things.
On 06/19/2017 09:03 AM, Christian Borntraeger wrote: > On 06/12/2017 03:57 PM, Martin Schwidefsky wrote: >> On Mon, 12 Jun 2017 08:06:36 -0400 >> Zack Weinberg <zackw@panix.com> wrote: >> >>> On Mon, Jun 12, 2017 at 1:49 AM, Martin Schwidefsky >>> <schwidefsky@de.ibm.com> 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: >>> >>> Uh, I believe Christian was proposing to change the exact code you are >>> quoting. Did you think he was proposing to remove backward >>> compatibility for EX from the kernel-side syscall path? > > Exactly, this is a glibc patch :-) > The mimimum kernel version for glibc is high enough, so that the kernel > will always understand svc 0, which allows us to get rid of ex in glibc > for svc. > > > >> >> Indeed, I was thinking too much about the kernel side of things. > > > This patch is okay. Committed. Thanks. Stefan
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S index 8506db1..0fa08cd 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S +++ b/sysdeps/unix/sysv/linux/s390/s390-32/syscall.S @@ -49,19 +49,13 @@ ENTRY (syscall) l %r6,192(%r15) /* fifth parameter */ l %r7,196(%r15) /* sixth parameter */ - basr %r8,0 -0: cl %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: l %r15,0(%r15) /* load back chain */ + svc 0 + l %r15,0(%r15) /* load back chain. */ cfi_adjust_cfa_offset (-96) - lm %r6,15,24(%r15) /* load registers */ + lm %r6,%r15,24(%r15) /* load registers. */ lhi %r0,-4095 clr %r2,%r0 /* check R2 for error */ jnl SYSCALL_ERROR_LABEL br %r14 /* return to caller */ -4: .long 256 PSEUDO_END (syscall) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S b/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S index 24c47cb..466f27a 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S +++ b/sysdeps/unix/sysv/linux/s390/s390-64/syscall.S @@ -49,20 +49,14 @@ ENTRY (syscall) lg %r6,320(%r15) /* Fifth parameter. */ lg %r7,328(%r15) /* Sixth parameter. */ - 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 */ + svc 0 + lg %r15,0(%r15) /* load back chain. */ cfi_adjust_cfa_offset (-160) - lmg %r6,15,48(%r15) /* Load registers. */ + lmg %r6,%r15,48(%r15) /* Load registers. */ lghi %r0,-4095 clgr %r2,%r0 /* Check R2 for error. */ jgnl SYSCALL_ERROR_LABEL br %r14 /* Return to caller. */ -4: .quad 256 PSEUDO_END (syscall)