public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
To: Alistair Francis <alistair23@gmail.com>
Cc: GNU C Library <libc-alpha@sourceware.org>
Subject: Re: [PATCH 5/7] linux: Use waitid on wait4 if __NR_wait4 is not defined
Date: Mon, 25 Nov 2019 12:39:00 -0000	[thread overview]
Message-ID: <21e43b69-28a4-2d38-1faa-a4432f3cf255@linaro.org> (raw)
In-Reply-To: <CAKmqyKNOk_EPAo5Cr=2qUyVwEEGnRXRXwEm4oGVXUPd==NJ5mw@mail.gmail.com>



On 22/11/2019 17:00, Alistair Francis wrote:
> On Fri, Nov 22, 2019 at 4:15 AM Adhemerval Zanella
> <adhemerval.zanella@linaro.org> wrote:
>>
>>
>>
>> On 21/11/2019 15:41, Alistair Francis wrote:
>>> On Thu, Nov 21, 2019 at 9:53 AM Adhemerval Zanella
>>> <adhemerval.zanella@linaro.org> wrote:
>>>>
>>>>
>>>>
>>>> On 14/11/2019 11:47, Adhemerval Zanella wrote:
>>>>> +pid_t
>>>>> +__wait4 (pid_t pid, int *stat_loc, int options, struct rusage *usage)
>>>>> +{
>>>>> +#if __NR_wait4
>>>>> +   return SYSCALL_CANCEL (wait4, pid, stat_loc, options, usage);
>>>>> +#elif defined (__ASSUME_WAITID_PID0_P_PGID)
>>>> [...]
>>>>> +# else
>>>>> +/* Linux waitid prior kernel 5.4 does not support waiting for the current
>>>>> +   process.  It would be possible to emulate it by calling getpgid for pid 0,
>>>>> +   however, it would require an additional syscall and it is inherent racy:
>>>>> +   after the current process group is received and before it is passed
>>>>> +   to waitid a signal could arrive causing the current process group to
>>>>> +   change.  */
>>>>> +# error "The kernel ABI does not provide a way to implement wait4"
>>>>> +#endif
>>>>
>>>> So the only design here that I am not sure is if the best one is to trigger
>>>> a build error to avoid an architecture to not define __NR_wait4 and also
>>>> support kernels older than 5.4 (which would not define
>>>> __ASSUME_WAITID_PID0_P_PGID), or if it should do as generic implementation
>>>> and return ENOSYS along with a stub.
>>>>
>>>> Thoughts?
>>>
>>> I think a build error makes sense. Currently only RV32 doesn't have
>>> __NR_wait4 (which isn't upstreamed) so you aren't breaking anything.
>>>
>>> The only kernels that could possibly not have __NR_wait4 and be less
>>> then 5.4 are 5.1, 5.2 and 5.3, non of which are stable so they will
>>> slowly disappear anyway.
>>>
>>> Not producing a build error could be very confusing for developers
>>> that do get bitten by the missing implementation.
>>>
>>
>> My point if if checking for kernel version to define __ASSUME_WAITID_PID0_P_PGID
>> does make, meaning it is possible with some config option in the kernel
>> to enable only waitid for kernels older than 5.3; or if we can assume
>> some configuration in always invalid and thus the kernel won't allow
>> enable it.
>>
>> If the latter we can then remove the __ASSUME_WAITID_PID0_P_PGID and
>> add a comment on waitid implementation stating that if waitid is the
>> only syscall supported then it is suppose to be the superset of all
>> wait* functionalities.
> 
> I think I understand what you are saying.
> 
> It is NOT the case that if waitid is the only syscall supported then
> it is a superset of all wait* functions.
> 
> For RV32 the 5.1, 5.2 and 5.3 only support waitid but do not support
> the PID0 P_PGID functionality. In these three kernel cases the call
> will fail.
> 

If it is the case (and it does seems linux support RV32 for kernel older
than v5.4), we will need to make the 5.4 the minimum supported kernel for
RV32 and any other architecture that only support waitid syscall.

The kernel check can be done at the configure level, but it does not
help on some kernel configuration for a architecture that explicit 
try to remove olds syscall to mimic the generic user API (not sure if
this is possible with current kernel configuration flags).

So it seems that __ASSUME_WAITID_PID0_P_PGID should be a safe call to
avoid such theoretical scenarios.  I will rework how the flag is used
to mimic other assume usage where newer kernel version undef the flag,
so it should be simpler to remove it once the minimum kernel is lifted.

  reply	other threads:[~2019-11-25 12:39 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-14 14:47 [PATCH 1/7] Remove __waitpid_nocancel Adhemerval Zanella
2019-11-14 14:47 ` [PATCH 4/7] Implement wait in terms of waitpid Adhemerval Zanella
2019-11-14 14:47 ` [PATCH 2/7] nptl: Move wait implementation to libc Adhemerval Zanella
2019-11-14 14:47 ` [PATCH 3/7] nptl: Move waitpid " Adhemerval Zanella
2019-11-14 14:47 ` [PATCH 6/7] Implement waitpid in terms of wait4 Adhemerval Zanella
2019-11-14 14:47 ` [PATCH 7/7] Consolidate wait3 implementations Adhemerval Zanella
2019-11-14 15:44   ` Alistair Francis
2019-12-19 15:33     ` Adhemerval Zanella
2019-11-14 14:47 ` [PATCH 5/7] linux: Use waitid on wait4 if __NR_wait4 is not defined Adhemerval Zanella
2019-11-15 18:27   ` Alistair Francis
2019-11-21 17:48     ` Adhemerval Zanella
2019-11-21 17:53   ` Adhemerval Zanella
2019-11-21 18:47     ` Alistair Francis
2019-11-22 12:15       ` Adhemerval Zanella
2019-11-22 20:01         ` Alistair Francis
2019-11-25 12:39           ` Adhemerval Zanella [this message]
2019-11-25 12:42             ` Adhemerval Zanella
2019-12-03 19:04               ` Alistair Francis
2019-12-03 19:18                 ` 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=21e43b69-28a4-2d38-1faa-a4432f3cf255@linaro.org \
    --to=adhemerval.zanella@linaro.org \
    --cc=alistair23@gmail.com \
    --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).