sched_lock mutex and sleepq_wait
Julian Elischer
julian at elischer.org
Tue Feb 23 19:12:21 UTC 2010
Shrivatsan wrote:
> Hi,
>
> I am trying to understand how msleep() routine suspends the currently
> executing thread. I see that msleep() calls sleepq_wait().
>
> What I don't understand here is the way in which sched_lock mutex is
> handled.
>
> I took the following snippet from FreeBSD 6:
>
> sleepq_wait(void *wchan)
> {
> MPASS(!(curthread->td_flags & TDF_SINTR));
> mtx_lock_spin(&sched_lock);
> sleepq_switch(wchan);
----we sleep here-----
some other thread runs, When it wakes up it magicall owns the
schedlock which it releases. then it sleeps and locks schedlock
again.A
----- we get run.. magically the schedlock is changed so that we
own it. now we return, maybe 5 minutes later and must free it.
> mtx_unlock_spin(&sched_lock);
> }
>
> sched_lock mutex is held, and sleepq_switch() eventually calls
> cpu_switch() which switches to a new thread.
>
> I don't exactly understand when the sched_lock mutex is released.
>
> Can someone please help me?
>
> Thanks,
> -shrivatsan
>
>
>
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
More information about the freebsd-hackers
mailing list