linux-stable-rt/sound/pci/emu10k1
Jaroslav Franek 868e15dbd2 sound: emu10k1 - fix system hang with Audigy2 ZS Notebook PCMCIA card
When the Linux kernel is compiled with CONFIG_DEBUG_SHIRQ=y,
the Soundblaster Audigy2 ZS Notebook PCMCIA card causes the
system hang during boot (udev stage) or when the card is hot-plug.
The CONFIG_DEBUG_SHIRQ flag is by default 'y' with all Fedora
kernels since 2.6.23. The problem was reported as
https://bugzilla.redhat.com/show_bug.cgi?id=326411

The issue was hunted down to the snd_emu10k1_create() routine:

/* pseudo-code */
snd_emu10k1_create(...) {
	...
	request_irq(... IRQF_SHARED ...) {
		register the irq handler
		#ifdef CONFIG_DEBUG_SHIRQ
		call the irq handler: snd_emu10k1_interrupt() {
			poll I/O port   // <---- !! system hangs
			...
		}
		#endif
	}
	...
	snd_emu10k1_cardbus_init(...) {
		initialize I/O ports
	}
	...
}

The early access to I/O port in the interrupt handler causes
the freeze. Obviously it is necessary to init the I/O ports
before accessing them. This patch moves the registration of
the irq handler after the initialization of the I/O ports.

Signed-off-by: Jaroslav Franek <jarin.franek@post.cz>
Acked-by: James Courtier-Dutton <James@superbug.co.uk>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2008-06-06 11:16:06 +02:00
..
Makefile
emu10k1.c
emu10k1_callback.c
emu10k1_main.c sound: emu10k1 - fix system hang with Audigy2 ZS Notebook PCMCIA card 2008-06-06 11:16:06 +02:00
emu10k1_patch.c
emu10k1_synth.c
emu10k1_synth_local.h
emu10k1x.c [ALSA] Fix possible races at free_irq in PCI drivers 2008-04-24 12:00:41 +02:00
emufx.c
emumixer.c
emumpu401.c
emupcm.c
emuproc.c
io.c
irq.c
memory.c
p16v.c
p16v.h
p17v.h
timer.c
tina2.h
voice.c