cvs commit: src/sys/vm vm_glue.c
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
> 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-all