linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [GIT PULL] pidfd updates for v5.3
@ 2019-07-08 13:54 Christian Brauner
  2019-07-11  5:30 ` pr-tracker-bot
  0 siblings, 1 reply; 2+ messages in thread
From: Christian Brauner @ 2019-07-08 13:54 UTC (permalink / raw)
  To: torvalds; +Cc: joel, linux-kernel, kernel-team

Hi Linus,

This pull request adds support for pidfd polling and the pidfd_open()
syscall to support retrieving pidfds for processes created without
CLONE_PIDFD.

The following changes since commit a188339ca5a396acc588e5851ed7e19f66b0ebd9:

  Linux 5.2-rc1 (2019-05-19 15:47:09 -0700)

are available in the Git repository at:

  git@gitolite.kernel.org:pub/scm/linux/kernel/git/brauner/linux tags/pidfd-updates-v5.3

for you to fetch changes up to 172bb24a4f480c180bee646f6616f714ac4bcab2:

  tests: add pidfd_open() tests (2019-06-28 12:17:55 +0200)

/* Summary */
With this tag come two main features.

First, it adds polling support for pidfds. This allows process managers to
know when a (non-parent) process dies in a race-free way. The nofitication
mechanism used follows the same logic that is currently used when the
parent of a task is notified of a child's death.
With this patchset it is possible to put pidfds in an {e}poll loop and get
reliable notifications for process (i.e. thread-group) exit.

The second feature compliments the first one by making it possible to
retrieve pollable pidfds for processes that were not created using
CLONE_PIDFD.
A lot of processes get created with traditional PID-based calls such as
fork() or clone() (without CLONE_PIDFD). For these processes a caller can
currently not create a pollable pidfd. This is a problem for Android's low
memory killer (LMK) and service managers such as systemd.

Both patchsets are accompanied by selftests.

/* Testing */
All patches are based on v5.2-rc1 and have been sitting in linux-next since
then and have not caused any failures or warnings.

/* Conflicts with v5.2 */
A test-merge of my tree into pristine v5.2 revealed conflicts in the
following two files:
- tools/testing/selftests/pidfd/Makefile
- tools/testing/selftests/pidfd/pidfd_test.c
Fwiw, both conflicts should be trivially resolveable by just accepting all
changes introduced by this tag but I am also happy to provide a
fixed-up/rebased tree.

Note, following Al's changes in
6fd2fe494b17 (" copy_process(): don't use ksys_close() on cleanups")
the function pidfd_create() that pidfd_open() relied on got removed. I
fixed this up *without* rebasing in-tree to not break linux-next and
minimize merge conflicts with other branches. I hope that was ok to do
(The original branch does still exist at [2] for comparison.).

/* Conflicts with other trees */
Based on linux-next, I am only aware of a single trivial conflict with
Andrew's tree where a change to switch struct pid to use refcount_t
has included a new header.

/* Syscall number 434 */
pidfd_open() uses syscall number 434. I'm not aware of any other syscall
targeted for 5.3 that has chosen the same number.
The syscall required no arch-specific massaging and has hence been added to
all architectures at the same time.

/* Adoption in userspace */
Good news is that the work done so far and the work done in this branch for
pidfd_open() and polling support do already see some adoption:
- Android is in the process of backporting this work to all their LTS
  kernels (cf. [3]).
- Service managers make use of pidfd_send_signal but will need to wait
  until we enable waiting on pidfds for full adoption.
- And projects I maintain make use of both pidfd_send_signal and
  CLONE_PIDFD (cf. [4]) and will use polling support and pidfd_open() too.

/* New signing subkey */
So that there are no suprises, please note that I signed-off the tag with a
new signing key: 0x91C61BC06578DCA2
It's an ed25519 signing subkey that I moved to a Nitrokey and that's
available from the new, safer keys.openpgp.org keyserver.
Given the SKS churn I figured it might be a good idea to use a new,
dedicated kernel-only subkey instead of my general signing subkey.

Please consider pulling these changes from the signed pidfd-updates-v5.3 tag.

Thanks!
Christian

[1]: 6fd2fe494b17bf2dec37b610d23a43a72b16923a
[2]: https://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux.git/log/?h=pidfd_open
[3]: https://android-review.googlesource.com/q/topic:%22pidfd+polling+support+4.9+backport%22
     https://android-review.googlesource.com/q/topic:%22pidfd+polling+support+4.14+backport%22
     https://android-review.googlesource.com/q/topic:%22pidfd+polling+support+4.19+backport%22
[4]: https://github.com/lxc/lxc/blob/aab6e3eb73c343231cdde775db938994fc6f2803/src/lxc/start.c#L1753

----------------------------------------------------------------
pidfd-updates-v5.3

----------------------------------------------------------------
Christian Brauner (3):
      pid: add pidfd_open()
      arch: wire-up pidfd_open()
      tests: add pidfd_open() tests

Joel Fernandes (Google) (2):
      pidfd: add polling support
      pidfd: add polling selftests

 arch/alpha/kernel/syscalls/syscall.tbl          |   1 +
 arch/arm/tools/syscall.tbl                      |   1 +
 arch/arm64/include/asm/unistd.h                 |   2 +-
 arch/arm64/include/asm/unistd32.h               |   2 +
 arch/ia64/kernel/syscalls/syscall.tbl           |   1 +
 arch/m68k/kernel/syscalls/syscall.tbl           |   1 +
 arch/microblaze/kernel/syscalls/syscall.tbl     |   1 +
 arch/mips/kernel/syscalls/syscall_n32.tbl       |   1 +
 arch/mips/kernel/syscalls/syscall_n64.tbl       |   1 +
 arch/mips/kernel/syscalls/syscall_o32.tbl       |   1 +
 arch/parisc/kernel/syscalls/syscall.tbl         |   1 +
 arch/powerpc/kernel/syscalls/syscall.tbl        |   1 +
 arch/s390/kernel/syscalls/syscall.tbl           |   1 +
 arch/sh/kernel/syscalls/syscall.tbl             |   1 +
 arch/sparc/kernel/syscalls/syscall.tbl          |   1 +
 arch/x86/entry/syscalls/syscall_32.tbl          |   1 +
 arch/x86/entry/syscalls/syscall_64.tbl          |   1 +
 arch/xtensa/kernel/syscalls/syscall.tbl         |   1 +
 include/linux/pid.h                             |   3 +
 include/linux/syscalls.h                        |   1 +
 include/uapi/asm-generic/unistd.h               |   4 +-
 kernel/fork.c                                   |  26 +++
 kernel/pid.c                                    |  71 +++++++
 kernel/signal.c                                 |  11 ++
 tools/testing/selftests/pidfd/.gitignore        |   1 +
 tools/testing/selftests/pidfd/Makefile          |   5 +-
 tools/testing/selftests/pidfd/pidfd.h           |  57 ++++++
 tools/testing/selftests/pidfd/pidfd_open_test.c | 169 ++++++++++++++++
 tools/testing/selftests/pidfd/pidfd_test.c      | 252 ++++++++++++++++++++----
 29 files changed, 576 insertions(+), 44 deletions(-)
 create mode 100644 tools/testing/selftests/pidfd/pidfd.h
 create mode 100644 tools/testing/selftests/pidfd/pidfd_open_test.c

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

* Re: [GIT PULL] pidfd updates for v5.3
  2019-07-08 13:54 [GIT PULL] pidfd updates for v5.3 Christian Brauner
@ 2019-07-11  5:30 ` pr-tracker-bot
  0 siblings, 0 replies; 2+ messages in thread
From: pr-tracker-bot @ 2019-07-11  5:30 UTC (permalink / raw)
  To: Christian Brauner; +Cc: torvalds, joel, linux-kernel, kernel-team

The pull request you sent on Mon,  8 Jul 2019 15:54:23 +0200:

> git@gitolite.kernel.org:pub/scm/linux/kernel/git/brauner/linux tags/pidfd-updates-v5.3

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/5450e8a316a64cddcbc15f90733ebc78aa736545

Thank you!

-- 
Deet-doot-dot, I am a bot.
https://korg.wiki.kernel.org/userdoc/prtracker

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

end of thread, other threads:[~2019-07-11  5:30 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-08 13:54 [GIT PULL] pidfd updates for v5.3 Christian Brauner
2019-07-11  5:30 ` pr-tracker-bot

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 NNTP newsgroup(s).