Hello All,
Looking through the scheduler code (kern_switch.c) and two functions that stood out were the following: 1. maybe_preempt_in_ksegrp - this function basically checks if the thread being made runnable should preempt another thread that is part of the same ksegrp. This makes sense. What I am having difficulty wrapping my brain around is the fact that if all checks pass, the kernel call mi_switch(SW_INVOL, NULL). The second parameter is NULL. This means that it expects sched_choose to pick a thread from the ksegrp. I would have expected it to say "I am preempting curthread because I am in the same ksegrp but higher priority, therefore switch to me".. the second parameter would have been td? When I compare this with what happens in mybe_preempt, the second parameter to mi_switch is the target thread because we're preempting the curthread (any ksegrp) to run the new thread. This makes sense. 2. Why do we check the state of the kse and make sure it is KES_THREAD. I would imagine that when this function is called, the state is exactly KES_THREAD? What am I missing here? Thanks Ravi Murty _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"