cvs commit: src/sys/vm vm_glue.c

John Baldwin jhb at FreeBSD.org
Thu Jan 29 07:58:36 PST 2004


On Thursday 29 January 2004 07:35 am, Bruce Evans wrote:
> bde         2004/01/29 04:35:11 PST
>
>   FreeBSD src repository
>
>   Modified files:
>     sys/vm               vm_glue.c
>   Log:
>   Fixed breakage of scheduling in rev.1.29 of subr_4bsd.c.  The
>   "scheduler" here has very little to do with scheduling.  It is actually
>   the swapper, and it really must be the last SYSINIT'ed item like its
>   comment says, since proc0 metamorphoses into swapper by calling
>   scheduler() last in mi_start(), and scheduler() never returns..  Rev.1.29
>   of subr_4bsd.c broke this by adding another SI_ORDER_FIRST item
>   (kproc_start() for schedcpu_thread() onto the SI_SUB_RUN_SCHEDULER_LIST.
>   The sorting of SYSINITs with identical orders (at all levels) is
>   apparently nondeterministic, so this resulted in schedule() sometimes
>   being called second last and schedcpu_thread() not being called at all.
>
>   This quick fix just changes the code to almost match the comment
>   (SI_ORDER_FIRST -> SI_ORDER_ANY).  "LAST" is misspelled "ANY", and
>   there is no way to ensure that there is only 1 very lst SYSINIT.
>   A more complete fix would remove the SYSINIT obfuscation.

Wow, good catch.  My bad. :(

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



More information about the cvs-src mailing list