CVSROOT:        /cvs
Module name:    src
Changes by:     [email protected] 2020/11/10 10:26:55

Modified files:
        sys/kern       : kern_time.c 
        sys/sys        : proc.h 

Log message:
setitimer(2): ITIMER_REAL: protect state with per-process mutex ps_mtx

To unlock getitimer(2) and setitimer(2) we need to protect the
per-process ITIMER_REAL state with something other than the kernel
lock.  As the ITIMER_REAL timeout callback realitexpire() runs at
IPL_SOFTCLOCK the per-process mutex ps_mtx is appropriate.

In setitimer() we need to use ps_mtx instead of the global itimer_mtx
if the given timer is ITIMER_REAL.  Easy.

The ITIMER_REAL timeout callback routine realitexpire() is trickier.
When we enter ps_mtx during the callback we need to check if the timer
was cancelled or rescheduled.  A thread from the process can call
setitimer(2) at the exact moment the callback is about to run from
timeout_run() (see kern_timeout.c).

Update the locking annotation in sys/proc.h accordingly.

ok anton@

Reply via email to