sched_lock && thread_lock()

John Baldwin jhb at freebsd.org
Thu May 24 18:08:16 UTC 2007


On Wednesday 23 May 2007 08:11:15 pm Jeff Roberson wrote:
> On Wed, 23 May 2007, Marcel Moolenaar wrote:
> 
> >
> >>> The old patch was missing PowerPC & ia64. Will the final version
> >>> include those as well?
> >> 
> >> There are a couple of uses of the global scheduler lock in some 
> >> architecture specific locations.  They will continue to be safe with the 
> >> 4BSD scheduler.  I intended to work on these issues with the architecture 
> >> maintainers after the threadlock patch goes in.  Can you suggest some 
> >> alternative to sched_lock for pmap_switch in ia64?
> >
> > pmap_switch() is called from cpu_switch() and from pmap_install().
> > So, currently, pmap_install() grabs sched_lock to mimic the
> > cpu_switch() path and we assert having sched_lock in pmap_switch().
> > Basically, any lock that serializes cpu_switch() would work, because
> > we don't want to switch the thread while in the middle of setting up
> > the region registers.
> 
> We could simply use thread_lock() now if this serialization only applies 
> to preventing multiple access to the same thread.

You have to have a spin lock with membar's across cpu_switch() so that 
curthread-private data is consistent after a thread migrates CPUs.  You only 
really need it for migrations if all your migrations are explicit, in which 
case a per-CPU lock for a migration queue where both CPUs (old first, then 
new second) lock the lock during the handoff.

-- 
John Baldwin


More information about the freebsd-arch mailing list