From nobody Mon Nov 02 15:55:27 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 4jJGWM3S5Wz6xtRP for ; Mon, 02 Nov 2026 15:55:27 +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) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4jJGWM2mMQz4dsT for ; Mon, 02 Nov 2026 15:55:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793634927; 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=0Ql+rSPxdCgUTpbhhCVKThQq2G4GunyMUjBhCxTlBQE=; b=Sfu24g/yCOPT6m6S0FfZ4KluK75O9gWcKFs62sR2YaBTwnpv9h+c0DZMERsbTntYEAESVt x+CjkEbwacbH0EWPI1ilKvv4euYWZ7AQ0fa3OMuHRCHeQN0/wdtRwO5jm+tHR4tvmZqLs5 Pyns87y8JoAVi24smfcahv+KYvWfQcv6NNEHZNytMBqE6zFNw6yTfLVJLry0Rs4Pyk4c3Y axWvIli1asYUsgVrdUOdB5k1tjX2Rju1PFf67lvzHA/l/OVDPmWOlX12df6IkZ/o8bXecf MxGU3cECj2KurzVKdFoW0O1wo22p/2bpNxT4Mw+8lwjSY49/H0LvIl+R8S5tbA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1793634927; b=FaJTnZrN5fekpOprw3FEkDDVMt+PpReDtHQ32EEfMDuccICSm7drL2M7MUvQuSAU6TwJKn T7IhHMQX9ZY5VYXK3KdYulfT0ShlSCD2d/Uze+LAhxLkRaZG4LhWetHFSpwVZPk31UDnke WtGCH6vVEdYCFCmPxhmjcKUXrAiRrDO4nv8ksNoNW7QEw+W8Kb+uSpstKzpmtKL6+GUBh6 vsbxaAYfEIb2uCr1EeiDlk0zarqBL2U237U3zcKIgtOOLVCR3tVyha2vpwHiXnmpaFQsBL ARXNs228PnvitR6hUjP2wDvu0K9l1LjaSGe7A3gKTiS8N50CiwquLqGw1Rd6Rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1793634927; 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=0Ql+rSPxdCgUTpbhhCVKThQq2G4GunyMUjBhCxTlBQE=; b=U5Q2U+V0G7GmQ0ZM6qiLbspZx5/Q+pqHRRhLj7StUCW7do/qa+N9SPqXZqV3aHT8Z/nv2Q 92bUA7Fp5Cvr2NFA2Vfp1no9rjSG0AOP3L3AgvKPNkShzUe6Kl2eouOQ2ro1SyGxIPG+Uf 6bWAs5G38YETAcTFcwBVGdYsIU/n3MxHjzf/8dCusMZAoJr++uh9A6no2iwVz9ppe+leRD ZnPKKbOpDE9b35HCGVkdPAJyk3t/6+oQFqXabglg7ASbuQ5a5GSmLiB1vOkKr4U78qknxf jnS1gzn2t1W8ORpoRPewLabD4Dz76DpxEvxT20lGHkIw6TIWdS2tyjXuVd7I/g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4jJGWM2QbtzsDZ for ; Mon, 02 Nov 2026 15:55:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4637e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 02 Nov 2026 15:55:27 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: a25ad366d51d - main - snd_hdsp: Serialize rate and latency updates List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: Commit messages for all branches of the src repository 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: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a25ad366d51d52ef30b8bc4e2a7dd377255a409b Auto-Submitted: auto-generated Date: Mon, 02 Nov 2026 15:55:27 +0000 Message-Id: <6ae8b26f.4637e.131374dd@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=a25ad366d51d52ef30b8bc4e2a7dd377255a409b commit a25ad366d51d52ef30b8bc4e2a7dd377255a409b Author: Kevin Bowling AuthorDate: 2026-11-02 15:54:35 +0000 Commit: Kevin Bowling CommitDate: 2026-11-02 15:55:04 +0000 snd_hdsp: Serialize rate and latency updates Protect running-state checks and register updates with the softc lock. Keep the pointer reset and the HDSP 9632 frequency rewrite in the same critical section as the latency update. Drop the lock around sndbuf_resize(), which may sleep, and recheck the running state after reacquiring it. Preserve resize error handling so that a failed resize leaves the hardware unchanged. This mirrors the locking in snd_hdspe. MFC after: 3 days Sponsored by: BBOX.io --- sys/dev/sound/pci/hdsp-pcm.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/sys/dev/sound/pci/hdsp-pcm.c b/sys/dev/sound/pci/hdsp-pcm.c index 27ab21fd6d74..24969f0e22b0 100644 --- a/sys/dev/sound/pci/hdsp-pcm.c +++ b/sys/dev/sound/pci/hdsp-pcm.c @@ -851,6 +851,8 @@ hdspchan_setspeed(kobj_t obj, void *data, uint32_t speed) device_printf(scp->dev, "hdspchan_setspeed(%d)\n", speed); #endif + mtx_lock(&sc->lock); + if (hdsp_running(sc) == 1) goto end; @@ -890,8 +892,10 @@ hdspchan_setspeed(kobj_t obj, void *data, uint32_t speed) sc->speed = hr->speed; end: + speed = sc->speed; + mtx_unlock(&sc->lock); - return (sc->speed); + return (speed); } static uint32_t @@ -913,6 +917,8 @@ hdspchan_setblocksize(kobj_t obj, void *data, uint32_t blocksize) device_printf(scp->dev, "hdspchan_setblocksize(%d)\n", blocksize); #endif + mtx_lock(&sc->lock); + if (hdsp_running(sc) == 1) goto end; @@ -943,16 +949,23 @@ hdspchan_setblocksize(kobj_t obj, void *data, uint32_t blocksize) } } + /* sndbuf_resize() may sleep. */ + mtx_unlock(&sc->lock); if (sndbuf_resize(ch->buffer, 2, (hl->period * AFMT_CHANNEL(ch->format) * sizeof(uint32_t))) != 0) return (0); mtx_lock(&sc->lock); + /* A channel may have started while the lock was dropped. */ + if (hdsp_running(sc) == 1) { + mtx_unlock(&sc->lock); + return (0); + } + sc->ctrl_register &= ~HDSP_LAT_MASK; sc->ctrl_register |= hdsp_encode_latency(hl->n); hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register); sc->period = hl->period; - mtx_unlock(&sc->lock); #if 0 device_printf(scp->dev, "New period=%d\n", sc->period); @@ -963,6 +976,7 @@ hdspchan_setblocksize(kobj_t obj, void *data, uint32_t blocksize) if (sc->type == HDSP_9632) hdsp_write_4(sc, HDSP_FREQ_REG, hdsp_freq_reg_value(sc->speed)); end: + mtx_unlock(&sc->lock); return (ch->buffer->blksz); }