All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: extending wait4(2) or waitid(2) linux syscall
       [not found]   ` <CAK8P3a0Gsqa8WTbALOUchRyEA7E2f3P1f=XQ8nD2xQaemfPpcQ@mail.gmail.com>
@ 2018-11-15 15:30     ` Dmitry V. Levin
  2018-11-15 15:37       ` hpa
                         ` (3 more replies)
  0 siblings, 4 replies; 20+ messages in thread
From: Dmitry V. Levin @ 2018-11-15 15:30 UTC (permalink / raw)
  To: Arnd Bergmann; +Cc: Albert ARIBAUD, H. Peter Anvin, GNU C Library, linux-api

[-- Attachment #1: Type: text/plain, Size: 2682 bytes --]

On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
> On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
> > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
[...]
> > > https://sourceware.org/glibc/wiki/Y2038ProofnessDesign?rev=146
> > Is there any rationale for marking wait4 as an obsolete API?
> 
> In the *kernel* syscall API, wait4(2) is obsoleted by waitid(2), which is
> a strict superset of its functionality.
> 
> In the libc API, this is different, as wait4() does not have a replacement
> that is exposed to user space directly. I expect glibc to implement
> wait4() on top of the kernel's waitid().
> 
> There has not been a final decision on which variant of waitid() that would
> be. The easiest option would be to not change it at all: new architectures
> (rv32, csky, nanomips/p32, ...) would keep exposing the traditional
> waitid() in Linux, with its 32-bit time_t based rusage structure, but drop the
> wait4(). glibc then has to convert between the kernel's rusage and the
> user space rusage indefinitely.
> 
> Alternatively, we can create a new version like waitid2() that uses
> 64-bit time_t in some form, either the exact same rusage that we
> use on 64-bit architectures and x32, or using a new set of arguments
> to include further improvements.

In strace, we have two use cases that require an extended version
of wait4(2) or waitid(2) syscall.  From your response I understand that
you'd recommend extending waitid(2) rather than wait4(2), is it correct?

These two use cases were mentioned in my talk yesterday at LPC 2018,
here is a brief summary.

1. strace needs a race-free invocation of wait4(2) or waitid(2)
with a different signal mask, this cannot be achieved without
an extended version of syscall, similar to pselect6(2) extension
over select(2) and ppoll(2) extension over poll(2).

Signal mask specification in linux requires two parameters:
"const sigset_t *sigmask" and "size_t sigsetsize".
Creating pwait6(2) as an extension of wait4(2) with two arguments
is straightforward.
Creating pwaitid(2) as an extension of waitid(2) that already has 5
arguments would require an indirection similar to pselect6(2).

2. The time precision provided by struct rusage returned by wait4(2) and
waitid(2) is too low for syscall time counting (strace -c) nowadays, this
can be observing by running in a row a simple command like "strace -c pwd".

The fix is to return a more appropriate structure than struct rusage
by the new pwait6(2)/pwaitid(2) syscall mentioned above, where
struct timeval is replaced with struct timespec or even struct timespec64.


-- 
ldv

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 801 bytes --]

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-15 15:30     ` extending wait4(2) or waitid(2) linux syscall Dmitry V. Levin
@ 2018-11-15 15:37       ` hpa
  2018-11-16  7:14         ` Arnd Bergmann
  2018-11-16  7:12       ` Arnd Bergmann
                         ` (2 subsequent siblings)
  3 siblings, 1 reply; 20+ messages in thread
From: hpa @ 2018-11-15 15:37 UTC (permalink / raw)
  To: Dmitry V. Levin, Arnd Bergmann; +Cc: Albert ARIBAUD, GNU C Library, linux-api

On November 15, 2018 7:30:11 AM PST, "Dmitry V. Levin" <ldv@altlinux.org> wrote:
>On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
>> On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
>> > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
>[...]
>> > > https://sourceware.org/glibc/wiki/Y2038ProofnessDesign?rev=146
>> > Is there any rationale for marking wait4 as an obsolete API?
>> 
>> In the *kernel* syscall API, wait4(2) is obsoleted by waitid(2),
>which is
>> a strict superset of its functionality.
>> 
>> In the libc API, this is different, as wait4() does not have a
>replacement
>> that is exposed to user space directly. I expect glibc to implement
>> wait4() on top of the kernel's waitid().
>> 
>> There has not been a final decision on which variant of waitid() that
>would
>> be. The easiest option would be to not change it at all: new
>architectures
>> (rv32, csky, nanomips/p32, ...) would keep exposing the traditional
>> waitid() in Linux, with its 32-bit time_t based rusage structure, but
>drop the
>> wait4(). glibc then has to convert between the kernel's rusage and
>the
>> user space rusage indefinitely.
>> 
>> Alternatively, we can create a new version like waitid2() that uses
>> 64-bit time_t in some form, either the exact same rusage that we
>> use on 64-bit architectures and x32, or using a new set of arguments
>> to include further improvements.
>
>In strace, we have two use cases that require an extended version
>of wait4(2) or waitid(2) syscall.  From your response I understand that
>you'd recommend extending waitid(2) rather than wait4(2), is it
>correct?
>
>These two use cases were mentioned in my talk yesterday at LPC 2018,
>here is a brief summary.
>
>1. strace needs a race-free invocation of wait4(2) or waitid(2)
>with a different signal mask, this cannot be achieved without
>an extended version of syscall, similar to pselect6(2) extension
>over select(2) and ppoll(2) extension over poll(2).
>
>Signal mask specification in linux requires two parameters:
>"const sigset_t *sigmask" and "size_t sigsetsize".
>Creating pwait6(2) as an extension of wait4(2) with two arguments
>is straightforward.
>Creating pwaitid(2) as an extension of waitid(2) that already has 5
>arguments would require an indirection similar to pselect6(2).
>
>2. The time precision provided by struct rusage returned by wait4(2)
>and
>waitid(2) is too low for syscall time counting (strace -c) nowadays,
>this
>can be observing by running in a row a simple command like "strace -c
>pwd".
>
>The fix is to return a more appropriate structure than struct rusage
>by the new pwait6(2)/pwaitid(2) syscall mentioned above, where
>struct timeval is replaced with struct timespec or even struct
>timespec64.

Arnd: w.r.t. our previous discussion, this would seem to justify going to timespec(64) for these kind of cases.
-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-15 15:30     ` extending wait4(2) or waitid(2) linux syscall Dmitry V. Levin
  2018-11-15 15:37       ` hpa
@ 2018-11-16  7:12       ` Arnd Bergmann
  2018-11-16 12:42       ` Dave Martin
  2018-11-17  1:50       ` Arnd Bergmann
  3 siblings, 0 replies; 20+ messages in thread
From: Arnd Bergmann @ 2018-11-16  7:12 UTC (permalink / raw)
  To: Dmitry V. Levin; +Cc: Albert ARIBAUD, H. Peter Anvin, GNU C Library, Linux API

On Thu, Nov 15, 2018 at 7:30 AM Dmitry V. Levin <ldv@altlinux.org> wrote:
>
> On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
> > On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
> > > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
> [...]
> > > > https://sourceware.org/glibc/wiki/Y2038ProofnessDesign?rev=146
> > > Is there any rationale for marking wait4 as an obsolete API?
> >
> > In the *kernel* syscall API, wait4(2) is obsoleted by waitid(2), which is
> > a strict superset of its functionality.
> >
> > In the libc API, this is different, as wait4() does not have a replacement
> > that is exposed to user space directly. I expect glibc to implement
> > wait4() on top of the kernel's waitid().
> >
> > There has not been a final decision on which variant of waitid() that would
> > be. The easiest option would be to not change it at all: new architectures
> > (rv32, csky, nanomips/p32, ...) would keep exposing the traditional
> > waitid() in Linux, with its 32-bit time_t based rusage structure, but drop the
> > wait4(). glibc then has to convert between the kernel's rusage and the
> > user space rusage indefinitely.
> >
> > Alternatively, we can create a new version like waitid2() that uses
> > 64-bit time_t in some form, either the exact same rusage that we
> > use on 64-bit architectures and x32, or using a new set of arguments
> > to include further improvements.
>
> In strace, we have two use cases that require an extended version
> of wait4(2) or waitid(2) syscall.  From your response I understand that
> you'd recommend extending waitid(2) rather than wait4(2), is it correct?

Correct. It's already a superset, so a new waitid2(2) or wait5(2) should be
an extension of waitid(2) in order to provide backwards compatibility to the
other ones (along with wait() and waitpid()).

> These two use cases were mentioned in my talk yesterday at LPC 2018,
> here is a brief summary.
>
> 1. strace needs a race-free invocation of wait4(2) or waitid(2)
> with a different signal mask, this cannot be achieved without
> an extended version of syscall, similar to pselect6(2) extension
> over select(2) and ppoll(2) extension over poll(2).
>
> Signal mask specification in linux requires two parameters:
> "const sigset_t *sigmask" and "size_t sigsetsize".
> Creating pwait6(2) as an extension of wait4(2) with two arguments
> is straightforward.
> Creating pwaitid(2) as an extension of waitid(2) that already has 5
> arguments would require an indirection similar to pselect6(2).

Right, that indirection is not ideal, but I suspect it's better
than the alternatives.

> 2. The time precision provided by struct rusage returned by wait4(2) and
> waitid(2) is too low for syscall time counting (strace -c) nowadays, this
> can be observing by running in a row a simple command like "strace -c pwd".
>
> The fix is to return a more appropriate structure than struct rusage
> by the new pwait6(2)/pwaitid(2) syscall mentioned above, where
> struct timeval is replaced with struct timespec or even struct timespec64.

It definitely has to be a 64-bit based structure, the question is which one.
My preferred solution would be to interpret the timestamps as 'struct
__kernel_timespec', which has a 64-bit seconds and 64-bit nanoseconds.
I'd also use a structure that is the same between 32-bit and 64-bit
kernels here, using '__s64' members instead of '__kernel_long_t' or 'long'
for the rest. It is then up to the C library to convert it into whichever
structure they want to expose to user space for the normal wait4().

        Arnd

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-15 15:37       ` hpa
@ 2018-11-16  7:14         ` Arnd Bergmann
  2018-11-16 10:26           ` Florian Weimer
                             ` (2 more replies)
  0 siblings, 3 replies; 20+ messages in thread
From: Arnd Bergmann @ 2018-11-16  7:14 UTC (permalink / raw)
  To: H. Peter Anvin; +Cc: Dmitry V. Levin, Albert ARIBAUD, GNU C Library, Linux API

On Thu, Nov 15, 2018 at 7:38 AM <hpa@zytor.com> wrote:
> On November 15, 2018 7:30:11 AM PST, "Dmitry V. Levin" <ldv@altlinux.org> wrote:
> >On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
> >> On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
> >> > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:

> >2. The time precision provided by struct rusage returned by wait4(2)
> >and waitid(2) is too low for syscall time counting (strace -c) nowadays,
> >this can be observing by running in a row a simple command like "strace -c
> >pwd".
> >
> >The fix is to return a more appropriate structure than struct rusage
> >by the new pwait6(2)/pwaitid(2) syscall mentioned above, where
> >struct timeval is replaced with struct timespec or even struct
> >timespec64.
>
> Arnd: w.r.t. our previous discussion, this would seem to justify going to timespec(64) for these kind of cases.

Ok, and I assume we want the same layout for getrusage(2) then, right?

        Arnd

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-16  7:14         ` Arnd Bergmann
@ 2018-11-16 10:26           ` Florian Weimer
  2018-11-16 15:17             ` Arnd Bergmann
  2018-11-16 18:46           ` hpa
  2018-11-16 18:48           ` hpa
  2 siblings, 1 reply; 20+ messages in thread
From: Florian Weimer @ 2018-11-16 10:26 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: H. Peter Anvin, Dmitry V. Levin, Albert ARIBAUD, GNU C Library,
	Linux API

* Arnd Bergmann:

> On Thu, Nov 15, 2018 at 7:38 AM <hpa@zytor.com> wrote:
>> On November 15, 2018 7:30:11 AM PST, "Dmitry V. Levin" <ldv@altlinux.org> wrote:
>> >On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
>> >> On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
>> >> > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
>
>> >2. The time precision provided by struct rusage returned by wait4(2)
>> >and waitid(2) is too low for syscall time counting (strace -c) nowadays,
>> >this can be observing by running in a row a simple command like "strace -c
>> >pwd".
>> >
>> >The fix is to return a more appropriate structure than struct rusage
>> >by the new pwait6(2)/pwaitid(2) syscall mentioned above, where
>> >struct timeval is replaced with struct timespec or even struct
>> >timespec64.
>>
>> Arnd: w.r.t. our previous discussion, this would seem to justify going to timespec(64) for these kind of cases.
>
> Ok, and I assume we want the same layout for getrusage(2) then, right?

Or introduce something that covers FreeBSD's wait6 functionality as well
(resource usage by subprocesses of the subprocess).

Thanks,
Florian

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-15 15:30     ` extending wait4(2) or waitid(2) linux syscall Dmitry V. Levin
  2018-11-15 15:37       ` hpa
  2018-11-16  7:12       ` Arnd Bergmann
@ 2018-11-16 12:42       ` Dave Martin
  2018-11-16 13:40         ` Florian Weimer
  2018-11-17  1:50       ` Arnd Bergmann
  3 siblings, 1 reply; 20+ messages in thread
From: Dave Martin @ 2018-11-16 12:42 UTC (permalink / raw)
  To: Dmitry V. Levin
  Cc: Arnd Bergmann, Albert ARIBAUD, H. Peter Anvin, GNU C Library, linux-api

On Thu, Nov 15, 2018 at 06:30:11PM +0300, Dmitry V. Levin wrote:
> On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
> > On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
> > > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
> [...]
> > > > https://sourceware.org/glibc/wiki/Y2038ProofnessDesign?rev=146
> > > Is there any rationale for marking wait4 as an obsolete API?
> > 
> > In the *kernel* syscall API, wait4(2) is obsoleted by waitid(2), which is
> > a strict superset of its functionality.
> > 
> > In the libc API, this is different, as wait4() does not have a replacement
> > that is exposed to user space directly. I expect glibc to implement
> > wait4() on top of the kernel's waitid().
> > 
> > There has not been a final decision on which variant of waitid() that would
> > be. The easiest option would be to not change it at all: new architectures
> > (rv32, csky, nanomips/p32, ...) would keep exposing the traditional
> > waitid() in Linux, with its 32-bit time_t based rusage structure, but drop the
> > wait4(). glibc then has to convert between the kernel's rusage and the
> > user space rusage indefinitely.
> > 
> > Alternatively, we can create a new version like waitid2() that uses
> > 64-bit time_t in some form, either the exact same rusage that we
> > use on 64-bit architectures and x32, or using a new set of arguments
> > to include further improvements.
> 
> In strace, we have two use cases that require an extended version
> of wait4(2) or waitid(2) syscall.  From your response I understand that
> you'd recommend extending waitid(2) rather than wait4(2), is it correct?
> 
> These two use cases were mentioned in my talk yesterday at LPC 2018,
> here is a brief summary.
> 
> 1. strace needs a race-free invocation of wait4(2) or waitid(2)
> with a different signal mask, this cannot be achieved without
> an extended version of syscall, similar to pselect6(2) extension
> over select(2) and ppoll(2) extension over poll(2).
> 
> Signal mask specification in linux requires two parameters:
> "const sigset_t *sigmask" and "size_t sigsetsize".
> Creating pwait6(2) as an extension of wait4(2) with two arguments
> is straightforward.
> Creating pwaitid(2) as an extension of waitid(2) that already has 5
> arguments would require an indirection similar to pselect6(2).
> 
> 2. The time precision provided by struct rusage returned by wait4(2) and
> waitid(2) is too low for syscall time counting (strace -c) nowadays, this
> can be observing by running in a row a simple command like "strace -c pwd".
> 
> The fix is to return a more appropriate structure than struct rusage
> by the new pwait6(2)/pwaitid(2) syscall mentioned above, where
> struct timeval is replaced with struct timespec or even struct timespec64.

I didn't attend LPC so apologies if I'm missing some background here,
but:

The traditional way would be install a handler for SIGCHLD and
do a sigsuspend()/pselect()/ppoll().  Then when the suspend() returns,
you pump the status of any children with wait*(..., WNOHANG).

Does that not work for you for some reason?

Adding more and more "wait for some stuff" syscalls for every possible
definition of "some stuff" is a slippery slope... IMHO we have way too
many of those already.


One way to improve struct rusage would be to add a new wait flag (say,
WFANCY_RUSAGE) to the existing wait calls to indicate use of a different
struct in place of struct rusage.  It's not clear to me why a brand new
syscall is essential, though obviously that's an option.

Cheers
---Dave

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-16 12:42       ` Dave Martin
@ 2018-11-16 13:40         ` Florian Weimer
  2018-11-16 14:26           ` Dave Martin
  0 siblings, 1 reply; 20+ messages in thread
From: Florian Weimer @ 2018-11-16 13:40 UTC (permalink / raw)
  To: Dave Martin
  Cc: Dmitry V. Levin, Arnd Bergmann, Albert ARIBAUD, H. Peter Anvin,
	GNU C Library, linux-api

* Dave Martin:

> The traditional way would be install a handler for SIGCHLD and
> do a sigsuspend()/pselect()/ppoll().  Then when the suspend() returns,
> you pump the status of any children with wait*(..., WNOHANG).
>
> Does that not work for you for some reason?

Changing signal handlers is not what a library should do because they
are process-global (not even thread-specific).

Thanks,
Florian

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-16 13:40         ` Florian Weimer
@ 2018-11-16 14:26           ` Dave Martin
  0 siblings, 0 replies; 20+ messages in thread
From: Dave Martin @ 2018-11-16 14:26 UTC (permalink / raw)
  To: Florian Weimer
  Cc: Dmitry V. Levin, Arnd Bergmann, Albert ARIBAUD, H. Peter Anvin,
	GNU C Library, linux-api

On Fri, Nov 16, 2018 at 02:40:49PM +0100, Florian Weimer wrote:
> * Dave Martin:
> 
> > The traditional way would be install a handler for SIGCHLD and
> > do a sigsuspend()/pselect()/ppoll().  Then when the suspend() returns,
> > you pump the status of any children with wait*(..., WNOHANG).
> >
> > Does that not work for you for some reason?
> 
> Changing signal handlers is not what a library should do because they
> are process-global (not even thread-specific).

True, though this is a problem with global resources too.
I guess I need to go and read the slides to understand the broader
context here.  (Is strace a library?)

Cheers
---Dave

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-16 10:26           ` Florian Weimer
@ 2018-11-16 15:17             ` Arnd Bergmann
  2018-11-16 16:03               ` Paul Eggert
  0 siblings, 1 reply; 20+ messages in thread
From: Arnd Bergmann @ 2018-11-16 15:17 UTC (permalink / raw)
  To: Florian Weimer
  Cc: H. Peter Anvin, Dmitry V. Levin, Albert ARIBAUD, GNU C Library,
	Linux API

On Fri, Nov 16, 2018 at 2:27 AM Florian Weimer <fweimer@redhat.com> wrote:
>
> * Arnd Bergmann:
>
> > On Thu, Nov 15, 2018 at 7:38 AM <hpa@zytor.com> wrote:
> >> On November 15, 2018 7:30:11 AM PST, "Dmitry V. Levin" <ldv@altlinux.org> wrote:
> >> >On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
> >> >> On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
> >> >> > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
> >
> >> >2. The time precision provided by struct rusage returned by wait4(2)
> >> >and waitid(2) is too low for syscall time counting (strace -c) nowadays,
> >> >this can be observing by running in a row a simple command like "strace -c
> >> >pwd".
> >> >
> >> >The fix is to return a more appropriate structure than struct rusage
> >> >by the new pwait6(2)/pwaitid(2) syscall mentioned above, where
> >> >struct timeval is replaced with struct timespec or even struct
> >> >timespec64.
> >>
> >> Arnd: w.r.t. our previous discussion, this would seem to justify going to timespec(64) for these kind of cases.
> >
> > Ok, and I assume we want the same layout for getrusage(2) then, right?
>
> Or introduce something that covers FreeBSD's wait6 functionality as well
> (resource usage by subprocesses of the subprocess).

Ok, so combining that with the request for a signal mask, we'd want
something like

int wait9(idtype_t idtype, id_t id, siginfo_t *infop, int options,
       /* waitid subset */
           int *status, struct rusage64 *self, struct rusage64
*children,  /* wait4, wait6, time64 */
           const sigset_t *sigmask, size_t sigsetsize);
       /* suggested by Dmitry */

which I think could over all use cases mentioned in this thread, but
already has nine arguments instead of the allowed six, so it can't
be the signature of the system call entry.

We can get that down to six arguments in the familiar ways:
- like Linux waitid, wait4-style status can be computed from infop
- like wait6, self and children can be in one pointer
- like io_pgetevents, sigmask and sigsetsize can be an indirect struct

int waitid6(idtype_t idtype, id_t id, siginfo_t *infop, int options,
          struct __wrusage64 *wrusage, struct __wait_sigset *sigset);

Alternatively, we could combine even more arguments into a single
structure if inputs, in various ways.

        Arnd

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-16 15:17             ` Arnd Bergmann
@ 2018-11-16 16:03               ` Paul Eggert
  0 siblings, 0 replies; 20+ messages in thread
From: Paul Eggert @ 2018-11-16 16:03 UTC (permalink / raw)
  To: Arnd Bergmann, Florian Weimer
  Cc: H. Peter Anvin, Dmitry V. Levin, Albert ARIBAUD, GNU C Library,
	Linux API

On 11/16/18 7:17 AM, Arnd Bergmann wrote:
> we'd want something like
>
> int wait9(...)

We're getting uncomfortably close to the Perlis limit.

"If you have a procedure with 10 parameters, you probably missed some."

Perlis AJ. Epigrams on programming. SIGPLAN Notices. 1982:17(9):7-13. 
https://dx.doi.org/10.1145/947955.1083808 
http://pu.inf.uni-tuebingen.de/users/klaeren/epigrams.html

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-16  7:14         ` Arnd Bergmann
  2018-11-16 10:26           ` Florian Weimer
@ 2018-11-16 18:46           ` hpa
  2018-11-16 18:48           ` hpa
  2 siblings, 0 replies; 20+ messages in thread
From: hpa @ 2018-11-16 18:46 UTC (permalink / raw)
  To: Arnd Bergmann; +Cc: Dmitry V. Levin, Albert ARIBAUD, GNU C Library, Linux API

On November 15, 2018 11:14:21 PM PST, Arnd Bergmann <arnd@arndb.de> wrote:
>On Thu, Nov 15, 2018 at 7:38 AM <hpa@zytor.com> wrote:
>> On November 15, 2018 7:30:11 AM PST, "Dmitry V. Levin"
><ldv@altlinux.org> wrote:
>> >On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
>> >> On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
>> >> > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
>
>> >2. The time precision provided by struct rusage returned by wait4(2)
>> >and waitid(2) is too low for syscall time counting (strace -c)
>nowadays,
>> >this can be observing by running in a row a simple command like
>"strace -c
>> >pwd".
>> >
>> >The fix is to return a more appropriate structure than struct rusage
>> >by the new pwait6(2)/pwaitid(2) syscall mentioned above, where
>> >struct timeval is replaced with struct timespec or even struct
>> >timespec64.
>>
>> Arnd: w.r.t. our previous discussion, this would seem to justify
>going to timespec(64) for these kind of cases.
>
>Ok, and I assume we want the same layout for getrusage(2) then, right?
>
>        Arnd

Right 
-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-16  7:14         ` Arnd Bergmann
  2018-11-16 10:26           ` Florian Weimer
  2018-11-16 18:46           ` hpa
@ 2018-11-16 18:48           ` hpa
  2 siblings, 0 replies; 20+ messages in thread
From: hpa @ 2018-11-16 18:48 UTC (permalink / raw)
  To: Arnd Bergmann; +Cc: Dmitry V. Levin, Albert ARIBAUD, GNU C Library, Linux API

On November 15, 2018 11:14:21 PM PST, Arnd Bergmann <arnd@arndb.de> wrote:
>On Thu, Nov 15, 2018 at 7:38 AM <hpa@zytor.com> wrote:
>> On November 15, 2018 7:30:11 AM PST, "Dmitry V. Levin"
><ldv@altlinux.org> wrote:
>> >On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
>> >> On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
>> >> > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
>
>> >2. The time precision provided by struct rusage returned by wait4(2)
>> >and waitid(2) is too low for syscall time counting (strace -c)
>nowadays,
>> >this can be observing by running in a row a simple command like
>"strace -c
>> >pwd".
>> >
>> >The fix is to return a more appropriate structure than struct rusage
>> >by the new pwait6(2)/pwaitid(2) syscall mentioned above, where
>> >struct timeval is replaced with struct timespec or even struct
>> >timespec64.
>>
>> Arnd: w.r.t. our previous discussion, this would seem to justify
>going to timespec(64) for these kind of cases.
>
>Ok, and I assume we want the same layout for getrusage(2) then, right?
>
>        Arnd

Note that now we have to add one system calls for 64-but platforms. Thus, the right way to do that is to add those new system calls (e.g. waitidns()), and *only* provide those for 32-bit Y2038.
-- 
Sent from my Android device with K-9 Mail. Please excuse my brevity.

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-15 15:30     ` extending wait4(2) or waitid(2) linux syscall Dmitry V. Levin
                         ` (2 preceding siblings ...)
  2018-11-16 12:42       ` Dave Martin
@ 2018-11-17  1:50       ` Arnd Bergmann
  2018-11-26 15:18         ` Florian Weimer
  3 siblings, 1 reply; 20+ messages in thread
From: Arnd Bergmann @ 2018-11-17  1:50 UTC (permalink / raw)
  To: Dmitry V. Levin; +Cc: Albert ARIBAUD, H. Peter Anvin, GNU C Library, Linux API

On Thu, Nov 15, 2018 at 7:30 AM Dmitry V. Levin <ldv@altlinux.org> wrote:
> On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
> > On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
> > > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
>
> 1. strace needs a race-free invocation of wait4(2) or waitid(2)
> with a different signal mask, this cannot be achieved without
> an extended version of syscall, similar to pselect6(2) extension
> over select(2) and ppoll(2) extension over poll(2).
>
> Signal mask specification in linux requires two parameters:
> "const sigset_t *sigmask" and "size_t sigsetsize".
> Creating pwait6(2) as an extension of wait4(2) with two arguments
> is straightforward.
> Creating pwaitid(2) as an extension of waitid(2) that already has 5
> arguments would require an indirection similar to pselect6(2).

Getting back to this point: you could also do the same thing with
the CLONE_FD approach from Josh Triplett[1] or Casey Dahlin's
older waitfd() syscall, correct?

Neither of them got merged, bu t we could revisit the ideas if they
make it easier to solve your problem by calling ppoll().

        Arnd

[1] https://lwn.net/Articles/638613/
[2] https://lore.kernel.org/lkml/49639EB8.40204@redhat.com/

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-17  1:50       ` Arnd Bergmann
@ 2018-11-26 15:18         ` Florian Weimer
  2018-11-26 17:15           ` Arnd Bergmann
  0 siblings, 1 reply; 20+ messages in thread
From: Florian Weimer @ 2018-11-26 15:18 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Dmitry V. Levin, Albert ARIBAUD, H. Peter Anvin, GNU C Library,
	Linux API

* Arnd Bergmann:

> On Thu, Nov 15, 2018 at 7:30 AM Dmitry V. Levin <ldv@altlinux.org> wrote:
>> On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
>> > On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
>> > > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
>>
>> 1. strace needs a race-free invocation of wait4(2) or waitid(2)
>> with a different signal mask, this cannot be achieved without
>> an extended version of syscall, similar to pselect6(2) extension
>> over select(2) and ppoll(2) extension over poll(2).
>>
>> Signal mask specification in linux requires two parameters:
>> "const sigset_t *sigmask" and "size_t sigsetsize".
>> Creating pwait6(2) as an extension of wait4(2) with two arguments
>> is straightforward.
>> Creating pwaitid(2) as an extension of waitid(2) that already has 5
>> arguments would require an indirection similar to pselect6(2).
>
> Getting back to this point: you could also do the same thing with
> the CLONE_FD approach from Josh Triplett[1] or Casey Dahlin's
> older waitfd() syscall, correct?

A descriptor-based solution would not be useful to glibc because
applications assume that glibc does not (persistently) open any file
descriptors behind t heir back.

Thanks,
Florian

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-26 15:18         ` Florian Weimer
@ 2018-11-26 17:15           ` Arnd Bergmann
  2018-11-26 17:27             ` Daniel Colascione
  2018-11-28  9:31             ` Florian Weimer
  0 siblings, 2 replies; 20+ messages in thread
From: Arnd Bergmann @ 2018-11-26 17:15 UTC (permalink / raw)
  To: Florian Weimer
  Cc: Dmitry V. Levin, Albert ARIBAUD, H. Peter Anvin, GNU C Library,
	Linux API

On Mon, Nov 26, 2018 at 4:18 PM Florian Weimer <fweimer@redhat.com> wrote:
>
> * Arnd Bergmann:
>
> > On Thu, Nov 15, 2018 at 7:30 AM Dmitry V. Levin <ldv@altlinux.org> wrote:
> >> On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
> >> > On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
> >> > > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
> >>
> >> 1. strace needs a race-free invocation of wait4(2) or waitid(2)
> >> with a different signal mask, this cannot be achieved without
> >> an extended version of syscall, similar to pselect6(2) extension
> >> over select(2) and ppoll(2) extension over poll(2).
> >>
> >> Signal mask specification in linux requires two parameters:
> >> "const sigset_t *sigmask" and "size_t sigsetsize".
> >> Creating pwait6(2) as an extension of wait4(2) with two arguments
> >> is straightforward.
> >> Creating pwaitid(2) as an extension of waitid(2) that already has 5
> >> arguments would require an indirection similar to pselect6(2).
> >
> > Getting back to this point: you could also do the same thing with
> > the CLONE_FD approach from Josh Triplett[1] or Casey Dahlin's
> > older waitfd() syscall, correct?
>
> A descriptor-based solution would not be useful to glibc because
> applications assume that glibc does not (persistently) open any file
> descriptors behind t heir back.

Right, makes sense. What about a temporary file descriptor as discussed
in the recent procfd() mail thread then? Would that work?

/* for illustration, needs error handling and more features */
int pwait(pid_t id, siginfo_t *infop)
{
      char waitfd_file[MAX_PROCFD_LEN];
      struct pollfd pfd[1] = { {.events = POLLIN }};

      snprintf(waitfd_file, MAX_PROCFD_LEN, "/proc/%d/wait", pid);
      pfd.fd = open(waitfd_file,  O_RDONLY);
      ppoll(&pfd, 1, NULL, sigmask);
      read(fd, infop, sizeof(*infop));
      close(fd);

     return 0;
}

       Arnd

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-26 17:15           ` Arnd Bergmann
@ 2018-11-26 17:27             ` Daniel Colascione
  2018-11-28  9:31             ` Florian Weimer
  1 sibling, 0 replies; 20+ messages in thread
From: Daniel Colascione @ 2018-11-26 17:27 UTC (permalink / raw)
  To: arnd; +Cc: Florian Weimer, ldv, albert.aribaud, hpa, GNU C Library, Linux API

On Mon, Nov 26, 2018 at 9:15 AM Arnd Bergmann <arnd@arndb.de> wrote:
>
> On Mon, Nov 26, 2018 at 4:18 PM Florian Weimer <fweimer@redhat.com> wrote:
> >
> > * Arnd Bergmann:
> >
> > > On Thu, Nov 15, 2018 at 7:30 AM Dmitry V. Levin <ldv@altlinux.org> wrote:
> > >> On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
> > >> > On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
> > >> > > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
> > >>
> > >> 1. strace needs a race-free invocation of wait4(2) or waitid(2)
> > >> with a different signal mask, this cannot be achieved without
> > >> an extended version of syscall, similar to pselect6(2) extension
> > >> over select(2) and ppoll(2) extension over poll(2).
> > >>
> > >> Signal mask specification in linux requires two parameters:
> > >> "const sigset_t *sigmask" and "size_t sigsetsize".
> > >> Creating pwait6(2) as an extension of wait4(2) with two arguments
> > >> is straightforward.
> > >> Creating pwaitid(2) as an extension of waitid(2) that already has 5
> > >> arguments would require an indirection similar to pselect6(2).
> > >
> > > Getting back to this point: you could also do the same thing with
> > > the CLONE_FD approach from Josh Triplett[1] or Casey Dahlin's
> > > older waitfd() syscall, correct?
> >
> > A descriptor-based solution would not be useful to glibc because
> > applications assume that glibc does not (persistently) open any file
> > descriptors behind t heir back.

*My* long-term goal is to expose all new process-related functionality
as operations on file descriptors. I really don't want to further
complicate the wait*(2) series of functions.

Whether the file descriptor is opened "persistently" or not is an
implementation detail. A multi-threaded program can observe the file
descriptor being open regardless. The right approach here is to
abandon this strange requirement that glibc not use file descriptors
for its own purposes. File descriptors are just kernel resource
handles, and it's not reasonable for applications to expect that the
libraries they use do not manage resources for their own purposes.
This self-imposed never-open-file-descriptors behavior on glibc's part
has created API design problems in the past (e.g., with the randomness
functions) and should be abandoned.

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-26 17:15           ` Arnd Bergmann
  2018-11-26 17:27             ` Daniel Colascione
@ 2018-11-28  9:31             ` Florian Weimer
  2018-11-28  9:36               ` Christian Brauner
  1 sibling, 1 reply; 20+ messages in thread
From: Florian Weimer @ 2018-11-28  9:31 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Dmitry V. Levin, Albert ARIBAUD, H. Peter Anvin, GNU C Library,
	Linux API

* Arnd Bergmann:

> On Mon, Nov 26, 2018 at 4:18 PM Florian Weimer <fweimer@redhat.com> wrote:
>>
>> * Arnd Bergmann:
>>
>> > On Thu, Nov 15, 2018 at 7:30 AM Dmitry V. Levin <ldv@altlinux.org> wrote:
>> >> On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
>> >> > On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
>> >> > > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD wrote:
>> >>
>> >> 1. strace needs a race-free invocation of wait4(2) or waitid(2)
>> >> with a different signal mask, this cannot be achieved without
>> >> an extended version of syscall, similar to pselect6(2) extension
>> >> over select(2) and ppoll(2) extension over poll(2).
>> >>
>> >> Signal mask specification in linux requires two parameters:
>> >> "const sigset_t *sigmask" and "size_t sigsetsize".
>> >> Creating pwait6(2) as an extension of wait4(2) with two arguments
>> >> is straightforward.
>> >> Creating pwaitid(2) as an extension of waitid(2) that already has 5
>> >> arguments would require an indirection similar to pselect6(2).
>> >
>> > Getting back to this point: you could also do the same thing with
>> > the CLONE_FD approach from Josh Triplett[1] or Casey Dahlin's
>> > older waitfd() syscall, correct?
>>
>> A descriptor-based solution would not be useful to glibc because
>> applications assume that glibc does not (persistently) open any file
>> descriptors behind t heir back.
>
> Right, makes sense. What about a temporary file descriptor as discussed
> in the recent procfd() mail thread then? Would that work?
>
> /* for illustration, needs error handling and more features */
> int pwait(pid_t id, siginfo_t *infop)
> {
>       char waitfd_file[MAX_PROCFD_LEN];
>       struct pollfd pfd[1] = { {.events = POLLIN }};
>
>       snprintf(waitfd_file, MAX_PROCFD_LEN, "/proc/%d/wait", pid);
>       pfd.fd = open(waitfd_file,  O_RDONLY);
>       ppoll(&pfd, 1, NULL, sigmask);
>       read(fd, infop, sizeof(*infop));
>       close(fd);
>
>      return 0;
> }

Together with an officiall supported way that allows us that the process
denoted by the PID is still the same that it was, it could work, I
think.

It would also nice to have the ability to launch processes without
making them visible to wait, and trigger SIGCHLD signals, but noticing
process exit seems like a tricky matter under these circumstances.

Thanks,
Florian

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-28  9:31             ` Florian Weimer
@ 2018-11-28  9:36               ` Christian Brauner
  2018-11-28  9:41                 ` Florian Weimer
  0 siblings, 1 reply; 20+ messages in thread
From: Christian Brauner @ 2018-11-28  9:36 UTC (permalink / raw)
  To: Florian Weimer, Arnd Bergmann
  Cc: Dmitry V. Levin, Albert ARIBAUD, H. Peter Anvin, GNU C Library,
	Linux API

On November 28, 2018 10:31:23 PM GMT+13:00, Florian Weimer <fweimer@redhat.com> wrote:
>* Arnd Bergmann:
>
>> On Mon, Nov 26, 2018 at 4:18 PM Florian Weimer <fweimer@redhat.com>
>wrote:
>>>
>>> * Arnd Bergmann:
>>>
>>> > On Thu, Nov 15, 2018 at 7:30 AM Dmitry V. Levin <ldv@altlinux.org>
>wrote:
>>> >> On Thu, Nov 15, 2018 at 06:39:03AM -0800, Arnd Bergmann wrote:
>>> >> > On Thu, Nov 15, 2018 at 6:05 AM Dmitry V. Levin wrote:
>>> >> > > On Thu, Apr 20, 2017 at 03:20:51PM +0200, Albert ARIBAUD
>wrote:
>>> >>
>>> >> 1. strace needs a race-free invocation of wait4(2) or waitid(2)
>>> >> with a different signal mask, this cannot be achieved without
>>> >> an extended version of syscall, similar to pselect6(2) extension
>>> >> over select(2) and ppoll(2) extension over poll(2).
>>> >>
>>> >> Signal mask specification in linux requires two parameters:
>>> >> "const sigset_t *sigmask" and "size_t sigsetsize".
>>> >> Creating pwait6(2) as an extension of wait4(2) with two arguments
>>> >> is straightforward.
>>> >> Creating pwaitid(2) as an extension of waitid(2) that already has
>5
>>> >> arguments would require an indirection similar to pselect6(2).
>>> >
>>> > Getting back to this point: you could also do the same thing with
>>> > the CLONE_FD approach from Josh Triplett[1] or Casey Dahlin's
>>> > older waitfd() syscall, correct?
>>>
>>> A descriptor-based solution would not be useful to glibc because
>>> applications assume that glibc does not (persistently) open any file
>>> descriptors behind t heir back.
>>
>> Right, makes sense. What about a temporary file descriptor as
>discussed
>> in the recent procfd() mail thread then? Would that work?

The intention has always been to start a
file descriptor process API off of that.
If we land my procfd_signal() patchset we are in good shape for procfd_wait(), imho.

>>
>> /* for illustration, needs error handling and more features */
>> int pwait(pid_t id, siginfo_t *infop)
>> {
>>       char waitfd_file[MAX_PROCFD_LEN];
>>       struct pollfd pfd[1] = { {.events = POLLIN }};
>>
>>       snprintf(waitfd_file, MAX_PROCFD_LEN, "/proc/%d/wait", pid);
>>       pfd.fd = open(waitfd_file,  O_RDONLY);
>>       ppoll(&pfd, 1, NULL, sigmask);
>>       read(fd, infop, sizeof(*infop));
>>       close(fd);
>>
>>      return 0;
>> }
>
>Together with an officiall supported way that allows us that the
>process
>denoted by the PID is still the same that it was, it could work, I
>think.
>
>It would also nice to have the ability to launch processes without
>making them visible to wait, and trigger SIGCHLD signals, but noticing
>process exit seems like a tricky matter under these circumstances.
>
>Thanks,
>Florian

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-28  9:36               ` Christian Brauner
@ 2018-11-28  9:41                 ` Florian Weimer
  2018-11-28 18:50                   ` Daniel Colascione
  0 siblings, 1 reply; 20+ messages in thread
From: Florian Weimer @ 2018-11-28  9:41 UTC (permalink / raw)
  To: Christian Brauner
  Cc: libc-alpha, Arnd Bergmann, Dmitry V. Levin, Albert ARIBAUD,
	H. Peter Anvin, Linux API

* Christian Brauner:

> The intention has always been to start a
> file descriptor process API off of that.
> If we land my procfd_signal() patchset we are in good shape for
> procfd_wait(), imho.

How does this interact with SIGCHLD and the wait system call (or any
wait function without an explicitly specified PID)?

I understand that I have somewhat conflicting requirements, but in terms
of relative priorities, launching a process without spurious signals and
wait notifications would probably offer the larger benefit.

Thanks,
Florian

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

* Re: extending wait4(2) or waitid(2) linux syscall
  2018-11-28  9:41                 ` Florian Weimer
@ 2018-11-28 18:50                   ` Daniel Colascione
  0 siblings, 0 replies; 20+ messages in thread
From: Daniel Colascione @ 2018-11-28 18:50 UTC (permalink / raw)
  To: Florian Weimer
  Cc: Christian Brauner, GNU C Library, Arnd Bergmann, Dmitry V. Levin,
	Albert ARIBAUD, H. Peter Anvin, Linux API

On Wed, Nov 28, 2018 at 1:41 AM, Florian Weimer <fweimer@redhat.com> wrote:
> * Christian Brauner:
>
>> The intention has always been to start a
>> file descriptor process API off of that.
>> If we land my procfd_signal() patchset we are in good shape for
>> procfd_wait(), imho.
>
> How does this interact with SIGCHLD and the wait system call (or any
> wait function without an explicitly specified PID)?

It doesn't, but let's take one step at a time. procfd_signal() is a
good first step. Once procfd_signal() and procfd_wait() exist, and
managing processes with FDs in general no longer seems odd, we can add
a clone() option that 1) avoid wiring a new subprocess up to the
legacy PID-based process-management API, and 2) returns one of these
fancy new FDs that works with procfd_signal and procfd_wait. (How we
do that without /proc mounted is an open question, but solvable in a
few options.)

> I understand that I have somewhat conflicting requirements, but in terms
> of relative priorities, launching a process without spurious signals and
> wait notifications would probably offer the larger benefit.

I also want a non-process-wide subprocess API. A clean FD-based API is
how you get it--- it's not an either-or situation. Considering that we
want to use FDs for general-purpose process management in the future,
it'd be not only a waste of time, but actually counterproductive, to
design a non-FD-based API for this non-process-wide sub-process use
case.

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

end of thread, other threads:[~2018-11-28 18:50 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20170420152051.568f2050.albert.aribaud@3adev.fr>
     [not found] ` <20181115140441.GA2171@altlinux.org>
     [not found]   ` <CAK8P3a0Gsqa8WTbALOUchRyEA7E2f3P1f=XQ8nD2xQaemfPpcQ@mail.gmail.com>
2018-11-15 15:30     ` extending wait4(2) or waitid(2) linux syscall Dmitry V. Levin
2018-11-15 15:37       ` hpa
2018-11-16  7:14         ` Arnd Bergmann
2018-11-16 10:26           ` Florian Weimer
2018-11-16 15:17             ` Arnd Bergmann
2018-11-16 16:03               ` Paul Eggert
2018-11-16 18:46           ` hpa
2018-11-16 18:48           ` hpa
2018-11-16  7:12       ` Arnd Bergmann
2018-11-16 12:42       ` Dave Martin
2018-11-16 13:40         ` Florian Weimer
2018-11-16 14:26           ` Dave Martin
2018-11-17  1:50       ` Arnd Bergmann
2018-11-26 15:18         ` Florian Weimer
2018-11-26 17:15           ` Arnd Bergmann
2018-11-26 17:27             ` Daniel Colascione
2018-11-28  9:31             ` Florian Weimer
2018-11-28  9:36               ` Christian Brauner
2018-11-28  9:41                 ` Florian Weimer
2018-11-28 18:50                   ` Daniel Colascione

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.