mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-28 19:34:43 +01:00
snd_uaudio: Lock usbd_transfer_start() in uaudio_mixer_ctl_set()
This section would be previously locked by sound(4)'s mixer lock (seee87654db5a("snd_uaudio: Stop using mixer_get_lock()")), but snd_uaudio(4) no longer uses it. This particular code path was missed during testing, because my sound card does not reach it. Fixes:9a00e0b8ca("snd_uaudio: Do not use snd_mixer->lock as mixer_lock") Reported by: netchild Tested by: netchild Sponsored by: The FreeBSD Foundation MFC after: 6 days
This commit is contained in:
1 parent
7b2702ee25
commit
fc9dc84823
1 file changed
+6
-4
@@ -5386,8 +5386,8 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int val)
|
||||
}
|
||||
|
||||
static void
|
||||
uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct uaudio_mixer_node *mc,
|
||||
uint8_t chan, int val)
|
||||
uaudio_mixer_ctl_set(struct uaudio_softc *sc, unsigned index,
|
||||
struct uaudio_mixer_node *mc, uint8_t chan, int val)
|
||||
{
|
||||
val = uaudio_mixer_bsd2value(mc, val);
|
||||
|
||||
@@ -5396,7 +5396,9 @@ uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct uaudio_mixer_node *mc,
|
||||
|
||||
/* start the transfer, if not already started */
|
||||
|
||||
mtx_lock(&sc->sc_child[index].mixer_lock);
|
||||
usbd_transfer_start(sc->sc_mixer_xfer[0]);
|
||||
mtx_unlock(&sc->sc_child[index].mixer_lock);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -5482,7 +5484,7 @@ uaudio_mixer_set(struct uaudio_softc *sc, struct snd_mixer *m,
|
||||
for (mc = sc->sc_mixer_root; mc != NULL; mc = mc->next) {
|
||||
if (mc->ctl == type) {
|
||||
for (chan = 0; chan < mc->nchan; chan++) {
|
||||
uaudio_mixer_ctl_set(sc, mc, chan,
|
||||
uaudio_mixer_ctl_set(sc, index, mc, chan,
|
||||
chan == 0 ? left : right);
|
||||
}
|
||||
}
|
||||
@@ -5523,7 +5525,7 @@ uaudio_mixer_setrecsrc(struct uaudio_softc *sc, struct snd_mixer *m, uint32_t sr
|
||||
for (i = mc->minval; (i > 0) && (i <= mc->maxval); i++) {
|
||||
if (temp != (1U << mc->slctrtype[i - 1]))
|
||||
continue;
|
||||
uaudio_mixer_ctl_set(sc, mc, 0, i);
|
||||
uaudio_mixer_ctl_set(sc, index, mc, 0, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user