From: "Rafael J. Wysocki" The following patch adds free_irq() and request_irq() to the suspend and resume, respectively, routines in the snd_intel8x0 driver. The problem is that, apparently, some out-of-order interrupts may be generated during resume and if some drivers do not call free_irq() on suspend, these interrupts are mishandled. For reference please see http://bugzilla.kernel.org/show_bug.cgi?id=4416 and http://sourceforge.net/mailarchive/message.php?msg_id=12448907 Signed-off-by: Rafael J. Wysocki Signed-off-by: Andrew Morton --- sound/pci/intel8x0.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletion(-) diff -puN sound/pci/intel8x0.c~intel8x0-free-irq-in-suspend sound/pci/intel8x0.c --- 25/sound/pci/intel8x0.c~intel8x0-free-irq-in-suspend Tue Jul 26 13:32:04 2005 +++ 25-akpm/sound/pci/intel8x0.c Tue Jul 26 13:32:04 2005 @@ -2373,6 +2373,8 @@ static int intel8x0_suspend(snd_card_t * for (i = 0; i < 3; i++) if (chip->ac97[i]) snd_ac97_suspend(chip->ac97[i]); + if (chip->irq >= 0) + free_irq(chip->irq, (void *)chip); pci_disable_device(chip->pci); return 0; } @@ -2384,7 +2386,14 @@ static int intel8x0_resume(snd_card_t *c pci_enable_device(chip->pci); pci_set_master(chip->pci); - snd_intel8x0_chip_init(chip, 0); + if (request_irq(chip->irq, snd_intel8x0_interrupt, SA_INTERRUPT|SA_SHIRQ, card->shortname, (void *)chip)) { + snd_printk("unable to grab IRQ %d\n", chip->irq); + chip->irq = -1; + pci_disable_device(chip->pci); + return -EBUSY; + } + synchronize_irq(chip->irq); + snd_intel8x0_chip_init(chip, 1); /* refill nocache */ if (chip->fix_nocache) _