summaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2008-03-22 10:11:08 +0100
committerTakashi Iwai <tiwai@suse.de>2008-04-24 12:00:30 +0200
commit95866d38028c98ea4d6df6947f6ea3fd77334382 (patch)
tree764c1813ca0d4102078ede92be81cb565b3094d4 /sound/pci
parentcd97f47df377d2371940b69fa4c8b4d99a980580 (diff)
downloadkernel-crypto-95866d38028c98ea4d6df6947f6ea3fd77334382.tar.gz
kernel-crypto-95866d38028c98ea4d6df6947f6ea3fd77334382.tar.xz
kernel-crypto-95866d38028c98ea4d6df6947f6ea3fd77334382.zip
[ALSA] ymfpci - Fix race at removal
free_irq() must be called first to avoid races at removal. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/ymfpci/ymfpci_main.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c
index 42c1eb7d35f..29b3056c510 100644
--- a/sound/pci/ymfpci/ymfpci_main.c
+++ b/sound/pci/ymfpci/ymfpci_main.c
@@ -2249,6 +2249,8 @@ static int snd_ymfpci_free(struct snd_ymfpci *chip)
#ifdef CONFIG_PM
vfree(chip->saved_regs);
#endif
+ if (chip->irq >= 0)
+ free_irq(chip->irq, chip);
release_and_free_resource(chip->mpu_res);
release_and_free_resource(chip->fm_res);
snd_ymfpci_free_gameport(chip);
@@ -2257,8 +2259,6 @@ static int snd_ymfpci_free(struct snd_ymfpci *chip)
if (chip->work_ptr.area)
snd_dma_free_pages(&chip->work_ptr);
- if (chip->irq >= 0)
- free_irq(chip->irq, chip);
release_and_free_resource(chip->res_reg_area);
pci_write_config_word(chip->pci, 0x40, chip->old_legacy_ctrl);