From owner-svn-src-head@FreeBSD.ORG Wed Jul 24 09:45:34 2013 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 0DE4D649; Wed, 24 Jul 2013 09:45:34 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E3E9025F4; Wed, 24 Jul 2013 09:45:33 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r6O9jXhx002141; Wed, 24 Jul 2013 09:45:33 GMT (envelope-from avg@svn.freebsd.org) Received: (from avg@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r6O9jWkR002132; Wed, 24 Jul 2013 09:45:32 GMT (envelope-from avg@svn.freebsd.org) Message-Id: <201307240945.r6O9jWkR002132@svn.freebsd.org> From: Andriy Gapon Date: Wed, 24 Jul 2013 09:45:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r253604 - in head/sys: gdb kern ofed/include/linux sys vm X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jul 2013 09:45:34 -0000 Author: avg Date: Wed Jul 24 09:45:31 2013 New Revision: 253604 URL: http://svnweb.freebsd.org/changeset/base/253604 Log: rename scheduler->swapper and SI_SUB_RUN_SCHEDULER->SI_SUB_LAST Also directly call swapper() at the end of mi_startup instead of relying on swapper being the last thing in sysinits order. Rationale: - "RUN_SCHEDULER" was misleading, scheduling already takes place at that stage - "scheduler" was misleading, the function swaps in the swapped out processes - another SYSINIT(SI_SUB_RUN_SCHEDULER, SI_ORDER_ANY) could never be invoked depending on its relative order with scheduler; this was not obvious and the bug actually used to exist Reviewed by: kib (ealier version) MFC after: 14 days Modified: head/sys/gdb/gdb_cons.c head/sys/kern/init_main.c head/sys/kern/kern_ntptime.c head/sys/kern/sched_4bsd.c head/sys/ofed/include/linux/module.h head/sys/sys/kernel.h head/sys/sys/sched.h head/sys/vm/vm.h head/sys/vm/vm_glue.c Modified: head/sys/gdb/gdb_cons.c ============================================================================== --- head/sys/gdb/gdb_cons.c Wed Jul 24 09:15:59 2013 (r253603) +++ head/sys/gdb/gdb_cons.c Wed Jul 24 09:45:31 2013 (r253604) @@ -136,7 +136,7 @@ oktousecallout(void *data __unused) { calloutok = 1; } -SYSINIT(gdbhack, SI_SUB_RUN_SCHEDULER, SI_ORDER_MIDDLE, oktousecallout, NULL); +SYSINIT(gdbhack, SI_SUB_LAST, SI_ORDER_MIDDLE, oktousecallout, NULL); static void gdb_cnputc(struct consdev *cp, int c) Modified: head/sys/kern/init_main.c ============================================================================== --- head/sys/kern/init_main.c Wed Jul 24 09:15:59 2013 (r253603) +++ head/sys/kern/init_main.c Wed Jul 24 09:45:31 2013 (r253604) @@ -243,9 +243,6 @@ restart: /* * Traverse the (now) ordered list of system initialization tasks. * Perform each task, and continue on to the next task. - * - * The last item on the list is expected to be the scheduler, - * which will not return. */ for (sipp = sysinit; sipp < sysinit_end; sipp++) { @@ -303,7 +300,13 @@ restart: } } - panic("Shouldn't get here!"); + mtx_assert(&Giant, MA_OWNED | MA_NOTRECURSED); + mtx_unlock(&Giant); + + /* + * Now hand over this thread to swapper. + */ + swapper(); /* NOTREACHED*/ } @@ -346,7 +349,7 @@ static char wit_warn[] = "WARNING: WITNESS option enabled, expect reduced performance.\n"; SYSINIT(witwarn, SI_SUB_COPYRIGHT, SI_ORDER_THIRD + 1, print_caddr_t, wit_warn); -SYSINIT(witwarn2, SI_SUB_RUN_SCHEDULER, SI_ORDER_THIRD + 1, +SYSINIT(witwarn2, SI_SUB_LAST, SI_ORDER_THIRD + 1, print_caddr_t, wit_warn); #endif @@ -355,7 +358,7 @@ static char diag_warn[] = "WARNING: DIAGNOSTIC option enabled, expect reduced performance.\n"; SYSINIT(diagwarn, SI_SUB_COPYRIGHT, SI_ORDER_THIRD + 2, print_caddr_t, diag_warn); -SYSINIT(diagwarn2, SI_SUB_RUN_SCHEDULER, SI_ORDER_THIRD + 2, +SYSINIT(diagwarn2, SI_SUB_LAST, SI_ORDER_THIRD + 2, print_caddr_t, diag_warn); #endif Modified: head/sys/kern/kern_ntptime.c ============================================================================== --- head/sys/kern/kern_ntptime.c Wed Jul 24 09:15:59 2013 (r253603) +++ head/sys/kern/kern_ntptime.c Wed Jul 24 09:45:31 2013 (r253604) @@ -1051,5 +1051,5 @@ start_periodic_resettodr(void *arg __unu periodic_resettodr, NULL); } -SYSINIT(periodic_resettodr, SI_SUB_RUN_SCHEDULER, SI_ORDER_MIDDLE, +SYSINIT(periodic_resettodr, SI_SUB_LAST, SI_ORDER_MIDDLE, start_periodic_resettodr, NULL); Modified: head/sys/kern/sched_4bsd.c ============================================================================== --- head/sys/kern/sched_4bsd.c Wed Jul 24 09:15:59 2013 (r253603) +++ head/sys/kern/sched_4bsd.c Wed Jul 24 09:45:31 2013 (r253604) @@ -143,7 +143,7 @@ static struct kproc_desc sched_kp = { schedcpu_thread, NULL }; -SYSINIT(schedcpu, SI_SUB_RUN_SCHEDULER, SI_ORDER_FIRST, kproc_start, +SYSINIT(schedcpu, SI_SUB_LAST, SI_ORDER_FIRST, kproc_start, &sched_kp); SYSINIT(sched_setup, SI_SUB_RUN_QUEUE, SI_ORDER_FIRST, sched_setup, NULL); Modified: head/sys/ofed/include/linux/module.h ============================================================================== --- head/sys/ofed/include/linux/module.h Wed Jul 24 09:15:59 2013 (r253603) +++ head/sys/ofed/include/linux/module.h Wed Jul 24 09:45:31 2013 (r253604) @@ -68,17 +68,17 @@ _module_run(void *arg) } #define module_init(fn) \ - SYSINIT(fn, SI_SUB_RUN_SCHEDULER, SI_ORDER_FIRST, _module_run, (fn)) + SYSINIT(fn, SI_SUB_LAST, SI_ORDER_FIRST, _module_run, (fn)) /* * XXX This is a freebsdism designed to work around not having a module * load order resolver built in. */ #define module_init_order(fn, order) \ - SYSINIT(fn, SI_SUB_RUN_SCHEDULER, (order), _module_run, (fn)) + SYSINIT(fn, SI_SUB_LAST, (order), _module_run, (fn)) #define module_exit(fn) \ - SYSUNINIT(fn, SI_SUB_RUN_SCHEDULER, SI_ORDER_FIRST, _module_run, (fn)) + SYSUNINIT(fn, SI_SUB_LAST, SI_ORDER_FIRST, _module_run, (fn)) #define module_get(module) #define module_put(module) Modified: head/sys/sys/kernel.h ============================================================================== --- head/sys/sys/kernel.h Wed Jul 24 09:15:59 2013 (r253603) +++ head/sys/sys/kernel.h Wed Jul 24 09:45:31 2013 (r253604) @@ -79,7 +79,7 @@ extern volatile int ticks; * enumeration values are explicit rather than implicit to provide * for binary compatibility with inserted elements. * - * The SI_SUB_RUN_SCHEDULER value must have the highest lexical value. + * The SI_SUB_LAST value must have the highest lexical value. * * The SI_SUB_SWAP values represent a value used by * the BSD 4.4Lite but not by FreeBSD; it is maintained in dependent @@ -165,7 +165,7 @@ enum sysinit_sub_id { SI_SUB_KTHREAD_IDLE = 0xee00000, /* idle procs*/ SI_SUB_SMP = 0xf000000, /* start the APs*/ SI_SUB_RACCTD = 0xf100000, /* start raccd*/ - SI_SUB_RUN_SCHEDULER = 0xfffffff /* scheduler*/ + SI_SUB_LAST = 0xfffffff /* final initialization */ }; Modified: head/sys/sys/sched.h ============================================================================== --- head/sys/sys/sched.h Wed Jul 24 09:15:59 2013 (r253603) +++ head/sys/sys/sched.h Wed Jul 24 09:45:31 2013 (r253604) @@ -182,7 +182,7 @@ static void name ## _add_proc(void *dumm #name, CTLTYPE_LONG|CTLFLAG_RD|CTLFLAG_MPSAFE, \ ptr, 0, sysctl_dpcpu_long, "LU", descr); \ } \ -SYSINIT(name, SI_SUB_RUN_SCHEDULER, SI_ORDER_MIDDLE, name ## _add_proc, NULL); +SYSINIT(name, SI_SUB_LAST, SI_ORDER_MIDDLE, name ## _add_proc, NULL); #define SCHED_STAT_DEFINE(name, descr) \ DPCPU_DEFINE(unsigned long, name); \ Modified: head/sys/vm/vm.h ============================================================================== --- head/sys/vm/vm.h Wed Jul 24 09:15:59 2013 (r253603) +++ head/sys/vm/vm.h Wed Jul 24 09:45:31 2013 (r253604) @@ -147,6 +147,7 @@ int swap_reserve_by_cred(vm_ooffset_t in void swap_reserve_force(vm_ooffset_t incr); void swap_release(vm_ooffset_t decr); void swap_release_by_cred(vm_ooffset_t decr, struct ucred *cred); +void swapper(void); #endif /* VM_H */ Modified: head/sys/vm/vm_glue.c ============================================================================== --- head/sys/vm/vm_glue.c Wed Jul 24 09:15:59 2013 (r253603) +++ head/sys/vm/vm_glue.c Wed Jul 24 09:45:31 2013 (r253604) @@ -96,16 +96,6 @@ __FBSDID("$FreeBSD$"); #include #include -/* - * System initialization - * - * THIS MUST BE THE LAST INITIALIZATION ITEM!!! - * - * Note: run scheduling should be divorced from the vm system. - */ -static void scheduler(void *); -SYSINIT(scheduler, SI_SUB_RUN_SCHEDULER, SI_ORDER_ANY, scheduler, NULL); - #ifndef NO_SWAPPING static int swapout(struct proc *); static void swapclear(struct proc *); @@ -695,10 +685,8 @@ faultin(p) * * Giant is held on entry. */ -/* ARGSUSED*/ -static void -scheduler(dummy) - void *dummy; +void +swapper(void) { struct proc *p; struct thread *td; @@ -708,9 +696,6 @@ scheduler(dummy) int ppri; int pri; - mtx_assert(&Giant, MA_OWNED | MA_NOTRECURSED); - mtx_unlock(&Giant); - loop: if (vm_page_count_min()) { VM_WAIT; @@ -761,7 +746,7 @@ loop: * Nothing to do, back to sleep. */ if ((p = pp) == NULL) { - tsleep(&proc0, PVM, "sched", MAXSLP * hz / 2); + tsleep(&proc0, PVM, "swapin", MAXSLP * hz / 2); goto loop; } PROC_LOCK(p);