From nobody Sat Feb 22 01:26:56 2025 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 4Z08VS6Cf8z5nlYh; Sat, 22 Feb 2025 01:26:56 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z08VS5bXCz3dg4; Sat, 22 Feb 2025 01:26:56 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740187616; 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=gABkzUdfdcEy2NeuedfEXLduktxE7oM3RIuGcZGfDrU=; b=EUXcqUjCcIU9H57PyUAABFcAUkHcYXgccrEJWe2m0OZoLCGvCR7DT9mLtoFRBEoXiq2agw 9UjMNHFtdBB+9g0ov8vB2KX3FUGE4vFbqzoA3P0GghBQ3Td+Q1q+Y1wDwSVUdJL0aJpIfG /pc0Txixa81BE0VslFweq0Y/ir6gN7mkxpVpD9wqyGtR2LBiAakQn+zHvgny9upkvJiYDI fBiAhYmAu2NDku8HM47K565wo18zYYtpVuaMhVsaff50PMdtaDAgdJTNtby0hWVbdH1He7 18OJ9dTG7DHGmJXM00O2U8LhwOeA3dyfiQ0xqelKIYGydiXZQeEnAabaNxgkTQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740187616; a=rsa-sha256; cv=none; b=kurzJa8uCCYU71ZbMN6O3VUcCU5UwFGlOxqOPesUAxE0j54yomrBPT2HlYu60RCZSz+5/A ALOaPaPft5aPJt+QVfkxKBklciuiPLqz0X6v/WjYxuQCs2H/l+e6V1j/CKYJTresjT1uP1 UoMLr54sOJIN/PTb8bS+SIBWmn1JdmQAuPgoXM++0AiGfDaiDuaK0GitPVcRTK35OBMGjr Bq4Isl+wbBk81xK1ZAI7c200Ugkyx3NecECNgADyrXOffeEeDfKhSZNegTc1zVkXyIDHcv vyIvY6kzocF4X48zA1dTk8HDaAXwEQf6/Mpx26e3zenOl63Kp0tMI7YwWR3MUw== 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=1740187616; 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=gABkzUdfdcEy2NeuedfEXLduktxE7oM3RIuGcZGfDrU=; b=riYPFFTZ/8d0Ogz6gILMUiKU3KgYOoULg0TDSiN5tZLuuCRG1a0YWLconsfDa1rVu9Z/NO gUzJZHg/2WbwPfQQctd49T5qH0pngMFz2t00k0zVRuBZ71dhoDD52AvxCE1uNrK/Iwhl4Z K8r345lS2JekbIwHy9cjVZIdC8UN5KYroi42g15+TxUI7zzpZguJx9fG+ge1xVFErooAd0 sPmuzf6MbJtfPJDF5mA+GZAfC/uvfBm2fANkxz7qrBFFLA8+m+ImfERwN6DNpIrgIw90dV +OVTaVfLEcQy6Y9niB2OEMj/8I3hsUmb8dptxw/WHSBrzp16xkpqrQdF4Bn2/Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (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 did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Z08VS4qz9zmpG; Sat, 22 Feb 2025 01:26:56 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 51M1Qum5006888; Sat, 22 Feb 2025 01:26:56 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51M1Qufx006885; Sat, 22 Feb 2025 01:26:56 GMT (envelope-from git) Date: Sat, 22 Feb 2025 01:26:56 GMT Message-Id: <202502220126.51M1Qufx006885@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 4b79443927ec - main - umtx: Fix a bug in do_lock_pp() 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4b79443927ec2c53514e73b06eb2a9d241882585 Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=4b79443927ec2c53514e73b06eb2a9d241882585 commit 4b79443927ec2c53514e73b06eb2a9d241882585 Author: Mark Johnston AuthorDate: 2025-02-22 01:23:31 +0000 Commit: Mark Johnston CommitDate: 2025-02-22 01:26:38 +0000 umtx: Fix a bug in do_lock_pp() If the lock is unowned (i.e., owner == UMUTEX_CONTESTED), we might get a spurious failure, and in that case we need to retry the loop. Otherwise, the calling thread can end up sleeping forever. The same problem exists in do_set_ceiling(), which open-codes do_lock_pp(), so fix it there too. Reviewed by: olce Reported by: Daniel King MFC after: 2 weeks Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D49031 --- sys/kern/kern_umtx.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sys/kern/kern_umtx.c b/sys/kern/kern_umtx.c index 938dcf2ff1cb..f9189024d629 100644 --- a/sys/kern/kern_umtx.c +++ b/sys/kern/kern_umtx.c @@ -2616,6 +2616,10 @@ do_lock_pp(struct thread *td, struct umutex *m, uint32_t flags, } } else if (owner == UMUTEX_RB_NOTRECOV) { error = ENOTRECOVERABLE; + } else if (owner == UMUTEX_CONTESTED) { + /* Spurious failure, retry. */ + umtxq_unbusy_unlocked(&uq->uq_key); + continue; } if (try != 0) @@ -2825,6 +2829,10 @@ do_set_ceiling(struct thread *td, struct umutex *m, uint32_t ceiling, } else if (owner == UMUTEX_RB_NOTRECOV) { error = ENOTRECOVERABLE; break; + } else if (owner == UMUTEX_CONTESTED) { + /* Spurious failure, retry. */ + umtxq_unbusy_unlocked(&uq->uq_key); + continue; } /*