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 *);