Page MenuHomeFreeBSD

D60464.id189048.diff
No OneTemporary

D60464.id189048.diff

diff --git a/sys/dev/sound/pci/maestro3.c b/sys/dev/sound/pci/maestro3.c
--- a/sys/dev/sound/pci/maestro3.c
+++ b/sys/dev/sound/pci/maestro3.c
@@ -1122,6 +1122,12 @@
uint8_t event;
event = m3_rd_1(sc, HW_VOL_COUNTER_MASTER);
+ /*
+ * The mixer_hwvol_*() functions can end up taking sound(4)'s
+ * channel lock, but m3_pchan_trigger() takes sc_lock with the
+ * channel lock already held, which can cause a LOR.
+ */
+ M3_UNLOCK(sc);
switch (event) {
case 0x99:
mixer_hwvol_mute(sc->dev);
@@ -1137,6 +1143,7 @@
default:
device_printf(sc->dev, "Unknown HWVOL event\n");
}
+ M3_LOCK(sc);
m3_wr_1(sc, HW_VOL_COUNTER_MASTER, 0x88);
}

File Metadata

Mime Type
text/plain
Expires
Sat, Oct 10, 7:23 AM (14 h, 24 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40484129
Default Alt Text
D60464.id189048.diff (676 B)

Event Timeline