Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 May 2007 23:06:24 +0200
From:      Attilio Rao <attilio@FreeBSD.org>
To:        Tor Egge <Tor.Egge@cvsup.no.freebsd.org>
Cc:        jroberson@chesapeake.net, current@freebsd.org
Subject:   Re: Panic on -CURRENT after LDT changes
Message-ID:  <465B4450.90800@FreeBSD.org>
In-Reply-To: <20070528.162023.41711345.Tor.Egge@cvsup.no.freebsd.org>
References:  <1180138048.94117.17.camel@shumai.marcuscom.com>	<465780A3.8040603@FreeBSD.org>	<1180140483.94117.24.camel@shumai.marcuscom.com> <20070528.162023.41711345.Tor.Egge@cvsup.no.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Tor Egge wrote:
> 
> Finally, I found that i386_ldt_grow() called smp_rendezvous() without
> temporarily unlocking dt_lock.  That caused a deadlock.  Adding a temporary
> unlock of dt_lock seems to solve the problem for me.

Effectively, there is the need to release the dt_lock before to call 
smp_rendezvous() beacause other threads running on other CPUs will 
contest on this lock and it will cause a deadlock (since their 
curthreads don't hold the lock).
I think that mantaining the current locking requirements for 
i386_ldt_grow() is still good, since, for how it is used, this is the 
lighter approach. I will add release/unrelease around smp_rendezvous() too.

Thanks for the catch,
Attilio




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