OSDN Git Service

ALSA: fireworks/bebob: Shorten critical section for stream_stop_duplex()
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 4 Jun 2014 06:25:32 +0000 (15:25 +0900)
committerTakashi Iwai <tiwai@suse.de>
Wed, 4 Jun 2014 12:35:24 +0000 (14:35 +0200)
All assignment for local variables in these functions are not related to
critical section.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/bebob/bebob_stream.c
sound/firewire/fireworks/fireworks_stream.c

index bc4f827..ef4d0c9 100644 (file)
@@ -655,8 +655,6 @@ void snd_bebob_stream_stop_duplex(struct snd_bebob *bebob)
        struct amdtp_stream *master, *slave;
        atomic_t *master_substreams, *slave_substreams;
 
-       mutex_lock(&bebob->mutex);
-
        if (bebob->master == &bebob->rx_stream) {
                slave  = &bebob->tx_stream;
                master = &bebob->rx_stream;
@@ -669,6 +667,8 @@ void snd_bebob_stream_stop_duplex(struct snd_bebob *bebob)
                master_substreams = &bebob->capture_substreams;
        }
 
+       mutex_lock(&bebob->mutex);
+
        if (atomic_read(slave_substreams) == 0) {
                amdtp_stream_pcm_abort(slave);
                amdtp_stream_stop(slave);
index 5415690..b985fc5 100644 (file)
@@ -284,8 +284,6 @@ void snd_efw_stream_stop_duplex(struct snd_efw *efw)
        struct amdtp_stream *master, *slave;
        atomic_t *master_substreams, *slave_substreams;
 
-       mutex_lock(&efw->mutex);
-
        if (efw->master == &efw->rx_stream) {
                slave  = &efw->tx_stream;
                master = &efw->rx_stream;
@@ -298,6 +296,8 @@ void snd_efw_stream_stop_duplex(struct snd_efw *efw)
                master_substreams = &efw->capture_substreams;
        }
 
+       mutex_lock(&efw->mutex);
+
        if (atomic_read(slave_substreams) == 0) {
                stop_stream(efw, slave);