From nobody Sat Aug 29 09:43:42 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 4hX9LX0sjxz6qlRb for ; Sat, 29 Aug 2026 09:43:48 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hX9LW2hgfz3gNw for ; Sat, 29 Aug 2026 09:43:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787996627; 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=476R6OWceK+S0gIw6qyglKsJFs4QTC+W6bwd8DsLgMM=; b=ufZYUXeY+6UIaWlYHBnu19Sg2RmxixePSS6GELzKr1bynRHV9ZQqRZYeZFrH4wRaDHdRhY LGCN3zFwoernINZIWYzmXkkA2dfpekjRDtWVNKjObCuri+yM0/6QkRQeKBpXVqmCFr+SqR 1vvcEPoRb28rEooTeNyMNymDo9S6qJ+7EzDdHSdvgValqKFaAXyJd4J+ASfqSM5c1wY0r3 nbkYmqSkWxgZrg2cP8uHcdhyiE9CSAQCkUsVRBc2HBgRskJeByJZGzIJQdxVgNcN63M4ds X+GoDnhk804RDd+3iltOZwaK9JPovFdip0QZwP4cRA9oM8x7wLuV68q+LROSwQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787996627; a=rsa-sha256; cv=none; b=K7FLhnlPHcaUyOKAPNO+FW+eA58mpmT6mdqAg0jz0cnCZZAiyGQnEwqbLhqjg39OpMFP3F J8KYgBMsD071dhYzzMBBC66vGvxsVqPmVbb9qEGXDi/IeMpLc7VoU4N03ShOYIVDiBsUkw 356F7z7RCDlB1C7gjicBWihNFAAm9eV4vPz7DdQf5YkDSOURbd6c9pz1qrEVlXIZuBDozi 60ClHnPD9m6qqCvg9TkExAUgV28nAvHjeO1nbLhpIkY2dt35kYXxBka9+63B2MP7SFiqna oNcY6KGv2xIKy7xvTT/GjZjrA/QSXKCkzRQ1tua2UvSqqbQ0fTE+ElCaR457cw== 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=1787996627; 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=476R6OWceK+S0gIw6qyglKsJFs4QTC+W6bwd8DsLgMM=; b=KOhYemRsDqy8e/dz1as4YSU2F3Y+KIfwAl17b7tZZm1utVWpFVMzDj2fdLe2Y3vd9hFTNg aSVo4k/EYDRSGwJHF4lrKEUpT7YyRzgKf/Qo9+pvYyCSkJ0LdnAC6+T/shCoxABP+qSlJb uLR4YpS4Sj+t8xYjru947SpJ/ynIHs+atOlnTI99JoLGrvutlEjB6qQQlCu3z4kP41WUOB YmIdYiY+4xEr+fdC5Epfr8jwTtVor68Pi/9Dm5KVGL/2y0eh8vlw0Ba6Qt/pgLiKvTezWh 8hq4UibcLmJ+ziGeWa62hTMnaEN6PnpEiv5YoQ7/ys2SZx8dkh2jTsO3/0wbsQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hX9LW0swnzc45 for ; Sat, 29 Aug 2026 09:43:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 19586 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 29 Aug 2026 09:43:42 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 0cc6c442964d - main - condvars(9): add cv_wait_sig_unlock() 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: 0cc6c442964d6294b796537522d9e462656bf16f Auto-Submitted: auto-generated Date: Sat, 29 Aug 2026 09:43:42 +0000 Message-Id: <6a92a9ce.19586.5847dd59@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=0cc6c442964d6294b796537522d9e462656bf16f commit 0cc6c442964d6294b796537522d9e462656bf16f Author: Konstantin Belousov AuthorDate: 2026-08-25 08:18:35 +0000 Commit: Konstantin Belousov CommitDate: 2026-08-29 09:42:40 +0000 condvars(9): add cv_wait_sig_unlock() Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D59132 --- sys/kern/kern_condvar.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ sys/sys/condvar.h | 3 +++ 2 files changed, 58 insertions(+) diff --git a/sys/kern/kern_condvar.c b/sys/kern/kern_condvar.c index 517b83d90243..79d6e2dcd41f 100644 --- a/sys/kern/kern_condvar.c +++ b/sys/kern/kern_condvar.c @@ -287,6 +287,61 @@ _cv_wait_sig(struct cv *cvp, struct lock_object *lock) return (rval); } +int +_cv_wait_sig_unlock(struct cv *cvp, struct lock_object *lock) +{ + WITNESS_SAVE_DECL(lock_witness); +#ifdef KTRACE + char wmesg[WMESGLEN + 1]; +#endif + struct lock_class *class; + struct thread *td __ktrace_used; + int rval; + + td = curthread; + CV_ASSERT(cvp, lock, td); + WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, lock, + "Waiting on \"%s\"", cvp->cv_description); + KASSERT(lock != &Giant.lock_object, + ("cv_wait_sig_unlock cannot be used with Giant")); + + if (SCHEDULER_STOPPED()) + return (0); + +#ifdef KTRACE + if (KTRPOINT(td, KTR_CSW)) { + strlcpy(wmesg, cv_wmesg(cvp), sizeof(wmesg)); + ktrcsw(1, 0, wmesg); + } else { + wmesg[0] = '\0'; + } +#endif + + class = LOCK_CLASS(lock); + sleepq_lock(cvp); + + CV_WAITERS_INC(cvp); + DROP_GIANT(); + + sleepq_add(cvp, lock, cvp->cv_description, SLEEPQ_CONDVAR | + SLEEPQ_INTERRUPTIBLE, 0); + if (class->lc_flags & LC_SLEEPABLE) + sleepq_release(cvp); + WITNESS_SAVE(lock, lock_witness); + class->lc_unlock(lock); + if (class->lc_flags & LC_SLEEPABLE) + sleepq_lock(cvp); + rval = sleepq_wait_sig(cvp, 0); + +#ifdef KTRACE + if (KTRPOINT(td, KTR_CSW)) + ktrcsw(0, 0, wmesg); +#endif + PICKUP_GIANT(); + + return (rval); +} + /* * Wait on a condition variable for (at most) the value specified in sbt * argument. Returns 0 if the process was resumed by cv_signal or cv_broadcast, diff --git a/sys/sys/condvar.h b/sys/sys/condvar.h index cd16c85024d4..9d351da02bc0 100644 --- a/sys/sys/condvar.h +++ b/sys/sys/condvar.h @@ -51,6 +51,7 @@ void cv_destroy(struct cv *cvp); void _cv_wait(struct cv *cvp, struct lock_object *lock); void _cv_wait_unlock(struct cv *cvp, struct lock_object *lock); int _cv_wait_sig(struct cv *cvp, struct lock_object *lock); +int _cv_wait_sig_unlock(struct cv *cvp, struct lock_object *lock); int _cv_timedwait_sbt(struct cv *cvp, struct lock_object *lock, sbintime_t sbt, sbintime_t pr, int flags); int _cv_timedwait_sig_sbt(struct cv *cvp, struct lock_object *lock, @@ -65,6 +66,8 @@ void cv_broadcastpri(struct cv *cvp, int pri); _cv_wait_unlock((cvp), &(lock)->lock_object) #define cv_wait_sig(cvp, lock) \ _cv_wait_sig((cvp), &(lock)->lock_object) +#define cv_wait_sig_unlock(cvp, lock) \ + _cv_wait_sig_unlock((cvp), &(lock)->lock_object) #define cv_timedwait(cvp, lock, timo) \ _cv_timedwait_sbt((cvp), &(lock)->lock_object, \ tick_sbt * (timo), 0, C_HARDCLOCK)