panic upon kldunload snd_ich (lor # 159)
Pyun YongHyeon
pyunyh at gmail.com
Wed Sep 14 18:44:38 PDT 2005
On Thu, Sep 15, 2005 at 03:38:48AM +0800, Ariff Abdullah wrote:
>
> On Wed, 14 Sep 2005 10:48:30 +0900
> Pyun YongHyeon <pyunyh at gmail.com> wrote:
> >
> > Thanks for testing. Fix committed to HEAD(sndstat.c rev. 1.21)
> >
> > [ .. ]
> >
> > AFAIK, the LOR is well known to sound developers. Though it's not real
> > LOR(grabbing sx lock while holding mutex) it's difficult to fix.
> >
>
> This is supposed to fix that LOR, I pressume. Please try that.
>
[...]
> --- sys/dev/sound/pcm/sound.c.orig Tue Sep 13 02:58:27 2005
> +++ sys/dev/sound/pcm/sound.c Thu Sep 15 03:29:06 2005
> @@ -807,9 +807,9 @@
> chn_kill(d->fakechan);
> fkchan_kill(d->fakechan);
>
> - sndstat_unregister(dev);
> snd_mtxunlock(d->lock);
> snd_mtxfree(d->lock);
> + sndstat_unregister(dev);
> return 0;
> }
>
That would be supposed to fix the LOR message. But I'd like to keep
lock ordering between snd_mutex and sndstat_lock. Since sndstat_read()
could be called at any time there is an implicit lock order.
I think switching to sx lock from mutex in sndstat code was to allow
uiomove with lock held. IMO, it would be even better to rewrite
sndstat_read() without using uiomove such that it can also use
standard mutex rather than sx lock.
--
Regards,
Pyun YongHyeon
More information about the freebsd-current
mailing list