Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 25 Feb 2025 11:48:13 GMT
From:      Christos Margiolis <christos@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: d39be38a3533 - main - sound: Report actual vchanrate and vchanformat in sysctl
Message-ID:  <202502251148.51PBmD45050865@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by christos:

URL: https://cgit.FreeBSD.org/src/commit/?id=d39be38a353323d05744eeb3e08267108e55b9b1

commit d39be38a353323d05744eeb3e08267108e55b9b1
Author:     Christos Margiolis <christos@FreeBSD.org>
AuthorDate: 2025-02-25 11:43:33 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2025-02-25 11:43:33 +0000

    sound: Report actual vchanrate and vchanformat in sysctl
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Reviewed by:    dev_submerge.ch
    Differential Revision:  https://reviews.freebsd.org/D48435
---
 sys/dev/sound/pcm/vchan.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/sys/dev/sound/pcm/vchan.c b/sys/dev/sound/pcm/vchan.c
index 4ee7e01066d3..b0caec3acfec 100644
--- a/sys/dev/sound/pcm/vchan.c
+++ b/sys/dev/sound/pcm/vchan.c
@@ -497,9 +497,7 @@ sysctl_dev_pcm_vchanrate(SYSCTL_HANDLER_ARGS)
 	KASSERT(direction == c->direction, ("%s(): invalid direction %d/%d",
 	    __func__, direction, c->direction));
 
-	CHN_LOCK(c);
-	newspd = c->speed;
-	CHN_UNLOCK(c);
+	newspd = *vchanrate;
 
 	ret = sysctl_handle_int(oidp, &newspd, 0, req);
 	if (ret != 0 || req->newptr == NULL) {
@@ -530,7 +528,6 @@ sysctl_dev_pcm_vchanrate(SYSCTL_HANDLER_ARGS)
 
 		ret = chn_reset(c, c->format, newspd);
 		if (ret == 0) {
-			*vchanrate = c->speed;
 			if (restart != 0) {
 				CHN_FOREACH(ch, c, children.busy) {
 					CHN_LOCK(ch);
@@ -543,6 +540,7 @@ sysctl_dev_pcm_vchanrate(SYSCTL_HANDLER_ARGS)
 			}
 		}
 	}
+	*vchanrate = c->speed;
 
 	CHN_UNLOCK(c);
 
@@ -605,15 +603,11 @@ sysctl_dev_pcm_vchanformat(SYSCTL_HANDLER_ARGS)
 	KASSERT(direction == c->direction, ("%s(): invalid direction %d/%d",
 	    __func__, direction, c->direction));
 
-	CHN_LOCK(c);
-
 	bzero(fmtstr, sizeof(fmtstr));
 
-	if (snd_afmt2str(c->format, fmtstr, sizeof(fmtstr)) != c->format)
+	if (snd_afmt2str(*vchanformat, fmtstr, sizeof(fmtstr)) != *vchanformat)
 		strlcpy(fmtstr, "<ERROR>", sizeof(fmtstr));
 
-	CHN_UNLOCK(c);
-
 	ret = sysctl_handle_string(oidp, fmtstr, sizeof(fmtstr), req);
 	if (ret != 0 || req->newptr == NULL) {
 		PCM_RELEASE_QUICK(d);
@@ -637,7 +631,6 @@ sysctl_dev_pcm_vchanformat(SYSCTL_HANDLER_ARGS)
 
 		ret = chn_reset(c, newfmt, c->speed);
 		if (ret == 0) {
-			*vchanformat = c->format;
 			if (restart != 0) {
 				CHN_FOREACH(ch, c, children.busy) {
 					CHN_LOCK(ch);
@@ -650,6 +643,7 @@ sysctl_dev_pcm_vchanformat(SYSCTL_HANDLER_ARGS)
 			}
 		}
 	}
+	*vchanformat = c->format;
 
 	CHN_UNLOCK(c);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202502251148.51PBmD45050865>