Doubts with scheduler code

Anand H. Krishnan anandhkrishnan at gmail.com
Tue Jan 2 11:08:42 UTC 2007


Hi,

I had a couple of doubts when I was going through 6.1 freebsd code.

* First one is in the  wakeup() code. After a series of calls wakeup()
lands in maybe_preempt() and if preemption is enabled maybe_preempt()
switches to a new thread (if a high priority thread has been made runnable).
That means that an interrupt handler which calls wakeup() will not return
immediately. (I'm looking @ ULE scheduler).

So is there a problem when wakeup() is called from high priority (fast interr
upt) handlers ?

* Second one is in spinlock code. Can anyone say why critical_enter is
called from spinlock_enter() ? The only thing that critical_enter seems to
be doing is to increment td_critnest which probably helps in finding out
whether a thread can be pre-empted or not. But spinlock_enter() disables
interrupts and I fail to understand how can any thread become runnable
and get scheduled in between.

I've one more..

* msleep() allows a thread to change it's priority when it gets woken up and
in many places they gets woken up with very high priority indeed. Is there
any convincing reason as to why it should be ?

Thanks,
Anand


More information about the freebsd-hackers mailing list