public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: libc-alpha@sourceware.org
Subject: Re: [PATCH v3 18/21] nptl: s390: Fix Race conditions in pthread cancellation (BZ#12683)
Date: Thu, 17 Oct 2019 19:46:00 -0000	[thread overview]
Message-ID: <804f0e52-eff1-e05a-f882-bd60f7651cd7@linaro.org> (raw)
In-Reply-To: <87f789d0-0ad6-d6a8-4377-966c66165051@linux.ibm.com>



On 17/10/2019 12:00, Stefan Liebler wrote:
> On 10/17/19 3:53 PM, Adhemerval Zanella wrote:
>>
>>
>> On 16/10/2019 12:46, Stefan Liebler wrote:
>>> Hi Adhemerval,
>>>
>>> I've added some notes below to the s390-64 file, but the same applies also for s390-32. I've also attached a diff.
>>>
>>> I've also recognized that a call starting from e.g. write () involves various shuffling of the argument registers at each level:
>>> write (ARGS in r2-r4)
>>> -> __syscall_cancel (r2=nr, ARGS in r3-r6 and two stack-slots)
>>> --> __syscall_cancel_arch (r2=*ch, r3=nr, ARGS in r4-r6 and three stack-slots)
>>> ---> "syscall-instruction" (ARGS in r2-r7)
>>>
>>> Just as a quick idea (I don't know if there are other limitations), those shuffling instructions could perhaps be omitted if the nr / ch arguments of the __syscall_cancel / __syscall_cancel_arch functions would be the last arguments instead of the first ones.
>>> I assume that also other archs could benefit from such an ordering.
>>
>> Thanks, I have applied your changes.  Indeed for some architectures the
>> syscall_cancel.S might not be the most optimized one, I used the reference
>> C implementation as base and gcc might not generate the best code in some
>> cases.
>>
> The implementation in syscall_cancel.S contains just one of the three parts of the mentioned register move instructions. Those needs also to be generated in write() and __syscall_cancel().
> My point was, if we could preserve the values passed in registers to e.g. write() in the same registers until the syscall is invoked in __syscall_cancel_arch, we won't need to move them from registers to registers at all:
> write (ARGS in r2-r4)
> -> __syscall_cancel (ARGS in r2-r6 and first stack-slot, nr in second stack-slot)
> --> __syscall_cacnel_arch (ARGS in r2-r6 and first stack-slot, nr in second stack-slot, ch in third stack-slot)
> ---> "syscall-instruction" (ARGS in r2-r7)

Well I think it might be feasible, so for instance write would call:

ssize_t _libc_write (int fd, const void *buf, size_t nbytes)
\_ __syscall_cancel (fd, buf, nbytes, 0, 0, 0, __NR_write)
   \_ __syscall_cancel_arch (fd, buf, nbytes, 0, 0, 0, __NR_write, &pd->cancellation)
      ...

I don't have a strong opinion here, I would expect that since the
cancellation points are potentially blocking syscall both the
latency of the syscall itself and the potentially unbounded time
spent in kernel might shadow any potentially micro-optimization in
argument shuffling. 

Also, this patch has the advantage of removing the atomic operation
from __pthread_{enable,disable}_asynccancel, which for some 
architectures are way costly than register shuffling or spilling.


  reply	other threads:[~2019-10-17 19:46 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-14 20:57 [PATCH v3 00/21] nptl: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 10/21] nptl: powerpc: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 17/21] nptl: riscv: " Adhemerval Zanella
2019-10-14 23:22   ` Andrew Waterman
2019-10-14 20:57 ` [PATCH v3 18/21] nptl: s390: " Adhemerval Zanella
2019-10-16 15:46   ` Stefan Liebler
2019-10-17 13:54     ` Adhemerval Zanella
2019-10-17 15:01       ` Stefan Liebler
2019-10-17 19:46         ` Adhemerval Zanella [this message]
2019-10-18 12:58           ` Stefan Liebler
2019-10-14 20:57 ` [PATCH v3 01/21] nptl: Handle EPIPE on tst-cancel2 Adhemerval Zanella
2019-10-15  9:03   ` Florian Weimer
2019-10-14 20:57 ` [PATCH v3 11/21] nptl: microblaze: Fix Race conditions in pthread cancellation (BZ#12683) Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 06/21] nptl: mips: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 14/21] nptl: m68k: " Adhemerval Zanella
2019-10-14 21:13   ` Andreas Schwab
2019-10-14 20:57 ` [PATCH v3 16/21] nptl: sh: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 05/21] nptl: ia64: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 08/21] nptl: aarch64: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 20/21] nptl: csky: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 12/21] nptl: sparc: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 07/21] nptl: i386: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 03/21] nptl: x86_64: " Adhemerval Zanella
2019-10-15 11:03   ` Florian Weimer
2019-10-16 21:22     ` Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 09/21] nptl: arm: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 02/21] nptl: " Adhemerval Zanella
2019-10-15 10:56   ` Florian Weimer
2019-10-16 20:42     ` Adhemerval Zanella
2019-10-18 12:38   ` Internal SIGTIMER use (was: Re: [PATCH v3 02/21] nptl: Fix Race conditions in pthread cancellation (BZ#12683)) Florian Weimer
2019-10-21 13:29     ` Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 19/21] nptl: nios2: Fix Race conditions in pthread cancellation (BZ#12683) Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 04/21] nptl: x32: " Adhemerval Zanella
2019-10-15 11:06   ` Florian Weimer
2019-10-14 20:57 ` [PATCH v3 13/21] nptl: hppa: " Adhemerval Zanella
2019-10-14 20:57 ` [PATCH v3 15/21] nptl: alpha: " Adhemerval Zanella
2019-10-17  3:01   ` Matt Turner
2019-10-14 20:58 ` [PATCH v3 21/21] Remove sysdep-cancel header Adhemerval Zanella

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=804f0e52-eff1-e05a-f882-bd60f7651cd7@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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 read-only IMAP folder(s) and NNTP newsgroup(s).