-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Ravi Murty wrote: > Hello All, > > The implementation of critical_enter and critical_exit changed between > freebsd 5 and freebsd 6. In the newer implemtnation, the code checks if > td_critnest is 1 and if it is sets it to zero, then checks if the thread > owes a preempt. If so, it increments td_critnest by 1 before grabbing a lock > and then decrements it back to zero. I can't figure out why it does this. > The freebsd 5 implementation seems straightforward where we check if the > thread owes a preempt and if so we switch to the new thread. Can anyone help > me with this?
My guess is to prevent race conditions (i.e. to split the owepreempt flag into a separate variable), since this value could be changed in an interrupt context, and not only during the current thread context. Cheers, - -- Xin LI <[email protected]> http://www.delphij.net/ FreeBSD - The Power to Serve! -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (FreeBSD) iEYEARECAAYFAklF7lUACgkQi+vbBBjt66C0sQCeOZCFZu4VBTRk3it4/424pAbc LRoAoLfdoS09ZX2SSZ1Z/SOw+rqkrkQ0 =P2Ez -----END PGP SIGNATURE----- _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[email protected]"

