Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Jan 2004 14:10:38 +0100
From:      Stefan Ehmann <shoesoft@gmx.net>
To:        Don Lewis <truckman@FreeBSD.org>
Cc:        current@FreeBSD.org
Subject:   Re: sound/pcm/* bugs (was: Re: page fault panic tracked down (selwakeuppri()) - really sound/pcm/*)
Message-ID:  <1074345038.1337.25.camel@shoeserv.freebsd>
In-Reply-To: <200401170915.i0H9FD7E047822@gw.catspoiler.org>

index | next in thread | previous in thread | raw e-mail

On Sat, 2004-01-17 at 10:15, Don Lewis wrote:
> I think this problem can be caused by a transient malloc() M_NOWAIT
> failure.
> 
> Changes in this version of the patch:
> 
> 	When increasing blksz in chn_setblocksize(), increase the size
> 	of bufsoft before increasing bufhard, and decrease bufsoft after
> 	decreasing bufhard in an attempt to avoid the buffer overflow in
> 	feed_vchan_s16().
> 	
> 	Buffers are now allocated using M_WAITOK, requiring locks to
> 	be dropped for the malloc() calls.  This required adding a mutex
> 	parameter to sndbuf_remalloc().
> 
> 	Locking order between parent and child channels is changed.  The
>         parent is now locked first and then the child.  The list of
>         children is protected by the parent's lock.  There are still
>         potential race conditions in the vchan creation/destruction code
>         because all the locks have to be dropped in order to call
>         malloc(), etc.
> 
> 	Locking cleaned up to eliminate the need for MTX_RECURSE.
> 
> 	A new mutex allocator for the channel mutexes was added that
> 	initializes the mutexes with the MTX_DUPOK flags so that multiple
> 	channel mutexes of the same type can be held at once.
> 
> 	Locking simplification in dsp_ioctl().
> 
> 	Added KASSERTs in chn_wrfeed().

Some more observations:

- I haven't run the patched kernel long enough to see if it actually
prevents panics.

- Sometimes when trying to open dsp it fails at the first attempt, but
works if I try again. I had similar experiences when I first used vchans
but these problems have been gone for long.

- This also seems to lock up one of the vchans each time this happens (I
haven't really tested this yet but I'm pretty sure). For instance, if I
try to set the number of vchans to anything lower than 3 right now it
fails saying device busy. My guess would be that those vchans were
locked but never unlocked for some reason.

- If I use esd as output device (e.g. for ogg123 because it doesn't work
properly with the default output) an I stop the player, it takes some
seconds before the sound actually stops playing (until the buffer is
written to dsp). This doesn't happen with unpatched pcm module.


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1074345038.1337.25.camel>