# git rev-parse -q --verify 4da9af0014b51c8b015ed8c622440ef28912efe6^{commit} 4da9af0014b51c8b015ed8c622440ef28912efe6 already have revision, skipping fetch # git checkout -q -f -B kisskb 4da9af0014b51c8b015ed8c622440ef28912efe6 # git clean -qxdf # < git log -1 # commit 4da9af0014b51c8b015ed8c622440ef28912efe6 # Merge: 612e7a4c1645 01361b665a26 # Author: Linus Torvalds # Date: Wed Oct 14 14:39:20 2020 -0700 # # Merge tag 'threads-v5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux # # Pull pidfd updates from Christian Brauner: # "This introduces a new extension to the pidfd_open() syscall. Users can # now raise the new PIDFD_NONBLOCK flag to support non-blocking pidfd # file descriptors. This has been requested for uses in async process # management libraries such as async-pidfd in Rust. # # Ever since the introduction of pidfds and more advanced async io # various programming languages such as Rust have grown support for # async event libraries. These libraries are created to help build # epoll-based event loops around file descriptors. A common pattern is # to automatically make all file descriptors they manage to O_NONBLOCK. # # For such libraries the EAGAIN error code is treated specially. When a # function is called that returns EAGAIN the function isn't called again # until the event loop indicates the the file descriptor is ready. # Supporting EAGAIN when waiting on pidfds makes such libraries just # work with little effort. # # This introduces a new flag PIDFD_NONBLOCK that is equivalent to # O_NONBLOCK. This follows the same patterns we have for other (anon # inode) file descriptors such as EFD_NONBLOCK, IN_NONBLOCK, # SFD_NONBLOCK, TFD_NONBLOCK and the same for close-on-exec flags. # # Passing a non-blocking pidfd to waitid() currently has no effect, i.e. # is not supported. There are users which would like to use waitid() on # pidfds that are O_NONBLOCK and mix it with pidfds that are blocking # and both pass them to waitid(). # # The expected behavior is to have waitid() return -EAGAIN for # non-blocking pidfds and to block for blocking pidfds without needing # to perform any additional checks for flags set on the pidfd before # passing it to waitid(). Non-blocking pidfds will return EAGAIN from # waitid() when no child process is ready yet. Returning -EAGAIN for # non-blocking pidfds makes it easier for event loops that handle EAGAIN # specially. # # It also makes the API more consistent and uniform. In essence, # waitid() is treated like a read on a non-blocking pidfd or a recvmsg() # on a non-blocking socket. # # With the addition of support for non-blocking pidfds we support the # same functionality that sockets do. For sockets() recvmsg() supports # MSG_DONTWAIT for pidfds waitid() supports WNOHANG. Both flags are # per-call options. In contrast non-blocking pidfds and non-blocking # sockets are a setting on an open file description affecting all # threads in the calling process as well as other processes that hold # file descriptors referring to the same open file description. Both # behaviors, per call and per open file description, have genuine # use-cases. # # The interaction with the WNOHANG flag is documented as follows: # # - If a non-blocking pidfd is passed and WNOHANG is not raised we # simply raise the WNOHANG flag internally. When do_wait() returns # indicating that there are eligible child processes but none have # exited yet we set EAGAIN. If no child process exists we continue # returning ECHILD. # # - If a non-blocking pidfd is passed and WNOHANG is raised waitid() # will continue returning 0, i.e. it will not set EAGAIN. This ensure # backwards compatibility with applications passing WNOHANG # explicitly with pidfds" # # * tag 'threads-v5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux: # tests: remove O_NONBLOCK before waiting for WSTOPPED # tests: add waitid() tests for non-blocking pidfds # tests: port pidfd_wait to kselftest harness # pidfd: support PIDFD_NONBLOCK in pidfd_open() # exit: support non-blocking pidfds # < /opt/cross/kisskb/korg/gcc-8.1.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-8.1.0-nolibc/x86_64-linux/bin/x86_64-linux-ld --version # < git log --format=%s --max-count=1 4da9af0014b51c8b015ed8c622440ef28912efe6 # < make -s -j 10 ARCH=x86_64 O=/kisskb/build/linus-rand_x86_64-randconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/x86_64-linux/bin/x86_64-linux- randconfig KCONFIG_SEED=0x70B1CA00 # Added to kconfig CONFIG_STANDALONE=y # Added to kconfig CONFIG_PREVENT_FIRMWARE_BUILD=y # Added to kconfig CONFIG_CC_STACKPROTECTOR_STRONG=n # Added to kconfig CONFIG_GCC_PLUGINS=n # Added to kconfig CONFIG_GCC_PLUGIN_CYC_COMPLEXITY=n # Added to kconfig CONFIG_GCC_PLUGIN_SANCOV=n # Added to kconfig CONFIG_GCC_PLUGIN_LATENT_ENTROPY=n # yes \n | make -s -j 10 ARCH=x86_64 O=/kisskb/build/linus-rand_x86_64-randconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/x86_64-linux/bin/x86_64-linux- oldconfig yes: standard output: Broken pipe # make -s -j 10 ARCH=x86_64 O=/kisskb/build/linus-rand_x86_64-randconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/x86_64-linux/bin/x86_64-linux- kernel/bpf/core.o: warning: objtool: ___bpf_prog_run()+0x12: call without frame pointer save/setup /bin/sh: 1: zstd: not found cat: write error: Broken pipe make[3]: *** [/kisskb/src/arch/x86/boot/compressed/Makefile:132: arch/x86/boot/compressed/vmlinux.bin.zst] Error 127 make[3]: *** Deleting file 'arch/x86/boot/compressed/vmlinux.bin.zst' make[3]: *** Waiting for unfinished jobs.... make[2]: *** [/kisskb/src/arch/x86/boot/Makefile:115: arch/x86/boot/compressed/vmlinux] Error 2 make[1]: *** [arch/x86/Makefile:269: bzImage] Error 2 make: *** [Makefile:185: __sub-make] Error 2 Command 'make -s -j 10 ARCH=x86_64 O=/kisskb/build/linus-rand_x86_64-randconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.1.0-nolibc/x86_64-linux/bin/x86_64-linux- ' returned non-zero exit status 2 # rm -rf /kisskb/build/linus-rand_x86_64-randconfig_x86_64-gcc8 # Build took: 0:06:41.701921