snd-cs4236 (possibly all isa-pnp cards or all alsa isa-pnp cards)broken in 2.6.16-rc4

From: Rene Herman
Date: Mon Feb 20 2006 - 12:16:25 EST


Hi Takashi.

[ Takashi: Adam's wonderful provider is again not accepting mail from my wonderful provider. Could you forward? Also added alsa-devel ]

I noticed on 2.6.16-rc4 that my MPU-401 wasn't functional, due to a
simple copy & paste error in sound/isa/cs423x/cs4236.c:

Index: local/sound/isa/cs423x/cs4236.c
===================================================================
--- local.orig/sound/isa/cs423x/cs4236.c 2006-02-11
00:34:12.000000000 +0100
+++ local/sound/isa/cs423x/cs4236.c 2006-02-20 04:01:29.000000000 +0100
@@ -414,7 +414,7 @@ static int __devinit snd_card_cs423x_pnp
}
/* MPU initialization */
if (acard->mpu && mpu_port[dev] > 0) {
- if (snd_cs423x_pnp_init_mpu(dev, acard->ctrl, cfg) < 0)
+ if (snd_cs423x_pnp_init_mpu(dev, acard->mpu, cfg) < 0)
goto error;
}
kfree(cfg);

Please apply. However, when I tested it (mpu works fine again after
this) I noticed that modprobe -r snd-cs4236 didn't release things --
specifically that the fixed index=1 I have for the card failed on a
subsequent modprobe since ALSA believes that index is still taken.

I stuck a few printks in cs4236.c. From "snd_cs423x_unregister_all",
"pnp_unregister_card_driver(&cs423x_pnpc_driver)" is indeed being called
but the card driver's own remove method, snd_cs423x_pnpc_remove, is not.

I started looking, but ran into the next issue again -- when snd-cs4236
is not card1 but card0, modprobe -r oopses in snd_timer_free (attached)
meaning debugging this wants someone with more of an overview of recent
damage done^W^Wchanges made.

Given that calling pnp_unregister_card_driver() is not cs4236 specific,
I assume the problem is more general. Possibly all ALSA ISA-PnP drivers.
Or, given that pnp_unregister_card_driver is not an ALSA function, maybe
even all ISA-PnP drivers using the card_driver interface.

The more general this problem turns out, the more reason there would be
for fixing this pre 2.6.16, obviously. I can test patches...

Rene.



pnp: Device 01:01.03 disabled.
pnp: Device 01:01.02 disabled.
ALSA sound/isa/cs423x/cs4231_lib.c:208: in: auto calibration time out - reg = 0x18
ALSA sound/isa/cs423x/cs4231_lib.c:187: out: auto calibration time out - reg = 0x10, value = 0x80
ALSA sound/isa/cs423x/cs4231_lib.c:149: outm: auto calibration time out - reg = 0x18, value = 0x0
pnp: Device 01:01.00 disabled.
pnp: the driver 'cs4236_isapnp' has been unregistered
ALSA sound/core/seq/seq_device.c:574: drivers not released (2)
Unable to handle kernel paging request at virtual address f09c6058
printing eip:
f09c6058
*pde = 016d6067
*pte = 00000000
Oops: 0000 [#1]
PREEMPT
Modules linked in: snd_timer snd soundcore snd_page_alloc mga amd_k7_agp drm agpgart nfsd exportfs lockd sunrpc nls_iso8859_1 nls_cp437 vfat fat nls_base
CPU: 0
EIP: 0060:[<f09c6058>] Not tainted VLI
EFLAGS: 00010282 (2.6.16-rc4-local #8)
EIP is at 0xf09c6058
eax: ec20f400 ebx: ec20f400 ecx: ec20f4e8 edx: f09c6058
esi: b7f0417c edi: 00000000 ebp: e627a000 esp: e627af54
ds: 007b es: 007b ss: 0068
Process modprobe (pid: 1359, threadinfo=e627a000 task=e8291ad0)
Stack: <0>f09b20f2 e62610e8 f09b3c20 f09b5bc0 c0126529 00000000 5f646e73 656d6974
c0130072 ffffffff e65d322c b7f14000 c0137f6c b7f13000 b7f14000 b7f14000
e65d33e4 ef12cae0 ef12cb10 ffff0001 0027a000 c0137fae 0805c3f8 b7f0417c
Call Trace:
[<f09b20f2>] snd_timer_free+0x3b/0x46 [snd_timer]
[<f09b3c20>] alsa_timer_exit+0x27/0x42 [snd_timer]
[<c0126529>] sys_delete_module+0x12b/0x155
[<c0130072>] __pdflush+0x196/0x1ac
[<c0137f6c>] do_munmap+0xe2/0xef
[<c0137fae>] sys_munmap+0x35/0x4d
[<c0102551>] syscall_call+0x7/0xb
Code: Bad EIP value.