[alsa-devel] HDA record fails with FIFO error

Takashi Iwai tiwai at suse.de
Thu Apr 7 12:10:31 CEST 2011

At Thu, 7 Apr 2011 16:54:50 +0800,
Xu, Andiry wrote:
> Hi Takashi,
> Currently I encountered an HD audio issue reported by customer on a
> Lenovo x100e system. Sometimes, but not always, when starting a
> recording stream through the HDA controller, the controller generates a
> large amount of interrupts (~40 000 interrupts per second). After this
> has happened, jack sense (i e unsolicited events from the codec) stops
> working until the next system reboot.
> SD0STS returns a FIFO error (0x28) in interrupt handler. The interrupt
> service routine acknowledges this error but does not do anything to
> counteract the root cause to the problem, so it appears again and again.
> Restarting the stream does not seem to help. Enable MSI or not does not
> help either.
> The issue occurs on 2.6.35 and 2.6.38-rc8+, have not tried latest kernel
> yet but I think it's also there. FIFO error indicates FIFO overrun
> occurring while the RUN bit is set, but the driver simply acknowledge
> and clear the error. I wonder what the root cause and the right
> treatment are in this case. Any suggestions? 

FIFO_ERR is actually never handled, so basically we can ignore.
Simply disabling it like below works around your problem?

Of course, a proper handling of FIFO error would be better, but
this may need more code rewrites.



diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 70a9d32..a88baf4 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -285,7 +285,7 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
 #define SD_INT_DESC_ERR		0x10	/* descriptor error interrupt */
 #define SD_INT_FIFO_ERR		0x08	/* FIFO error interrupt */
 #define SD_INT_COMPLETE		0x04	/* completion interrupt */
 /* SD_STS */

More information about the Alsa-devel mailing list