question about preemption code
Kazuaki Oda
kaakun at highway.ne.jp
Sat Feb 25 03:06:29 PST 2006
Hi,
When reading kern_switch.c, I noticed odd difference between !SMP and
SMP in maybe_preempt_in_ksegrp().
In !SMP case:
=================================================================
#ifdef PREEMPTION
#ifndef FULL_PREEMPTION
if (td->td_priority > PRI_MAX_ITHD) {
running_thread->td_flags |= TDF_NEEDRESCHED;
return;
}
#endif /* FULL_PREEMPTION */
=================================================================
In SMP case:
=================================================================
#ifdef PREEMPTION
#if !defined(FULL_PREEMPTION)
if (td->td_priority > PRI_MAX_ITHD) {
running_thread->td_flags |= TDF_NEEDRESCHED;
}
#endif /* ! FULL_PREEMPTION */
=================================================================
Is there any reason not to return after setting TDF_NEEDRESCHED flag
in SMP case? Because of this, we do context switch even if td's
priority is lower than PRI_MAX_ITHD. And, I think, it is not
PREEMPTION, but FULL_PREEMPTION.
----
Kazuaki Oda
More information about the freebsd-hackers
mailing list