Show stoppers

Mikael Pettersson (mikpe@csd.uu.se)
Mon, 12 Oct 1998 14:24:29 +0200 (MET DST)


Alex Buell writes:
> One of the show stoppers is the inability for the soundcore module to
> unload itself from memory when not in use. Just ran into this one just
> now whilst playing sounds.
>
> When it fails to unload, one can't play sounds again because it's trying
> to load the soundcore module again, and it falls over flat on its face and
> complains bitterly.
>
> I'll have a look at the code and see what's wrong.

Don't bother. Both myself and another person whose name escapes
me have posted fixes. It's just that the fix hasn't made it from
Alan to Linus yet.

The bug is that someone inserted some tests before sb_dsp_unload()
would unload the mixer and midi devices. Unfortunately, the tests
are both unnecessary and incorrectly coded. The end result is that
these devices may not get unloaded, leaving soundcore with a non-zero
reference count.

Below you'll find the fix I'm using since 2.1.122 or so.

Cheers,

/Mikael

[Alan: I notice you only applied the first part of the fix to
2.1.125-ac1 and the new modular sound patch for 2.0.36.
I'm 99.99% certain the second part should also be applied.]

--- linux/drivers/sound/sb_common.c.~1~ Fri Sep 11 01:37:26 1998
+++ linux/drivers/sound/sb_common.c Mon Oct 12 14:09:12 1998
@@ -954,12 +954,11 @@
if (!(devc->caps & SB_NO_AUDIO && devc->caps & SB_NO_MIDI) && devc->irq > 0)
{
free_irq(devc->irq, devc);
- if (devc->my_mixerdev)
- sound_unload_mixerdev(devc->my_mixerdev);
+ sound_unload_mixerdev(devc->my_mixerdev);
/* We don't have to do this bit any more the UART401 is its own
master -- Krzysztof Halasa */
/* But we have to do it, if UART401 is not detected */
- if (!sbmpu && devc->my_mididev)
+ if (!sbmpu)
sound_unload_mididev(devc->my_mididev);
sound_unload_audiodev(devc->my_dev);
}

-
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/