From nobody Wed May 21 19:31:37 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 4b2hPQ109Nz5wQ00; Wed, 21 May 2025 19:31:38 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4b2hPQ020lz3X7D; Wed, 21 May 2025 19:31:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1747855898; 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=aVpRgWP+q3bzmQu177tiNyXfnXB6o3Qi1VMgR/lcQ+8=; b=BwiFi8t2YmEgjuFFFIRMKgiEe1yfgjPdZ+el7NkPsVmfpcDIE+m+eYVLILqGzVT0Yvsa0s uEJYHSRj0fNTqcp7DVKVGOejM7x+ItoshkMfRph82ncJ0QN3Lnvu5fuKbppyrFc4mRAZe2 mSR1OWhtuYLf3l9+SxQaZQ4BfoOsVO/0FJ6gLjsktSfBywN8X8LZTT+tCRwVyGxW/vK43L edO+jQ6jUk9o1QlXj24sZ7Za1MwqUqWHblAoIwPG6Hry1WKcBCTHoaArGkBG5A5Veibsjf A4ZIReOlmW/Cza9tg+Aoij6ReOBylxQGr4EhQhxrlJ4Gu040553wQfV8+FhJcQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1747855898; 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=aVpRgWP+q3bzmQu177tiNyXfnXB6o3Qi1VMgR/lcQ+8=; b=DKucJPCHam7ZoSFOokfkdWSh1x0uuB6t0SpewIZY//T2UgYASVepzLh+iMVIQU8a0DS+F7 Y8mONiJHbABIneOLXu9pghiF0njEeupJWSlja7r799ETQn+YRyUSuwR4lNwYqtyESeZ5bg KbDM2o6IMrAkYKhTnQtZaAkxnfH3SwivmF5Dg15k7IPJWXDpGy+5RvsdiMNR2h9EwVPDkR a+h/YNfeA7ZHHLCZQKU9JNOMN9ogvZMdRpvjbEd39/+9TStOJ48IcYjXhwOZ595yBcwONq h9FLG3GCxkORAywb5vnFoSokeQ2ihsG3wxc8wouy4mIfA4pw0SXuQ2prGXrxuQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1747855898; a=rsa-sha256; cv=none; b=bp4f4C0tA12IVCRwogcUyC0En06VLKZflhJcy2qubvkHGltKjTgjPAmB2UjqLstaIRZEb5 sNjF1bbQ23kJPx2ASDf4wYCeP9kl9cusVmaLrzeZDWOTJUIMvYpLRdWPLx0IR8/uDA9cnB huq/wX1j3pCR8E1lHGDQMfyiBHIWaqLPX2pPafPBb0QXjmePsy+K+6tmIVQ3PHTxTPVLg/ zm2ekLf6Oj3dWna1SuwlUgAEp9ifYYZUflp7DqSIWzQrcXGvEhm+xlSk840h0HYV5gciAh 7gVgbloqq4n9mAPqkZqhY1YvpM+zST1IjfcMDHu+JHECt36BwbOx8an/obJDnA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4b2hPP6d0NznrK; Wed, 21 May 2025 19:31:37 +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 54LJVbEx077853; Wed, 21 May 2025 19:31:37 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 54LJVbkq077850; Wed, 21 May 2025 19:31:37 GMT (envelope-from git) Date: Wed, 21 May 2025 19:31:37 GMT Message-Id: <202505211931.54LJVbkq077850@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Christos Margiolis Subject: git: 30fd79b0c0a3 - main - sndctl(8): Fix dp->realtime 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: christos X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 30fd79b0c0a328536b166e7fa9170b059e711303 Auto-Submitted: auto-generated The branch main has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=30fd79b0c0a328536b166e7fa9170b059e711303 commit 30fd79b0c0a328536b166e7fa9170b059e711303 Author: Christos Margiolis AuthorDate: 2025-05-21 19:31:28 +0000 Commit: Christos Margiolis CommitDate: 2025-05-21 19:31:28 +0000 sndctl(8): Fix dp->realtime Currently it's automatically set to 0 in read_dev() as a result of allocating dp with calloc(). Sponsored by: The FreeBSD Foundation MFC after: 1 day Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D50400 --- usr.sbin/sndctl/sndctl.c | 189 ++++++++++++++++++++++++----------------------- 1 file changed, 98 insertions(+), 91 deletions(-) diff --git a/usr.sbin/sndctl/sndctl.c b/usr.sbin/sndctl/sndctl.c index 4d3ae0cf526c..156c845481c5 100644 --- a/usr.sbin/sndctl/sndctl.c +++ b/usr.sbin/sndctl/sndctl.c @@ -333,6 +333,96 @@ bytes2frames(int bytes, int fmt) return (bytes / (samplesz * ch)); } +static int +sysctl_int(const char *buf, const char *arg, int *var) +{ + size_t size; + int n, prev; + + size = sizeof(int); + /* Read current value. */ + if (sysctlbyname(buf, &prev, &size, NULL, 0) < 0) { + warn("sysctlbyname(%s)", buf); + return (-1); + } + + /* Read-only. */ + if (arg != NULL) { + errno = 0; + n = strtol(arg, NULL, 10); + if (errno == EINVAL || errno == ERANGE) { + warn("strtol(%s)", arg); + return (-1); + } + + /* Apply new value. */ + if (sysctlbyname(buf, NULL, 0, &n, size) < 0) { + warn("sysctlbyname(%s, %d)", buf, n); + return (-1); + } + } + + /* Read back applied value for good measure. */ + if (sysctlbyname(buf, &n, &size, NULL, 0) < 0) { + warn("sysctlbyname(%s)", buf); + return (-1); + } + + if (arg != NULL) + printf("%s: %d -> %d\n", buf, prev, n); + if (var != NULL) + *var = n; + + return (0); +} + +static int +sysctl_str(const char *buf, const char *arg, char *var, size_t varsz) +{ + size_t size; + char prev[BUFSIZ]; + char *tmp; + + /* Read current value. */ + size = sizeof(prev); + if (sysctlbyname(buf, prev, &size, NULL, 0) < 0) { + warn("sysctlbyname(%s)", buf); + return (-1); + } + + /* Read-only. */ + if (arg != NULL) { + size = strlen(arg); + /* Apply new value. */ + if (sysctlbyname(buf, NULL, 0, arg, size) < 0) { + warn("sysctlbyname(%s, %s)", buf, arg); + return (-1); + } + /* Get size of new string. */ + if (sysctlbyname(buf, NULL, &size, NULL, 0) < 0) { + warn("sysctlbyname(%s)", buf); + return (-1); + } + } + + if ((tmp = calloc(1, size)) == NULL) + err(1, "calloc"); + /* Read back applied value for good measure. */ + if (sysctlbyname(buf, tmp, &size, NULL, 0) < 0) { + warn("sysctlbyname(%s)", buf); + free(tmp); + return (-1); + } + + if (arg != NULL) + printf("%s: %s -> %s\n", buf, prev, tmp); + if (var != NULL) + strlcpy(var, tmp, varsz); + free(tmp); + + return (0); +} + static struct snd_dev * read_dev(char *path) { @@ -343,7 +433,7 @@ read_dev(char *path) struct snd_dev *dp = NULL; struct snd_chan *ch; size_t nitems, nchans, i, j; - int fd, caps, unit; + int fd, caps, unit, t1, t2, t3; if ((fd = open("/dev/sndstat", O_RDONLY)) < 0) err(1, "open(/dev/sndstat)"); @@ -456,6 +546,13 @@ read_dev(char *path) dp->autoconv = (dp->play.vchans || dp->rec.vchans) && !dp->bitperfect; + if (sysctl_int("hw.snd.latency", NULL, &t1) || + sysctl_int("hw.snd.latency_profile", NULL, &t2) || + sysctl_int("kern.timecounter.alloweddeviation", NULL, &t3)) + err(1, "%s: sysctl", dp->name); + if (t1 == 0 && t2 == 0 && t3 == 0) + dp->realtime = 1; + if (!nvlist_exists(nvlist_get_nvlist(di[i], SNDST_DSPS_PROVIDER_INFO), SNDST_DSPS_SOUND4_CHAN_INFO)) errx(1, "%s: channel info list empty", dp->name); @@ -658,96 +755,6 @@ print_dev(struct snd_dev *dp) } } -static int -sysctl_int(const char *buf, const char *arg, int *var) -{ - size_t size; - int n, prev; - - size = sizeof(int); - /* Read current value. */ - if (sysctlbyname(buf, &prev, &size, NULL, 0) < 0) { - warn("sysctlbyname(%s)", buf); - return (-1); - } - - /* Read-only. */ - if (arg != NULL) { - errno = 0; - n = strtol(arg, NULL, 10); - if (errno == EINVAL || errno == ERANGE) { - warn("strtol(%s)", arg); - return (-1); - } - - /* Apply new value. */ - if (sysctlbyname(buf, NULL, 0, &n, size) < 0) { - warn("sysctlbyname(%s, %d)", buf, n); - return (-1); - } - } - - /* Read back applied value for good measure. */ - if (sysctlbyname(buf, &n, &size, NULL, 0) < 0) { - warn("sysctlbyname(%s)", buf); - return (-1); - } - - if (arg != NULL) - printf("%s: %d -> %d\n", buf, prev, n); - if (var != NULL) - *var = n; - - return (0); -} - -static int -sysctl_str(const char *buf, const char *arg, char *var, size_t varsz) -{ - size_t size; - char prev[BUFSIZ]; - char *tmp; - - /* Read current value. */ - size = sizeof(prev); - if (sysctlbyname(buf, prev, &size, NULL, 0) < 0) { - warn("sysctlbyname(%s)", buf); - return (-1); - } - - /* Read-only. */ - if (arg != NULL) { - size = strlen(arg); - /* Apply new value. */ - if (sysctlbyname(buf, NULL, 0, arg, size) < 0) { - warn("sysctlbyname(%s, %s)", buf, arg); - return (-1); - } - /* Get size of new string. */ - if (sysctlbyname(buf, NULL, &size, NULL, 0) < 0) { - warn("sysctlbyname(%s)", buf); - return (-1); - } - } - - if ((tmp = calloc(1, size)) == NULL) - err(1, "calloc"); - /* Read back applied value for good measure. */ - if (sysctlbyname(buf, tmp, &size, NULL, 0) < 0) { - warn("sysctlbyname(%s)", buf); - free(tmp); - return (-1); - } - - if (arg != NULL) - printf("%s: %s -> %s\n", buf, prev, tmp); - if (var != NULL) - strlcpy(var, tmp, varsz); - free(tmp); - - return (0); -} - static int mod_bitperfect(struct snd_dev *dp, void *arg) {