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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to