It think these functions should be returning IRQ_HANDLED, even though they didn't recognise the IRQ. They've just done snd_cs4281_pokeBA0(chip, BA0_HICR, BA0_HICR_EOI); which presumably acks the interrupt anyway. 25-akpm/sound/pci/cs4281.c | 2 +- 25-akpm/sound/pci/cs46xx/cs46xx_lib.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff -puN sound/pci/cs4281.c~irqreturn-sound-2 sound/pci/cs4281.c --- 25/sound/pci/cs4281.c~irqreturn-sound-2 Mon Apr 21 13:27:09 2003 +++ 25-akpm/sound/pci/cs4281.c Mon Apr 21 13:27:30 2003 @@ -1894,7 +1894,7 @@ static irqreturn_t snd_cs4281_interrupt( status = snd_cs4281_peekBA0(chip, BA0_HISR); if ((status & 0x7fffffff) == 0) { snd_cs4281_pokeBA0(chip, BA0_HICR, BA0_HICR_EOI); - return IRQ_NONE; + return IRQ_HANDLED; } if (status & (BA0_HISR_DMA(0)|BA0_HISR_DMA(1)|BA0_HISR_DMA(2)|BA0_HISR_DMA(3))) { diff -puN sound/pci/cs46xx/cs46xx_lib.c~irqreturn-sound-2 sound/pci/cs46xx/cs46xx_lib.c --- 25/sound/pci/cs46xx/cs46xx_lib.c~irqreturn-sound-2 Mon Apr 21 13:27:09 2003 +++ 25-akpm/sound/pci/cs46xx/cs46xx_lib.c Mon Apr 21 13:27:34 2003 @@ -1234,7 +1234,7 @@ static irqreturn_t snd_cs46xx_interrupt( status1 = snd_cs46xx_peekBA0(chip, BA0_HISR); if ((status1 & 0x7fffffff) == 0) { snd_cs46xx_pokeBA0(chip, BA0_HICR, HICR_CHGM | HICR_IEV); - return IRQ_NONE; + return IRQ_HANDLED; } #ifdef CONFIG_SND_CS46XX_NEW_DSP _