From: Rich Felker <dalias@libc.org>
To: Alistair Francis <alistair23@gmail.com>
Cc: Christian Brauner <christian@brauner.io>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Arnd Bergmann <arnd@arndb.de>,
Linus Torvalds <torvalds@linux-foundation.org>,
Alistair Francis <alistair.francis@wdc.com>,
GNU C Library <libc-alpha@sourceware.org>,
Adhemerval Zanella <adhemerval.zanella@linaro.org>,
Florian Weimer <fweimer@redhat.com>,
Palmer Dabbelt <palmer@sifive.com>,
macro@wdc.com, Zong Li <zongbox@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
Al Viro <viro@zeniv.linux.org.uk>,
"H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [RFC v3 03/23] sysdeps/wait: Use waitid if avaliable
Date: Tue, 13 Aug 2019 23:12:00 -0000 [thread overview]
Message-ID: <20190813231153.GG9017@brightrain.aerifal.cx> (raw)
In-Reply-To: <CAKmqyKMJPQAOKn11xepzAwXOd4e9dU0Cyz=A0T-uMEgUp5yJjA@mail.gmail.com>
On Tue, Aug 13, 2019 at 03:22:02PM -0700, Alistair Francis wrote:
> On Thu, Jul 25, 2019 at 10:30 AM Christian Brauner <christian@brauner.io> wrote:
> >
> > On July 25, 2019 7:14:05 PM GMT+02:00, ebiederm@xmission.com wrote:
> > >Arnd Bergmann <arnd@arndb.de> writes:
> > >
> > >> On Thu, Jul 25, 2019 at 6:40 AM Rich Felker <dalias@libc.org> wrote:
> > >>> On Wed, Jul 24, 2019 at 05:04:53PM -0700, Alistair Francis wrote:
> > >>> > On Tue, Jul 23, 2019 at 1:45 AM Arnd Bergmann <arnd@arndb.de>
> > >wrote:
> > >>> > >
> > >>> > > Sounds good to me, the debate over what rusage to use should not
> > >hold
> > >>> > > up the review of the rest of that syscall.
> > >>> >
> > >>> > I'm unclear what the final decision is here. What is the solution
> > >are
> > >>> > we going to have wait4() or add P_PROCESS_PGID to waitid()?
> > >>> >
> > >>> > As well as that what is the solution to current implementations?
> > >If we
> > >>> > add wait4() then there isn't an issue (and I can drop this patch)
> > >but
> > >>> > if we add P_PROCESS_PGID then we will need a way to handle kernels
> > >>> > with waitid() but no P_PROCESS_PGID. Although my new plan is to
> > >only
> > >>> > use the waitid syscall if we don't have waitpid or wait4 so it
> > >seems
> > >>> > like this will only affect RV32 for the time being.
> > >>>
> > >>> I would really like some indication which solution will be taken,
> > >>> since it impacts choices that will need to be made in musl very
> > >soon.
> > >>> My favorite outcome would be bringing back wait4 for rv32 (and
> > >>> no-time32 archs in general) *and* adding P_PROCESS_PGID. In the
> > >short
> > >>> term, just using wait4 would be the simplest and cleanest for us
> > >(same
> > >>> as all other archs, no extra case to deal with), but in the long
> > >term
> > >>> there may be value in having rusage that can represent more than 68
> > >>> cpu-years spent by a process (seems plausible with large numbers of
> > >>> cores).
> > >>
> > >> Based on the feedback from Linus and Eric, the most likely outcome
> > >> at the moment seems to be an extension of waitid() to allow
> > >> P_PGID with id=0 like BSD does, and not bring back wait4() or
> > >> add P_PROCESS_PGID.
> > >>
> > >> So far, I don't think anyone has proposed an actual kernel patch.
> > >> I was hoping that Eric would do it, but I could also send it if he's
> > >> otherwise busy.
> > >
> > >So here is what I am looking at. It still needs to be tested
> > >and the description needs to be improved so that it properly credits
> > >everyone. However I think I have the major stroeks correct.
> > >
> > >From: "Eric W. Biederman" <ebiederm@xmission.com>
> > >Date: Tue, 23 Jul 2019 07:44:46 -0500
> > >Subject: [PATCH] waitid: Add support for waiting for the current
> > >process group
> > >
> > >It was recently discovered that the linux version of waitid is not a
> > >superset of the other wait functions because it does not include
> > >support for waiting for the current process group. This has two
> > >downsides. An extra system call is needed to get the current process
> > >group, and a signal could come in between the system call that
> > >retrieved the process gorup and the call to waitid that changes the
> > >current process group.
> > >
> > >Allow userspace to avoid both of those issues by defining
> > >idtype == P_PGID and id == 0 to mean wait for the caller's process
> > >group at the time of the call.
> > >
> > >Arguments can be made for using a different choice of idtype and id
> > >for this case but the BSDs already use this P_PGID and 0 to indicate
> > >waiting for the current process's process group. So be nice to user
> > >space programmers and don't introduce an unnecessary incompatibility.
> > >
> > >Some people have noted that the posix description is that
> > >waitpid will wait for the current process group, and that in
> > >the presence of pthreads that process group can change. To get
> > >clarity on this issue I looked at XNU, FreeBSD, and Luminos. All of
> > >those flavors of unix waited for the current process group at the
> > >time of call and as written could not adapt to the process group
> > >changing after the call.
> > >
> > >At one point Linux did adapt to the current process group changing but
> > >that stopped in 161550d74c07 ("pid: sys_wait... fixes"). It has been
> > >over 11 years since Linux has that behavior, no programs that fail
> > >with the change in behavior have been reported, and I could not
> > >find any other unix that does this. So I think it is safe to clarify
> > >the definition of current process group, to current process group
> > >at the time of the wait function.
> > >
> > >Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
> > >---
> > > kernel/exit.c | 6 ++++--
> > > 1 file changed, 4 insertions(+), 2 deletions(-)
> > >
> > >diff --git a/kernel/exit.c b/kernel/exit.c
> > >index a75b6a7f458a..3d86930f035e 100644
> > >--- a/kernel/exit.c
> > >+++ b/kernel/exit.c
> > >@@ -1577,14 +1577,16 @@ static long kernel_waitid(int which, pid_t
> > >upid, struct waitid_info *infop,
> > > break;
> > > case P_PGID:
> > > type = PIDTYPE_PGID;
> > >- if (upid <= 0)
> > >+ if (upid < 0)
> > > return -EINVAL;
> > >+ if (upid == 0)
> > >+ pid = get_pid(task_pgrp(current));
> > > break;
> > > default:
> > > return -EINVAL;
> > > }
> > >
> > >- if (type < PIDTYPE_MAX)
> > >+ if ((type < PIDTYPE_MAX) && !pid)
> > > pid = find_get_pid(upid);
> > >
> > > wo.wo_type = type;
> >
> > Eric, mind if I send this out alongside the P_PIDFD patchset and put in a test for it?
>
> Was this ever sent?
It's not upstream. Would be really nice to get this fixed in 5.3 so
that RV32 will not be missing functionality...
Rich
next prev parent reply other threads:[~2019-08-13 23:12 UTC|newest]
Thread overview: 127+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-17 0:11 [RFC v3 00/23] RISC-V glibc port for the 32-bit Alistair Francis
2019-07-17 0:11 ` [RFC v3 03/23] sysdeps/wait: Use waitid if avaliable Alistair Francis
2019-07-17 5:31 ` Florian Weimer
2019-07-19 17:52 ` Alistair Francis
2019-07-22 15:58 ` Florian Weimer
2019-07-22 21:06 ` Alistair Francis
2019-07-21 4:03 ` Rich Felker
2019-07-21 4:20 ` Rich Felker
2019-07-21 11:59 ` Eric W. Biederman
2019-07-21 23:00 ` Rich Felker
2019-07-21 7:57 ` Arnd Bergmann
2019-07-21 12:15 ` Eric W. Biederman
2019-07-21 12:28 ` Christian Brauner
2019-07-21 14:31 ` Arnd Bergmann
2019-07-21 15:45 ` Eric W. Biederman
2019-07-21 17:06 ` Arnd Bergmann
2019-07-21 17:22 ` Linus Torvalds
2019-07-21 21:40 ` Eric W. Biederman
2019-07-21 23:24 ` Rich Felker
2019-07-23 0:01 ` Eric W. Biederman
2019-07-23 8:12 ` Arnd Bergmann
2019-07-23 8:29 ` Christian Brauner
2019-07-23 8:45 ` Arnd Bergmann
2019-07-25 0:08 ` Alistair Francis
2019-07-25 4:40 ` Rich Felker
2019-07-25 13:23 ` Arnd Bergmann
2019-07-25 16:06 ` Christian Brauner
2019-07-25 17:14 ` Eric W. Biederman
2019-07-25 17:30 ` Christian Brauner
2019-08-13 22:25 ` Alistair Francis
2019-08-13 23:12 ` Rich Felker [this message]
2019-08-14 5:07 ` Christian Brauner
2019-08-14 11:40 ` [PATCH v1 0/1] waitid: process group enhancement christian.brauner
2019-08-14 11:40 ` [PATCH v1 1/1] waitid: Add support for waiting for the current process group christian.brauner
2019-08-14 12:29 ` Oleg Nesterov
2019-08-14 12:46 ` Christian Brauner
2019-08-14 12:50 ` Oleg Nesterov
2019-08-14 12:53 ` Christian Brauner
2019-08-14 13:10 ` [PATCH v2 0/1] waitid: process group enhancement Christian Brauner
2019-08-14 13:10 ` [PATCH v2 1/1] waitid: Add support for waiting for the current process group Christian Brauner
2019-08-14 14:20 ` Oleg Nesterov
2019-08-14 14:35 ` Christian Brauner
2019-08-14 15:27 ` Oleg Nesterov
2019-08-14 15:30 ` Christian Brauner
2019-08-14 15:46 ` [PATCH v3 0/1] waitid: process group enhancement Christian Brauner
2019-08-14 15:46 ` [PATCH v3 1/1] waitid: Add support for waiting for the current process group Christian Brauner
2019-08-14 16:09 ` Oleg Nesterov
2019-08-14 16:15 ` Christian Brauner
2019-08-14 16:34 ` Christian Brauner
2019-08-14 16:55 ` Rich Felker
2019-08-14 17:02 ` Christian Brauner
2019-08-14 17:06 ` Linus Torvalds
2019-08-14 18:00 ` Rich Felker
2019-08-14 20:50 ` Christian Brauner
2019-08-14 15:58 ` [PATCH v3 0/1] waitid: process group enhancement Rich Felker
2019-08-14 16:13 ` Christian Brauner
2019-07-26 23:39 ` [RFC v3 03/23] sysdeps/wait: Use waitid if avaliable Alistair Francis
2019-07-17 0:11 ` [RFC v3 08/23] RISC-V: define __NR_futex as __NR_futex_time64 for 32-bit Alistair Francis
2019-07-17 0:11 ` [RFC v3 04/23] sysdeps/clock_gettime: Use clock_gettime64 if avaliable Alistair Francis
2019-07-17 5:39 ` Florian Weimer
2019-07-17 8:04 ` Arnd Bergmann
2019-07-17 8:44 ` Florian Weimer
2019-07-17 9:10 ` Arnd Bergmann
2019-07-17 15:16 ` Florian Weimer
2019-07-18 7:39 ` Arnd Bergmann
2019-07-18 8:19 ` Florian Weimer
2019-07-18 9:15 ` Arnd Bergmann
2019-07-18 18:10 ` Adhemerval Zanella
2019-07-19 21:06 ` Alistair Francis
2019-07-17 7:03 ` Andreas Schwab
2019-07-17 12:37 ` Lukasz Majewski
2019-07-17 0:11 ` [RFC v3 02/23] sysdeps/gettimeofday: " Alistair Francis
2019-07-17 7:09 ` Florian Weimer
2019-07-20 3:21 ` Rich Felker
2019-07-25 20:54 ` Joseph Myers
2019-07-17 12:43 ` Lukasz Majewski
2019-07-17 12:48 ` Lukasz Majewski
2019-07-19 22:29 ` Alistair Francis
2019-07-17 0:11 ` [RFC v3 01/23] sysdeps/nanosleep: Use clock_nanosleep_time64 " Alistair Francis
2019-07-17 5:16 ` Florian Weimer
2019-07-19 17:29 ` Alistair Francis
2019-07-20 14:24 ` Stepan Golosunov
2019-07-22 21:17 ` Alistair Francis
2019-07-17 0:12 ` [RFC v3 16/23] RISC-V: The ABI implementation for the 32-bit Alistair Francis
2019-07-17 0:12 ` [RFC v3 22/23] Add RISC-V 32-bit target to build-many-glibcs.py Alistair Francis
2019-07-17 0:12 ` [RFC v3 18/23] RISC-V: Regenerate ULPs of RISC-V Alistair Francis
2019-07-17 0:12 ` [RFC v3 06/23] Documentation for the RISC-V 32-bit port Alistair Francis
2019-07-17 0:12 ` [RFC v3 15/23] RISC-V: Add path of library directories for the 32-bit Alistair Francis
2019-07-17 12:20 ` Florian Weimer
2019-07-17 0:12 ` [RFC v3 11/23] RISC-V: define __vdso_clock_getres as __vdso_clock_getres_time64 for 32-bit Alistair Francis
2019-07-17 0:12 ` [RFC v3 14/23] RISC-V: Support dynamic loader for the 32-bit Alistair Francis
2019-07-17 0:12 ` [RFC v3 13/23] RISC-V: Use 64-bit timespec in clock_gettime vdso calls Alistair Francis
2019-07-17 8:14 ` Arnd Bergmann
2019-07-17 0:12 ` [RFC v3 21/23] RISC-V: Fix llrint and llround missing exceptions on RV32 Alistair Francis
2019-07-17 12:22 ` Florian Weimer
2019-07-17 22:35 ` Alistair Francis
2019-07-17 0:12 ` [RFC v3 05/23] sysdeps/timespec_get: Use clock_gettime64 if avaliable Alistair Francis
2019-07-17 5:08 ` Florian Weimer
2019-07-17 7:59 ` Arnd Bergmann
2019-07-17 8:12 ` Florian Weimer
2019-07-17 8:23 ` Arnd Bergmann
2019-07-17 8:41 ` Florian Weimer
2019-07-17 8:54 ` Arnd Bergmann
2019-07-25 20:14 ` Joseph Myers
2019-07-17 12:23 ` Lukasz Majewski
2019-07-17 0:12 ` [RFC v3 12/23] RISC-V: define __vdso_clock_gettime as __vdso_clock_gettime64 for 32-bit Alistair Francis
2019-07-17 8:16 ` Arnd Bergmann
2019-07-19 17:19 ` Alistair Francis
2019-07-17 0:12 ` [RFC v3 10/23] RISC-V: define __NR_clock_getres as __NR_*_time64 " Alistair Francis
2019-07-17 0:12 ` [RFC v3 19/23] RISC-V: Add ABI lists Alistair Francis
2019-07-17 0:12 ` [RFC v3 23/23] RISC-V: Use 64-bit vdso syscalls Alistair Francis
2019-07-17 5:33 ` Florian Weimer
2019-07-17 8:02 ` Arnd Bergmann
2019-07-17 22:27 ` Alistair Francis
2019-07-17 23:46 ` Alistair Francis
2019-07-18 0:05 ` Alistair Francis
2019-07-17 0:12 ` [RFC v3 09/23] RISC-V: define __NR_* as __NR_*_time64/64 for 32-bit Alistair Francis
2019-07-17 0:12 ` [RFC v3 07/23] RISC-V: Use 64-bit time_t and off_t for RV32 and RV64 Alistair Francis
2019-07-17 8:27 ` Arnd Bergmann
2019-07-17 22:43 ` Alistair Francis
2019-07-18 7:41 ` Arnd Bergmann
2019-07-18 17:36 ` Alistair Francis
2019-07-19 6:44 ` Arnd Bergmann
2019-07-19 17:06 ` Alistair Francis
2019-07-17 0:12 ` [RFC v3 17/23] RISC-V: Hard float support for the 32 bit Alistair Francis
2019-07-17 0:12 ` [RFC v3 20/23] RISC-V: Build Infastructure for the 32-bit Alistair Francis
2019-07-19 17:18 ` [RFC v3 00/23] RISC-V glibc port " Alistair Francis
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=20190813231153.GG9017@brightrain.aerifal.cx \
--to=dalias@libc.org \
--cc=adhemerval.zanella@linaro.org \
--cc=akpm@linux-foundation.org \
--cc=alistair.francis@wdc.com \
--cc=alistair23@gmail.com \
--cc=arnd@arndb.de \
--cc=christian@brauner.io \
--cc=ebiederm@xmission.com \
--cc=fweimer@redhat.com \
--cc=hpa@zytor.com \
--cc=libc-alpha@sourceware.org \
--cc=macro@wdc.com \
--cc=palmer@sifive.com \
--cc=torvalds@linux-foundation.org \
--cc=viro@zeniv.linux.org.uk \
--cc=zongbox@gmail.com \
/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).