Module Name: src Committed By: elad Date: Sat Oct 3 22:32:57 UTC 2009
Modified Files: src/sys/kern: init_main.c kern_synch.c sys_sched.c src/sys/sys: sched.h Log Message: - Move sched_listener and co. from kern_synch.c to sys_sched.c, where it really belongs (suggested by rmind@), - Rename sched_init() to synch_init(), and introduce a new sched_init() in sys_sched.c where we (a) initialize the sysctl node (no more link-set) and (b) listen on the process scope with sched_listener. Reviewed by and okay rm...@. To generate a diff of this commit: cvs rdiff -u -r1.404 -r1.405 src/sys/kern/init_main.c cvs rdiff -u -r1.269 -r1.270 src/sys/kern/kern_synch.c cvs rdiff -u -r1.33 -r1.34 src/sys/kern/sys_sched.c cvs rdiff -u -r1.70 -r1.71 src/sys/sys/sched.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/init_main.c diff -u src/sys/kern/init_main.c:1.404 src/sys/kern/init_main.c:1.405 --- src/sys/kern/init_main.c:1.404 Fri Oct 2 22:18:57 2009 +++ src/sys/kern/init_main.c Sat Oct 3 22:32:56 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: init_main.c,v 1.404 2009/10/02 22:18:57 elad Exp $ */ +/* $NetBSD: init_main.c,v 1.405 2009/10/03 22:32:56 elad Exp $ */ /*- * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc. @@ -97,7 +97,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.404 2009/10/02 22:18:57 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.405 2009/10/03 22:32:56 elad Exp $"); #include "opt_ddb.h" #include "opt_ipsec.h" @@ -398,6 +398,8 @@ turnstile_init(); sleeptab_init(&sleeptab); + sched_init(); + /* Initialize processor-sets */ psets_init(); @@ -780,7 +782,7 @@ /* Setup the runqueues and scheduler. */ runq_init(); - sched_init(); + synch_init(); /* * Bus scans can make it appear as if the system has paused, so Index: src/sys/kern/kern_synch.c diff -u src/sys/kern/kern_synch.c:1.269 src/sys/kern/kern_synch.c:1.270 --- src/sys/kern/kern_synch.c:1.269 Sat Oct 3 21:21:56 2009 +++ src/sys/kern/kern_synch.c Sat Oct 3 22:32:56 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kern_synch.c,v 1.269 2009/10/03 21:21:56 elad Exp $ */ +/* $NetBSD: kern_synch.c,v 1.270 2009/10/03 22:32:56 elad Exp $ */ /*- * Copyright (c) 1999, 2000, 2004, 2006, 2007, 2008, 2009 @@ -69,7 +69,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.269 2009/10/03 21:21:56 elad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.270 2009/10/03 22:32:56 elad Exp $"); #include "opt_kstack.h" #include "opt_perfctrs.h" @@ -97,7 +97,6 @@ #include <sys/lwpctl.h> #include <sys/atomic.h> #include <sys/simplelock.h> -#include <sys/kauth.h> #include <uvm/uvm_extern.h> @@ -128,8 +127,6 @@ unsigned sched_pstats_ticks; kcondvar_t lbolt; /* once a second sleep address */ -static kauth_listener_t sched_listener; - /* Preemption event counters */ static struct evcnt kpreempt_ev_crit; static struct evcnt kpreempt_ev_klock; @@ -145,57 +142,8 @@ */ int safepri; -static int -sched_listener_cb(kauth_cred_t cred, kauth_action_t action, void *cookie, - void *arg0, void *arg1, void *arg2, void *arg3) -{ - struct proc *p; - int result; - - result = KAUTH_RESULT_DEFER; - p = arg0; - - switch (action) { - case KAUTH_PROCESS_SCHEDULER_GETPARAM: - if (kauth_cred_uidmatch(cred, p->p_cred)) - result = KAUTH_RESULT_ALLOW; - break; - - case KAUTH_PROCESS_SCHEDULER_SETPARAM: - if (kauth_cred_uidmatch(cred, p->p_cred)) { - struct lwp *l; - int policy; - pri_t priority; - - l = arg1; - policy = (int)(unsigned long)arg2; - priority = (pri_t)(unsigned long)arg3; - - if ((policy == l->l_class || - (policy != SCHED_FIFO && policy != SCHED_RR)) && - priority <= l->l_priority) - result = KAUTH_RESULT_ALLOW; - } - - break; - - case KAUTH_PROCESS_SCHEDULER_GETAFFINITY: - result = KAUTH_RESULT_ALLOW; - break; - - case KAUTH_PROCESS_SCHEDULER_SETAFFINITY: - /* Privileged; we let the secmodel handle this. */ - break; - - default: - break; - } - - return result; -} - void -sched_init(void) +synch_init(void) { cv_init(&lbolt, "lbolt"); @@ -210,9 +158,6 @@ "kpreempt", "immediate"); sched_pstats(NULL); - - sched_listener = kauth_listen_scope(KAUTH_SCOPE_PROCESS, - sched_listener_cb, NULL); } /* Index: src/sys/kern/sys_sched.c diff -u src/sys/kern/sys_sched.c:1.33 src/sys/kern/sys_sched.c:1.34 --- src/sys/kern/sys_sched.c:1.33 Tue Mar 3 21:55:06 2009 +++ src/sys/kern/sys_sched.c Sat Oct 3 22:32:56 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sys_sched.c,v 1.33 2009/03/03 21:55:06 rmind Exp $ */ +/* $NetBSD: sys_sched.c,v 1.34 2009/10/03 22:32:56 elad Exp $ */ /* * Copyright (c) 2008, Mindaugas Rasiukevicius <rmind at NetBSD org> @@ -42,7 +42,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sys_sched.c,v 1.33 2009/03/03 21:55:06 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sys_sched.c,v 1.34 2009/10/03 22:32:56 elad Exp $"); #include <sys/param.h> @@ -64,6 +64,9 @@ #include "opt_sa.h" +static struct sysctllog *sched_sysctl_log; +static kauth_listener_t sched_listener; + /* * Convert user priority or the in-kernel priority or convert the current * priority to the appropriate range according to the policy change. @@ -528,7 +531,8 @@ /* * Sysctl nodes and initialization. */ -SYSCTL_SETUP(sysctl_sched_setup, "sysctl sched setup") +static void +sysctl_sched_setup(struct sysctllog **clog) { const struct sysctlnode *node = NULL; @@ -568,3 +572,62 @@ NULL, SCHED_PRI_MAX, NULL, 0, CTL_CREATE, CTL_EOL); } + +static int +sched_listener_cb(kauth_cred_t cred, kauth_action_t action, void *cookie, + void *arg0, void *arg1, void *arg2, void *arg3) +{ + struct proc *p; + int result; + + result = KAUTH_RESULT_DEFER; + p = arg0; + + switch (action) { + case KAUTH_PROCESS_SCHEDULER_GETPARAM: + if (kauth_cred_uidmatch(cred, p->p_cred)) + result = KAUTH_RESULT_ALLOW; + break; + + case KAUTH_PROCESS_SCHEDULER_SETPARAM: + if (kauth_cred_uidmatch(cred, p->p_cred)) { + struct lwp *l; + int policy; + pri_t priority; + + l = arg1; + policy = (int)(unsigned long)arg2; + priority = (pri_t)(unsigned long)arg3; + + if ((policy == l->l_class || + (policy != SCHED_FIFO && policy != SCHED_RR)) && + priority <= l->l_priority) + result = KAUTH_RESULT_ALLOW; + } + + break; + + case KAUTH_PROCESS_SCHEDULER_GETAFFINITY: + result = KAUTH_RESULT_ALLOW; + break; + + case KAUTH_PROCESS_SCHEDULER_SETAFFINITY: + /* Privileged; we let the secmodel handle this. */ + break; + + default: + break; + } + + return result; +} + +void +sched_init(void) +{ + + sysctl_sched_setup(&sched_sysctl_log); + + sched_listener = kauth_listen_scope(KAUTH_SCOPE_PROCESS, + sched_listener_cb, NULL); +} Index: src/sys/sys/sched.h diff -u src/sys/sys/sched.h:1.70 src/sys/sys/sched.h:1.71 --- src/sys/sys/sched.h:1.70 Sat Apr 25 19:38:25 2009 +++ src/sys/sys/sched.h Sat Oct 3 22:32:56 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sched.h,v 1.70 2009/04/25 19:38:25 rmind Exp $ */ +/* $NetBSD: sched.h,v 1.71 2009/10/03 22:32:56 elad Exp $ */ /*- * Copyright (c) 1999, 2000, 2001, 2002, 2007, 2008 The NetBSD Foundation, Inc. @@ -228,6 +228,7 @@ /* Scheduler initialization */ void runq_init(void); +void synch_init(void); void sched_init(void); void sched_rqinit(void); void sched_cpuattach(struct cpu_info *);