From nobody Fri Sep 18 18:18:38 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 4hmgqM3GRjz6spQ5 for ; Fri, 18 Sep 2026 18:18: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 4hmgqM1664z4Nhd for ; Fri, 18 Sep 2026 18:18:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789755519; 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=LBzZRBCMmsFexougfca9DgJHKebDI4uuaXFYbnVRaZg=; b=w6A3I5PlTDAPc0jGAiw/NYAfLtgF+ngL1iapMXLNroAeIl39Wn+hUfRFqMJ6pn+5L6e945 2nKUNxYzg8NCcsuY45iLUswuFx2dmEh7nKnjp5WjOSSErlZ2aOwharjSUK09rm3hrR30SY CeTkizPSgsnrgJQP3XcDsYfS+7zy1/2z1717EFRXRh8UO7kR7PObMZYjwJj4W1KSmcw2Wp 2pjnSgtTVQT1B1XvMBdWZLtH8ufMqyOkxK3VGBB/VFjpDevH8eQ6nx3TQZwL8Ie6me6cSe Zm/fsd5k0ylYIRgkypF6h2RkIs2A5rVSMHLWEs/srwVIH31EXHMS/6xZSc+xgA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789755519; b=ZMMbQ0Fu84NcMoFG3d8wvcTnWarjuJMRnQbIFc+K9mGnj1bdqebdol8MSN9ZXO5UvR9DSE so+UU/i37eu119OmRYVZEBH4PybKgIfhCiuqhCPAs3d9qR+uLpKbRKWBI6xERajCP8zKS4 0puK0Pr2V6yZCSXrGWHWlHC07fv4j1joegLkF2d8Ou/G6nGon8fpHBpY51oN228Yos6Vj9 3LOSCu0CT3CBzLlH6gD6eNewowQwkPIUcXMS5tXUaQ1xVFhk8Fb7M2WQfQuD0zgBnvcCd5 4CUoKHZV1GJxGPGw40cYNv1pvTknzPb78Xt36KItu5TH2mW4/4Puv6mEozJUdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789755519; 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=LBzZRBCMmsFexougfca9DgJHKebDI4uuaXFYbnVRaZg=; b=Yb7acEflQ9Xm6QW9OparH/Pvf/7dsjYud8cSA80bwc+H0LxSM1DtgcqP3WJO/SUOLhrh1f 5CRe5P8gyrWQGwLTJQhEDwEih02iTeWHUri2h9P8ImC3Guf3xKFqV1hHAA/G4mcFud7zM0 pvZCi+1TDv6CGLxHwM4g0JEO744qNNz6hUbZI17vO2tgZcujxpuPhZiJGdIEFf/srczqab coIc60HthUkIkiP2wUhHuhNkWShfj/JnCVYIDzuvzpp5aAncCB46oMHaH+jR0azKSwRkoE Ssx3X5TP2mZ1wQn9u0PLpeIpV3e4KQNKooTvlg2N8ESYupaSVL/cQmKfdy9Baw== 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 4hmgqL6ZkyzV3r for ; Fri, 18 Sep 2026 18:18:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 36b85 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 18 Sep 2026 18:18:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Christos Margiolis Subject: git: a614c07ad452 - main - sound: Embed mixer cdev in snd_mixer 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 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: christos X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a614c07ad4520c072f58aebee54d16d9b72837f5 Auto-Submitted: auto-generated Date: Fri, 18 Sep 2026 18:18:38 +0000 Message-Id: <6aad807e.36b85.57c6fbff@gitrepo.freebsd.org> The branch main has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=a614c07ad4520c072f58aebee54d16d9b72837f5 commit a614c07ad4520c072f58aebee54d16d9b72837f5 Author: Christos Margiolis AuthorDate: 2026-09-18 18:13:32 +0000 Commit: Christos Margiolis CommitDate: 2026-09-18 18:13:32 +0000 sound: Embed mixer cdev in snd_mixer The mixer cdev belongs to the mixer, not to the PCM device, so move it from snddev_info->mixer_dev into a new snd_mixer->cdev field. snd_mixer itself is now included in snddev_info. Also add a MIXER_REGISTERED() macro similar to PCM_REGISTERED(). Sponsored by: The FreeBSD Foundation MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D59071 --- sys/dev/sound/pci/es137x.c | 2 +- sys/dev/sound/pcm/dsp.c | 16 ++++++++-------- sys/dev/sound/pcm/mixer.c | 37 +++++++++++++++++-------------------- sys/dev/sound/pcm/mixer.h | 3 +++ sys/dev/sound/pcm/sound.h | 1 - 5 files changed, 29 insertions(+), 30 deletions(-) diff --git a/sys/dev/sound/pci/es137x.c b/sys/dev/sound/pci/es137x.c index bafc17f78c98..80d6adff2c75 100644 --- a/sys/dev/sound/pci/es137x.c +++ b/sys/dev/sound/pci/es137x.c @@ -1516,7 +1516,7 @@ sysctl_es137x_single_pcm_mixer(SYSCTL_HANDLER_ARGS) dev = oidp->oid_arg1; d = device_get_softc(dev); - if (!PCM_REGISTERED(d) || d->mixer_dev == NULL || d->mixer == NULL) + if (!PCM_REGISTERED(d) || !MIXER_REGISTERED(d->mixer)) return (EINVAL); es = d->devinfo; if (es == NULL) diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c index dfd5779d0dfb..38b23376ce81 100644 --- a/sys/dev/sound/pcm/dsp.c +++ b/sys/dev/sound/pcm/dsp.c @@ -735,9 +735,9 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode, return (ret); } - if (d->mixer_dev != NULL) { + if (MIXER_REGISTERED(d->mixer)) { PCM_ACQUIRE_QUICK(d); - ret = mixer_ioctl_cmd(d->mixer_dev, cmd, arg, -1, td); + ret = mixer_ioctl_cmd(d->mixer->cdev, cmd, arg, -1, td); PCM_RELEASE_QUICK(d); } else ret = EBADF; @@ -1520,9 +1520,9 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode, return (ret); } - if (d->mixer_dev != NULL) { + if (MIXER_REGISTERED(d->mixer)) { PCM_ACQUIRE_QUICK(d); - ret = mixer_ioctl_cmd(d->mixer_dev, xcmd, arg, -1, td); + ret = mixer_ioctl_cmd(d->mixer->cdev, xcmd, arg, -1, td); PCM_RELEASE_QUICK(d); } else ret = ENOTSUP; @@ -1532,9 +1532,9 @@ dsp_ioctl(struct cdev *i_dev, unsigned long cmd, caddr_t arg, int mode, case SNDCTL_DSP_GET_RECSRC_NAMES: case SNDCTL_DSP_GET_RECSRC: case SNDCTL_DSP_SET_RECSRC: - if (d->mixer_dev != NULL) { + if (MIXER_REGISTERED(d->mixer)) { PCM_ACQUIRE_QUICK(d); - ret = mixer_ioctl_cmd(d->mixer_dev, cmd, arg, -1, td); + ret = mixer_ioctl_cmd(d->mixer->cdev, cmd, arg, -1, td); PCM_RELEASE_QUICK(d); } else ret = ENOTSUP; @@ -2205,7 +2205,7 @@ dsp_oss_audioinfo(struct cdev *i_dev, oss_audioinfo *ai, bool ex) strlcpy(ai->cmd, CHN_COMM_UNKNOWN, sizeof(ai->cmd)); ai->card_number = unit; ai->port_number = unit; - ai->mixer_dev = (d->mixer_dev != NULL) ? unit : -1; + ai->mixer_dev = MIXER_REGISTERED(d->mixer) ? unit : -1; ai->legacy_device = unit; snprintf(ai->devnode, sizeof(ai->devnode), "/dev/dsp%d", unit); ai->enabled = device_is_attached(d->dev) ? 1 : 0; @@ -2451,7 +2451,7 @@ dsp_oss_engineinfo(struct cdev *i_dev, oss_audioinfo *ai) * @todo @c port_number - routing information? */ ai->port_number = unit; - ai->mixer_dev = (d->mixer_dev != NULL) ? unit : -1; + ai->mixer_dev = MIXER_REGISTERED(d->mixer) ? unit : -1; /** * @note * @c legacy_device - OSSv4 docs: "Obsolete." diff --git a/sys/dev/sound/pcm/mixer.c b/sys/dev/sound/pcm/mixer.c index 59892b361b5f..87c9c67cc97a 100644 --- a/sys/dev/sound/pcm/mixer.c +++ b/sys/dev/sound/pcm/mixer.c @@ -679,13 +679,9 @@ int mixer_uninit(device_t dev) { int i; - struct snddev_info *d; struct snd_mixer *m; - d = device_get_softc(dev); - if (d == NULL) - return EBADF; - m = d->mixer; + m = mixer_get_devt(dev); KASSERT(m != NULL, ("NULL snd_mixer")); KASSERT(m->type == MIXER_TYPE_PRIMARY, @@ -695,9 +691,9 @@ mixer_uninit(device_t dev) * snd_uaudio(4) in particular can call mixer_uninit() directly if * attach failed prior to pcm_register(), in which case the cdev will * not have been created. Do not call destroy_dev() unconditionally. - */ - if (d->mixer_dev != NULL) - destroy_dev(d->mixer_dev); + */ + if (MIXER_REGISTERED(m)) + destroy_dev(m->cdev); mtx_lock(&m->lock); @@ -715,9 +711,6 @@ mixer_uninit(device_t dev) mtx_destroy(&m->lock); kobj_delete((kobj_t)m, M_DEVBUF); - d->mixer_dev = NULL; - d->mixer = NULL; - return 0; } @@ -765,7 +758,7 @@ mixer_make_dev(device_t dev) devargs.mda_gid = GID_AUDIO; devargs.mda_mode = 0660; devargs.mda_si_drv1 = sc->mixer; - err = make_dev_s(&devargs, &sc->mixer_dev, "mixer%d", unit); + err = make_dev_s(&devargs, &sc->mixer->cdev, "mixer%d", unit); if (err != 0) { device_printf(dev, "failed to create mixer%d: error %d\n", unit, err); @@ -1148,8 +1141,8 @@ mixer_clone(void *arg, bus_topo_lock(); d = devclass_get_softc(pcm_devclass, snd_unit); /* See related comment in dsp_clone(). */ - if (PCM_REGISTERED(d) && d->mixer_dev != NULL) { - *dev = d->mixer_dev; + if (PCM_REGISTERED(d) && MIXER_REGISTERED(d->mixer)) { + *dev = d->mixer->cdev; dev_ref(*dev); } bus_topo_unlock(); @@ -1246,17 +1239,21 @@ mixer_oss_mixerinfo(struct cdev *i_dev, oss_mixerinfo *mi) PCM_UNLOCKASSERT(d); PCM_LOCK(d); - if (!((d->mixer_dev == i_dev && mi->dev == -1) || - mi->dev == i)) { + if (!MIXER_REGISTERED(d->mixer)) { + if (mi->dev == i) { + mixer_oss_mixerinfo_unavail(mi, i); + PCM_UNLOCK(d); + bus_topo_unlock(); + return (0); + } PCM_UNLOCK(d); continue; } - if (d->mixer == NULL) { - mixer_oss_mixerinfo_unavail(mi, i); + if (!((d->mixer->cdev == i_dev && mi->dev == -1) || + mi->dev == i)) { PCM_UNLOCK(d); - bus_topo_unlock(); - return (0); + continue; } m = d->mixer; diff --git a/sys/dev/sound/pcm/mixer.h b/sys/dev/sound/pcm/mixer.h index fef086dec925..47599e7ddcd8 100644 --- a/sys/dev/sound/pcm/mixer.h +++ b/sys/dev/sound/pcm/mixer.h @@ -34,6 +34,8 @@ #ifndef _PCM_MIXER_H_ #define _PCM_MIXER_H_ +#define MIXER_REGISTERED(x) ((x) != NULL && (x)->cdev != NULL) + #define MIXER_NAMELEN 16 struct snd_mixer { KOBJ_FIELDS; @@ -54,6 +56,7 @@ struct snd_mixer { char name[MIXER_NAMELEN]; struct mtx lock; int modify_counter; + struct cdev *cdev; }; struct snd_mixer *mixer_create(device_t dev, kobj_class_t cls, void *devinfo, diff --git a/sys/dev/sound/pcm/sound.h b/sys/dev/sound/pcm/sound.h index 5b9a12f948b8..0a63acb16832 100644 --- a/sys/dev/sound/pcm/sound.h +++ b/sys/dev/sound/pcm/sound.h @@ -189,7 +189,6 @@ struct snddev_info { device_t dev; char status[SND_STATUSLEN]; struct mtx lock; - struct cdev *mixer_dev; struct cdev *dsp_dev; struct snd_mixer *mixer; uint32_t pvchanrate, pvchanformat, pvchanmode;