From nobody Sat Sep 05 00:35:38 2026 X-Original-To: dev-commits-src-branches@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 4hcDrq3lx7z6qZmw for ; Sat, 05 Sep 2026 00:35:39 +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 4hcDrq1558z44Sl for ; Sat, 05 Sep 2026 00:35:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788568539; 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=BCCXZktM9T5ibpnvCYlIsO3WTOk27CBcCgXi34KmCoY=; b=qg7HHDHVe8RTmKj0++GE2TOOvicjYknSN0BgY3g34N7A3pOpBLWlyiy3Ivm05JLk9cGiRD ieq5Nu/H22KvmCKod9Kjs6Wk73URjqEt6koVjcoLc/OQ11/WBMjzq4rM8ATDXaD6QbtJDj IV2m2ce0wFg+UNyLrB7GYvOsYh8pgKH+CnMSMp5ls6LJfIvPxrZG0P7ceprN1G7V2AWD6N N8V5GQ2Zw+hMwY1W6LiHXruaSIy2Ub6z2DFweFYhG2jWJi2VMwX5BxrCX9+OmtUM2Cggpf lo2uIm7doUPgg2TnYgh1T52lYusquhs/K39nli/SfSWbeRd0i2/YOOQcGs76ng== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788568539; a=rsa-sha256; cv=none; b=ePJru0bxXoifXHFnSuw+nTChypir5KIrxkuoJSzFe/gHoWE0Qo6/CfpuGEpS++Ar9I3a8t iY7Pq2f9ry0OjVoBuAJ0jdIABfltWnzEKdfDXV4dM6p7J3Y66Goc8SyMV5oajdzmUfNO2F TnjglMlsaCYz5NYesFCIhlahHTbNif3R1GkSSRONkfNOyO1NbNBoL2j2EjKX6VqY3J1v8N G8xWaB0IRL/pu3iuZO5VmFVX4whRFETPsPrbAH1cHi+hjN839ozHi3M/O5FlaY1eZP1rza C1nVYpkeIvsF2VYnMsrPj6FXs/pUWPTYW7DgJ+3swt19aGClf1fSHvzBwe1gww== 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=1788568539; 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=BCCXZktM9T5ibpnvCYlIsO3WTOk27CBcCgXi34KmCoY=; b=fr06w1nE1NEwwjAJFw8g4m2pZ8IQJFAJLatc4T26Dr1FBw5jHIwnoKtgCZJOK2tMQm0AD1 YwTBUrsVEjqxSUzimynTpQNf18HEt8f6hEoTkgG91DdzXCjgRcP/b1oa5qVdTT1aAsYI5T ppzlh8cMQv0EjnWCLiAIEQkknhnucBN/xzaUe7Qpxkmoj4Hbdmg7wUz7r08xW/TtH0MhHj iq+YOAzFasn8CSYwOBXcYmjZVcHbjAc4XWCJIfh9r0wrkvFdX33jDlUyCV3W1qBdrWg0Gu zIfsA0D+nLEJZoVUkWu4LupN6HVKz0A/f4IIUUp9mCvmFm62iFoq2I0WeyiMSw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hcDrp6Tkmz78r for ; Sat, 05 Sep 2026 00:35:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1f934 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 05 Sep 2026 00:35:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Konstantin Belousov Subject: git: 3867241ba063 - stable/15 - condvars(9): add cv_wait_sig_unlock() List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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/stable/15 X-Git-Reftype: branch X-Git-Commit: 3867241ba06304309f014e7480a2481774660820 Auto-Submitted: auto-generated Date: Sat, 05 Sep 2026 00:35:38 +0000 Message-Id: <6a9b63da.1f934.3c66c2bc@gitrepo.freebsd.org> The branch stable/15 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=3867241ba06304309f014e7480a2481774660820 commit 3867241ba06304309f014e7480a2481774660820 Author: Konstantin Belousov AuthorDate: 2026-08-25 08:18:35 +0000 Commit: Konstantin Belousov CommitDate: 2026-09-05 00:33:44 +0000 condvars(9): add cv_wait_sig_unlock() (cherry picked from commit 0cc6c442964d6294b796537522d9e462656bf16f) --- 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)