瀏覽代碼

[ALSA] bt87X: fix freeing of shared interrupt

Call free_irq() after iounmap() because other devices could trigger our
shared interrupt handler.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Clemens Ladisch 17 年之前
父節點
當前提交
2f93d797ea
共有 1 個文件被更改,包括 3 次插入6 次删除
  1. 3 6
      sound/pci/bt87x.c

+ 3 - 6
sound/pci/bt87x.c

@@ -681,15 +681,12 @@ static struct snd_kcontrol_new snd_bt87x_capture_source = {
 
 
 static int snd_bt87x_free(struct snd_bt87x *chip)
 static int snd_bt87x_free(struct snd_bt87x *chip)
 {
 {
-	if (chip->mmio) {
+	if (chip->mmio)
 		snd_bt87x_stop(chip);
 		snd_bt87x_stop(chip);
-		if (chip->irq >= 0)
-			synchronize_irq(chip->irq);
-
-		iounmap(chip->mmio);
-	}
 	if (chip->irq >= 0)
 	if (chip->irq >= 0)
 		free_irq(chip->irq, chip);
 		free_irq(chip->irq, chip);
+	if (chip->mmio)
+		iounmap(chip->mmio);
 	pci_release_regions(chip->pci);
 	pci_release_regions(chip->pci);
 	pci_disable_device(chip->pci);
 	pci_disable_device(chip->pci);
 	kfree(chip);
 	kfree(chip);