]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Add a mechanism for associating a mutex with a callout when the
authorIan Dowse <iedowse@FreeBSD.org>
Mon, 7 Feb 2005 02:47:33 +0000 (02:47 +0000)
committerIan Dowse <iedowse@FreeBSD.org>
Mon, 7 Feb 2005 02:47:33 +0000 (02:47 +0000)
commit98c926b20fcc0953abe69be05b43e9cfc95b2c47
tree5dea023d3d1cd872af007610de788883258c40c1
parentb542a023e588ac247ef854dad63e2992de10014d
Add a mechanism for associating a mutex with a callout when the
callout is first initialised, using a new function callout_init_mtx().
The callout system will acquire this mutex before calling the callout
function and release it on return.

In addition, the callout system uses the mutex to avoid most of the
complications and race conditions inherent in asynchronous timer
facilities, so mutex-protected callouts have much simpler semantics.
As long as the mutex is held when invoking callout_stop() or
callout_reset(), then these functions will guarantee that the callout
will be stopped, even if softclock() had already begun to process
the callout.

Existing Giant-locked callouts will automatically pick up the new
race-free semantics. This should close a number of race conditions
in the USB code and probably other areas of the kernel too.

There should be no change in behaviour for "MP-safe" callouts; these
still need to use the techniques mentioned in timeout(9) to avoid
race conditions.
share/man/man9/Makefile
share/man/man9/timeout.9
sys/kern/kern_timeout.c
sys/sys/callout.h