linux/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
..
emu10k1_callback.c [ALSA] emu10k1: General cleanup, add new locks, fix alsa bug#3501, kernel bug#9304. 2008-01-31 17:30:24 +01:00
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_local.h [ALSA] Remove sound/driver.h 2008-01-31 17:29:48 +01:00
emu10k1_synth.c [ALSA] emu10k1: General cleanup, add new locks, fix alsa bug#3501, kernel bug#9304. 2008-01-31 17:30:24 +01:00
emu10k1.c [ALSA] Remove sound/driver.h 2008-01-31 17:29:48 +01:00
emu10k1x.c [ALSA] Fix possible races at free_irq in PCI drivers 2008-04-24 12:00:41 +02:00
emufx.c [ALSA] snd:emu10k1: E-Mu updates. Fixes to firmware loading and support for 0404. 2008-01-31 17:30:24 +01:00
emumixer.c [ALSA] emu10k1 - Use enum for emu_model types 2008-01-31 17:30:24 +01:00
emumpu401.c [ALSA] Remove sound/driver.h 2008-01-31 17:29:48 +01:00
emupcm.c [ALSA] snd:emu10k1: E-Mu updates. Fixes to firmware loading and support for 0404. 2008-01-31 17:30:24 +01:00
emuproc.c [ALSA] sound: emuproc.c fix signedness warning 2008-04-24 12:00:18 +02:00
io.c [ALSA] emu10k1: General cleanup, add new locks, fix alsa bug#3501, kernel bug#9304. 2008-01-31 17:30:24 +01:00
irq.c [ALSA] emu10k1: General cleanup, add new locks, fix alsa bug#3501, kernel bug#9304. 2008-01-31 17:30:24 +01:00
Makefile
memory.c [ALSA] Remove sound/driver.h 2008-01-31 17:29:48 +01:00
p16v.c [ALSA] Remove sound/driver.h 2008-01-31 17:29:48 +01:00
p16v.h
p17v.h
timer.c [ALSA] Remove sound/driver.h 2008-01-31 17:29:48 +01:00
tina2.h
voice.c [ALSA] Remove sound/driver.h 2008-01-31 17:29:48 +01:00