]> rtime.felk.cvut.cz Git - linux-imx.git/commitdiff
ALSA: firewire-speakers: fix locking
authorStefan Richter <stefanr@s5r6.in-berlin.de>
Sat, 27 Aug 2011 14:45:28 +0000 (16:45 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 4 Oct 2011 05:16:31 +0000 (07:16 +0200)
There is a lock inversion between fwspk->mutex and pcm->open_mutex
reported by lockdep when fwspk_hw_free is called.

Fixed by copying the fix from the same former issue in the isight
sound driver (commit f3f7c1837f6bcae3601fc535b339426868bf1549
"ALSA: isight: fix locking").

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/speakers.c

index 3fc257da180ce0076d6af792046d1c64cfb584cb..cbe6bb9e53b6fa2a268580da649f78885ca31863 100644 (file)
@@ -778,9 +778,10 @@ static int __devexit fwspk_remove(struct device *dev)
 {
        struct fwspk *fwspk = dev_get_drvdata(dev);
 
-       mutex_lock(&fwspk->mutex);
        amdtp_out_stream_pcm_abort(&fwspk->stream);
        snd_card_disconnect(fwspk->card);
+
+       mutex_lock(&fwspk->mutex);
        fwspk_stop_stream(fwspk);
        mutex_unlock(&fwspk->mutex);
 
@@ -796,8 +797,8 @@ static void fwspk_bus_reset(struct fw_unit *unit)
        fcp_bus_reset(fwspk->unit);
 
        if (cmp_connection_update(&fwspk->connection) < 0) {
-               mutex_lock(&fwspk->mutex);
                amdtp_out_stream_pcm_abort(&fwspk->stream);
+               mutex_lock(&fwspk->mutex);
                fwspk_stop_stream(fwspk);
                mutex_unlock(&fwspk->mutex);
                return;