Date: Mon, 26 May 2008 19:33:05 +0800 From: Ariff Abdullah <ariff@FreeBSD.org> To: Kostik Belousov <kostikbel@gmail.com> Cc: freebsd-current@freebsd.org, d@delphij.net Subject: Re: /dev/soiund/pcm/dsp.c: uma_zalloc with non-sleepable lock held Message-ID: <20080526193305.63459394.ariff@FreeBSD.org> In-Reply-To: <20080526091756.GF21317@deviant.kiev.zoral.com.ua> References: <483A58D9.4090400@delphij.net> <20080526155514.221a210e.ariff@FreeBSD.org> <20080526091756.GF21317@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--Multipart=_Mon__26_May_2008_19_33_05_+0800_6eJ8.9+k.5aFGSab
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
On Mon, 26 May 2008 12:17:56 +0300
Kostik Belousov <kostikbel@gmail.com> wrote:
> On Mon, May 26, 2008 at 03:55:14PM +0800, Ariff Abdullah wrote:
> > On Sun, 25 May 2008 23:29:45 -0700
> > Xin LI <delphij@delphij.net> wrote:
[...]
> >
> > It is something new. Let me examine it first.
>
> Not quite. You cannot hold a mutex over the destroy_dev(), because
> the destroy_dev() may sleep. It was not very common situation,
> because it requires another thread still in the driver methods to
> trigger the problem. Now, because the malloc() is called
> unconditionally in the destroy_dev() since rev. 1.212, the problem
> gets hit regularly.
>
I see. It's quite new to me since I haven't examine things thoroughly
since past few weeks. Thanks.
Xin Li, try this patch.
--
Ariff Abdullah
FreeBSD
... Recording in stereo is obviously too advanced
and confusing for us idiot ***** users :P ........
--Multipart=_Mon__26_May_2008_19_33_05_+0800_6eJ8.9+k.5aFGSab
Content-Type: text/x-diff;
name="dsp.c.diff"
Content-Disposition: attachment;
filename="dsp.c.diff"
Content-Transfer-Encoding: 7bit
Index: src/sys/dev/sound/pcm/dsp.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/sound/pcm/dsp.c,v
retrieving revision 1.108
diff -u -r1.108 dsp.c
--- src/sys/dev/sound/pcm/dsp.c 11 Apr 2008 15:26:25 -0000 1.108
+++ src/sys/dev/sound/pcm/dsp.c 26 May 2008 11:26:54 -0000
@@ -661,7 +661,14 @@
* process.
*/
(void)snd_clone_release(i_dev);
+
+ /*
+ * destroy_dev() might sleep, so release pcm lock
+ * here and rely on pcm cv serialization.
+ */
+ pcm_unlock(d);
(void)snd_clone_unref(i_dev);
+ pcm_lock(d);
}
PCM_RELEASE(d);
}
--Multipart=_Mon__26_May_2008_19_33_05_+0800_6eJ8.9+k.5aFGSab--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20080526193305.63459394.ariff>
