From nobody Mon Jul 13 03:12:52 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4gz6vF5z0mz6lQvm for ; Mon, 13 Jul 2026 03:12:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gz6vF2k3sz3SVX for ; Mon, 13 Jul 2026 03:12:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783912377; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=6BMi15mswfdxOoqFSaKRkj8xizzRfbPYIQ961hAemNM=; b=LMeIBfM5O496B71oeNPr5VDXgVdhtdc7XUP9XjuS9trNycSk3D+y2Xxg9r4NOE41/bnLip A2yiLSK+eDsvQYQHcdPlw+fU976nTrnXRPDKe2pMmz4RACF4Zv3ZDFRhPTScqZD0fc0uqb O4PrFS5B4wd7N0sKL/76OgUROauMVaBuVxTMV77khHuDiakPqfyoWkb//lUGZKwhb9DuBJ cILLKYyXX82Erot27E9HVnBrDpUddAAyVwh+OlRejihoBetJKRspeL9YPQpGNsAC77+ujT lqUW85z3urxx3uzqQ/OmntVyxMMHpAx9gyQJpLLpAn0QE3YKzaF5SPsy0hbg8A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1783912377; a=rsa-sha256; cv=none; b=f3fZCjLKchyrHA7PxyPFrlGR0gISZ48K35ISZc0uMzIJSUvy4zw4Mo4H5AxfV1YDHC0tKA 5EzLFL5It/U4Kid4ef9s6z0EPpX1qI5r0Ri06qHq0fRzH91xEcONAw0IN8ixPaXZMXwSDF YBtrg+zkSryyg5yFW0Ys1i+Ut3L4P+rXof8AeG6Gl4qmGgHWHvLZTsdArm5O0ptBR16sUM 9g+Bazj5K2SAOE8vQwA9L2oeuYCZi63TTTWCju4VMmwBg9hftbe4C9s8Zg5EX0q5BRkuN5 iRdWRMPs0rAlAqKi0Ie1v1cdEc0y6rG0bOMLsL4f1S0y9P67SnBxSnEHqUg8dg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1783912377; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=6BMi15mswfdxOoqFSaKRkj8xizzRfbPYIQ961hAemNM=; b=FjjN5qWEyYFJyb71LTzYCgy4xc8cG899gPFNkRPQjhGgvlUgbZBjxq5gvh1nEBG9oS5tqR ggtYhOm75mUKeI/Gtj/proe2lmFASwlH5za1gguTyyNsMEPh+RJBtUYMMrGDjKr6t12IsY ak7DR5QmiNdTwA4QnKmjcfIunyQofvwsyMaO5wMp/BOFAJWiugbeWonzT+w3IewFvh2qUJ pu1u0Amk3bDH+yr2oepASPaFEhHc9Dm/JtGnyS6TX2gxq6a8t6k+/9PRrMoVFMisnVjO6o po4JH5vwrx/Q75uPcxa3uvgzPY4VSpFwscOhzOEyws0FOrUbHZbWyfw87d9nIw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gz6vF1YkfzhCn for ; Mon, 13 Jul 2026 03:12:57 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b4be by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 13 Jul 2026 03:12:52 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 2a5e58c59694 - main - procdesc: add NOTE_PDSIGCHLD List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2a5e58c59694bc719d7ab82abb1c65ee2045329d Auto-Submitted: auto-generated Date: Mon, 13 Jul 2026 03:12:52 +0000 Message-Id: <6a5457b4.3b4be.795f9be8@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=2a5e58c59694bc719d7ab82abb1c65ee2045329d commit 2a5e58c59694bc719d7ab82abb1c65ee2045329d Author: Konstantin Belousov AuthorDate: 2026-07-09 11:08:45 +0000 Commit: Konstantin Belousov CommitDate: 2026-07-13 03:12:39 +0000 procdesc: add NOTE_PDSIGCHLD The note type wakes up when there is something for pdwait(2) to report on the process descriptor. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58123 --- sys/kern/kern_sig.c | 2 ++ sys/kern/sys_procdesc.c | 25 +++++++++++++++++++++---- sys/sys/event.h | 9 ++++++--- sys/sys/procdesc.h | 1 + 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 4c66ed24baf1..30f6b69da9ef 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -2315,6 +2315,7 @@ tdsendsignal(struct proc *p, struct thread *td, int sig, ksiginfo_t *ksi) ps = p->p_sigacts; KNOTE_LOCKED(p->p_klist, NOTE_SIGNAL | sig); + procdesc_jobstate(p); prop = sigprop(sig); if (td == NULL) { @@ -3682,6 +3683,7 @@ childproc_jobstate(struct proc *p, int reason, int sig) */ p->p_pptr->p_flag |= P_STATCHILD; wakeup(p->p_pptr); + procdesc_jobstate(p); ps = p->p_pptr->p_sigacts; mtx_lock(&ps->ps_mtx); diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c index 7351df11c631..0d26c2031b28 100644 --- a/sys/kern/sys_procdesc.c +++ b/sys/kern/sys_procdesc.c @@ -64,6 +64,7 @@ #include #include +#include #include #include #include @@ -347,7 +348,7 @@ procdesc_exit(struct proc *p) return (1); } selwakeup(&pd->pd_selinfo); - KNOTE_LOCKED(&pd->pd_selinfo.si_note, NOTE_EXIT); + KNOTE_LOCKED(&pd->pd_selinfo.si_note, NOTE_EXIT | NOTE_PDSIGCHLD); PROCDESC_UNLOCK(pd); /* Wakeup all waiters for this procdesc' process exit. */ @@ -355,6 +356,21 @@ procdesc_exit(struct proc *p) return (0); } +void +procdesc_jobstate(struct proc *p) +{ + struct procdesc *pd; + + PROC_LOCK_ASSERT(p, MA_OWNED); + pd = p->p_procdesc; + if (pd == NULL) + return; + + PROCDESC_LOCK(pd); + KNOTE_LOCKED(&pd->pd_selinfo.si_note, NOTE_PDSIGCHLD); + PROCDESC_UNLOCK(pd); +} + /* * When a process descriptor is reaped, perhaps as a result of close(), release * the process's reference on the process descriptor. @@ -502,10 +518,11 @@ procdesc_kqops_event(struct knote *kn, long hint) pd = kn->kn_fp->f_data; if (hint == 0) { /* - * Initial test after registration. Generate a NOTE_EXIT in + * Initial test after registration. Generate notes in * case the process already terminated before registration. */ - event = pd->pd_flags & PDF_EXITED ? NOTE_EXIT : 0; + event = (pd->pd_flags & PDF_EXITED) != 0 ? (NOTE_EXIT | + NOTE_PDSIGCHLD) : 0; } else { /* Mask off extra data. */ event = (u_int)hint & NOTE_PCTRLMASK; @@ -516,7 +533,7 @@ procdesc_kqops_event(struct knote *kn, long hint) kn->kn_fflags |= event; /* Process is gone, so flag the event as finished. */ - if (event == NOTE_EXIT) { + if ((event & NOTE_EXIT) != 0) { kn->kn_flags |= EV_EOF | EV_ONESHOT; if (kn->kn_fflags & NOTE_EXIT) kn->kn_data = pd->pd_xstat; diff --git a/sys/sys/event.h b/sys/sys/event.h index de24c9226e4a..ed215453a325 100644 --- a/sys/sys/event.h +++ b/sys/sys/event.h @@ -202,9 +202,12 @@ struct freebsd11_kevent32 { /* * data/hint flags for EVFILT_PROC and EVFILT_PROCDESC, shared with userspace */ -#define NOTE_EXIT 0x80000000 /* process exited */ -#define NOTE_FORK 0x40000000 /* process forked */ -#define NOTE_EXEC 0x20000000 /* process exec'd */ +#define NOTE_EXIT 0x80000000 /* proc/procdesc: process + exited */ +#define NOTE_FORK 0x40000000 /* proc: process forked */ +#define NOTE_EXEC 0x20000000 /* proc: process exec'd */ +#define NOTE_PDSIGCHLD 0x10000000 /* procdesc: pdwait() info + available */ #define NOTE_PCTRLMASK 0xf0000000 /* mask for hint bits */ #define NOTE_PDATAMASK 0x000fffff /* mask for pid */ diff --git a/sys/sys/procdesc.h b/sys/sys/procdesc.h index b332f73744de..dafa3326384d 100644 --- a/sys/sys/procdesc.h +++ b/sys/sys/procdesc.h @@ -104,6 +104,7 @@ struct procdesc { int procdesc_exit(struct proc *); int procdesc_find(struct thread *, int fd, const cap_rights_t *, struct proc **); +void procdesc_jobstate(struct proc *p); int kern_pdgetpid(struct thread *, int fd, const cap_rights_t *, pid_t *pidp); void procdesc_new(struct proc *, int);