kldunload Ratal trap 12: page fault

Matthew Dillon dillon at apollo.backplane.com
Mon Jan 5 12:24:58 PST 2004


    Ok, I found it.   Here is the dependancy:

    snd_sb16	depends on snd_pcm and snd_sbc
    snd_sbc	depends on snd_pcm
    snd_pcm

    The problem is that snd_sbc is not bumping the ref count on snd_pcm.
    If you attempt to kldload snd_sbc manually, with no other sound modules
    loaded, it will fail trying to find a symbol.  It will not load snd_pcm.

    When you try to load snd_sb16, it forces snd_sbc and snd_pcm to be loaded.
    But when you unload snd_sb16, since there is no information on the
    sbc->pcm dependancy, snd_sb16 will happily unload snd_pcm BEFORE 
    unload snd_sb16.

    The fix is to add the appropriate KMODDEPS to the Makefile for sbc
    (/usr/src/sys/dev/sound/driver/sbc/Makefile), which I just did.

    --

    Ok, so what about the MODULE_DEPEND() lines in the module source code?
    We implement the proper linker sets to support MODULE_DPEND(), but we
    do not yet implement code to actually use them.  FreeBSD-5, but it's
    a terrible hack.

    What needs to be done in DragonFly is to (A) load the modules associated
    with MODULE_DEPEND() linker sets in the kld, (B) restrict the
    dynamic linking symbol lookups to just those symbols available from the
    kernel and specified MODULE_DEPEND() lines, and (C) remove the global
    symbol data and make it per-module like it should have been in the first
    place.

    FreeBSD-5 does (A) but does not do (B) or (C) (as far as I can tell).

					-Matt





More information about the Bugs mailing list