Re: [2.1.132] Modularized sound oops, OPL3-SA1

Bob McElrath (mcelrath@draal.physics.wisc.edu)
Fri, 25 Dec 1998 11:23:00 -0600 (EST)


The pas2 has the same problem. I fixed it with the following code (which
you should be able to apply with a few modifications to opl3):

void unload_pas(struct address_info *hw_config)
{
free_irq(hw_config->irq, NULL);
sound_free_dma(hw_config->dma);
release_region(hw_config->io_base, 4);
sound_unload_mixerdev(audio_devs[pas_audiodev]->mixer_dev);
sound_unload_mididev(pas2_midi_dev);
sound_unload_audiodev(pas_audiodev);
}

the sound_unload calls decrement the usage for soundcore. I inserted them
for the pas2 and now it unloads properly. (Making testing patches on the
driver MUCH easier!) release_region releases i/o portspace, and free_irq
and free_dma should be self-explanatory.

drivers/sound/opl3sa.c should have a similar function to unload_pas...

good luck!

On Thu, 24 Dec 1998, Chris Noe wrote:

>
> Linux iniquity 2.1.132 #112 Thu Dec 24 00:40:38 MST 1998 i586 unknown
>
> With a modularized opl3sa1 sound card setup, it looks like soundcore.o's
> MOD_USE_COUNT is never fully decremented, even when all it's child modules
> are (auto or manually) unloaded, and the next attempt at autoloading the
> sound modules causes an oops.
>
> Relevant /etc/conf.modules:
> ---------------------------
> alias block-major-14 sound
> alias sound opl3sa
> post-install opl3sa /usr/local/bin/aumix -m 0 -x 0 -w 70 -s 32 -i 4 -c 20
> options opl3sa io=0x530 irq=11 dma=0 dma2=1 mpu_io=0x330 mpu_irq=5
> options opl3 io=0x388
>
> Relevant .config:
> -----------------
> CONFIG_MODULES=y
> CONFIG_MODVERSIONS=y
> CONFIG_KMOD=y
> #
> # Sound
> #
> CONFIG_SOUND=m
> CONFIG_SOUND_OSS=m
> CONFIG_SOUND_OPL3SA1=m
> CONFIG_SOUND_SOFTOSS=m
> CONFIG_SOUND_YM3812=m
> CONFIG_SOUND_VMIDI=m
>
> Script started on Thu Dec 24 20:29:05 1998
> iniquity:~# lsmod
> Module Size Used by
> isofs 17544 1 (autoclean)
> ide-cd 20340 1 (autoclean)
> cdrom 11180 0 (autoclean) [ide-cd]
> opl3sa 1944 0 (autoclean)
> uart401 5624 0 (autoclean) [opl3sa]
> ad1848 14220 0 (autoclean) [opl3sa]
> sound 56152 0 (autoclean) [opl3sa uart401 ad1848]
> soundcore 1948 6 (autoclean) [sound]
> nls_iso8859-1 2016 2 (autoclean)
> nls_cp437 3540 1 (autoclean)
> vfat 13652 1 (autoclean)
> fat 24472 1 (autoclean) [vfat]
> iniquity:~# rmmod -a
> iniquity:~# rmmod -a
> iniquity:~# lsmod
> Module Size Used by
> isofs 17544 1 (autoclean)
> ide-cd 20340 1 (autoclean)
> cdrom 11180 0 (autoclean) [ide-cd]
> soundcore 1948 1 (autoclean)
> nls_iso8859-1 2016 2 (autoclean)
> nls_cp437 3540 1 (autoclean)
> vfat 13652 1 (autoclean)
> fat 24472 1 (autoclean) [vfat]
> iniquity:~# echo "" >/dev/dsp
> (oopsen below)
>
> Unable to handle kernel paging request at virtual address c382916c
> current->tss.cr3 = 02652000, %cr3 = 02652000
> *pde = 0009c063
> Oops: 0000
> CPU: 0
> EIP: 0010:[<c381b2a2>]
> EFLAGS: 00010246
> eax: c3829150 ebx: c26db840 ecx: 00000003 edx: 00000003
> esi: c01ab860 edi: c01ab860 ebp: c263d8a0 esp: c2655f54
> ds: 0018 es: 0018 ss: 0018
> Process bash (pid: 95, process nr: 13, stackpage=c2655000)
> Stack: c0123e5e c01ab860 c26db840 c26db840 00000000 c01ab860 c0122bfb c01ab860
> c26db840 00000003 00000003 c25d4000 000001b6 c0122c81 c25d4000 00000241
> 0122d8d c25d4000 00000241 000001b6 00000003 c2654000
> Call Trace: [<c0123e5e>] [<c0122bfb>] [<c0122c81>] [<c0122d8d>] [<c0108804>]
> Code: 8b 40 1c 85 c0 74 0b 53 56 ff d0 83 c4 08 5b 5e c3 90 31 c0
> Warning: trailing garbage ignored on Code: line
> Text: 'Code: 8b 40 1c 85 c0 74 0b 53 56 ff d0 83 c4 08 5b 5e c3 90 31 c0'
> Garbage: 'c0'
>
> >>EIP: c381b2a2 <soundcore_open+42/6c>
> Trace: c0123e5e <chrdev_open+3e/4c>
> Trace: c0122bfb <filp_open+af/11c>
> Trace: c0122c81 <do_open+19/44>
> Trace: c0122d8d <sys_open+39/68>
> Trace: c0108804 <system_call+34/40>
> Code: c381b2a2 <soundcore_open+42/6c> 00000000 <_EIP>:
> Code: c381b2a2 <soundcore_open+42/6c> 0: 8b 40 1c movl 0x1c(%eax),%eax
> Code: c381b2a5 <soundcore_open+45/6c> 3: 85 c0 testl %eax,%eax
> Code: c381b2a7 <soundcore_open+47/6c> 5: 74 0b je 12 <_EIP+0x12> c381b2b4 <soundcore_open+54/6c>
> Code: c381b2a9 <soundcore_open+49/6c> 7: 53 pushl %ebx
> Code: c381b2aa <soundcore_open+4a/6c> 8: 56 pushl %esi
> Code: c381b2ab <soundcore_open+4b/6c> 9: ff d0 call *%eax
> Code: c381b2ad <soundcore_open+4d/6c> b: 83 c4 08 addl $0x8,%esp
> Code: c381b2b0 <soundcore_open+50/6c> e: 5b popl %ebx
> Code: c381b2b1 <soundcore_open+51/6c> f: 5e popl %esi
> Code: c381b2b2 <soundcore_open+52/6c> 10: c3 ret
> Code: c381b2b3 <soundcore_open+53/6c> 11: 90 nop
> Code: c381b2b4 <soundcore_open+54/6c> 12: 31 00 xorl %eax,(%eax)
> Code: c381b2b6 <soundcore_open+56/6c> 14:
>
> The same behavior occurs when all the appropriate modules are loaded by
> hand: modprobe opl3sa io=xxx irq=xxx, etc. (i.e. soundcore.o never
> unloads, next access oopses)
>
> Bummer, it stinks to find stuff like this so close to 2.2 :(
>
> Chris Noe
> (stiker@northlink.com)
>
> --
> ---------------------------------------------------------
> #!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj
> $/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1
> lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
> ---- http://online.offshore.com.ai/arms-trafficker/ -----
>
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.rutgers.edu
> Please read the FAQ at http://www.tux.org/lkml/
>

-- Bob

Bob McElrath (mcelrath@draal.physics.wisc.edu) Univ. of Wisconsin at Madison

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/