summaryrefslogtreecommitdiff
path: root/sound/firewire/fireworks/fireworks.c
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2016-02-20 10:41:01 +0300
committerTakashi Iwai <tiwai@suse.de>2016-02-20 17:46:38 +0300
commit99d7355914d3f97e4419675b938382d72aac0339 (patch)
tree3cc3de1b2ee2fa78970296bc949186aeeff6eac7 /sound/firewire/fireworks/fireworks.c
parent3800e6f944e929ddfcd9320a51e13a67fd1956ff (diff)
downloadlinux-99d7355914d3f97e4419675b938382d72aac0339.tar.xz
ALSA: fireworks: serialize transactions to update connections at bus reset
In IEC 61883-1, at bus-reset, applications can continue isochronous streaming by updating connections. In ALSA fireworks driver, the operation is executed in 'update' handler for bus driver. The connection resources are also changed in process contexts of PCM/MIDI applications. Therefore, bus-reset handling has race condition against connection. Current ALSA fireworks driver has a bug for the condition. This commit fixes the bug, by expand critical section with mutex. As a result, connection updating operation in bus-reset handler and connection changing operation in process context are serialized. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/firewire/fireworks/fireworks.c')
-rw-r--r--sound/firewire/fireworks/fireworks.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/sound/firewire/fireworks/fireworks.c b/sound/firewire/fireworks/fireworks.c
index d5b19bc11e59..8f27b67503c8 100644
--- a/sound/firewire/fireworks/fireworks.c
+++ b/sound/firewire/fireworks/fireworks.c
@@ -301,7 +301,10 @@ static void efw_update(struct fw_unit *unit)
struct snd_efw *efw = dev_get_drvdata(&unit->device);
snd_efw_transaction_bus_reset(efw->unit);
+
+ mutex_lock(&efw->mutex);
snd_efw_stream_update_duplex(efw);
+ mutex_unlock(&efw->mutex);
}
static void efw_remove(struct fw_unit *unit)