summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/arch/i386/include/cpu.h4
-rw-r--r--sys/arch/sparc64/include/cpu.h4
-rw-r--r--sys/sys/proc.h41
-rw-r--r--sys/sys/sched.h63
4 files changed, 67 insertions, 45 deletions
diff --git a/sys/arch/i386/include/cpu.h b/sys/arch/i386/include/cpu.h
index 47dbd06e31e..855cfc8dbd6 100644
--- a/sys/arch/i386/include/cpu.h
+++ b/sys/arch/i386/include/cpu.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpu.h,v 1.62 2004/06/20 06:47:31 art Exp $ */
+/* $OpenBSD: cpu.h,v 1.63 2004/06/20 08:25:30 deraadt Exp $ */
/* $NetBSD: cpu.h,v 1.35 1996/05/05 19:29:26 christos Exp $ */
/*-
@@ -72,7 +72,7 @@
#include <sys/device.h>
#include <sys/lock.h> /* will also get LOCKDEBUG */
-#include <sys/sched.h>
+#include <sys/proc.h>
struct intrsource;
diff --git a/sys/arch/sparc64/include/cpu.h b/sys/arch/sparc64/include/cpu.h
index 4d408ab68cd..6b1fb127ece 100644
--- a/sys/arch/sparc64/include/cpu.h
+++ b/sys/arch/sparc64/include/cpu.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpu.h,v 1.26 2004/06/20 06:47:31 art Exp $ */
+/* $OpenBSD: cpu.h,v 1.27 2004/06/20 08:25:30 deraadt Exp $ */
/* $NetBSD: cpu.h,v 1.28 2001/06/14 22:56:58 thorpej Exp $ */
/*
@@ -75,7 +75,7 @@
#include <machine/reg.h>
#include <machine/intr.h>
-#include <sys/sched.h>
+#include <sys/proc.h>
/*
* The cpu_info structure is part of a 64KB structure mapped both the kernel
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index cf3801057e4..9b0d4fc5b23 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: proc.h,v 1.72 2004/06/20 06:47:31 art Exp $ */
+/* $OpenBSD: proc.h,v 1.73 2004/06/20 08:25:30 deraadt Exp $ */
/* $NetBSD: proc.h,v 1.44 1996/04/22 01:23:21 christos Exp $ */
/*-
@@ -46,7 +46,46 @@
#include <sys/timeout.h> /* For struct timeout. */
#include <sys/event.h> /* For struct klist */
+/*
+ * CPU states.
+ * XXX Not really scheduler state, but no other good place to put
+ * it right now, and it really is per-CPU.
+ */
+#define CP_USER 0
+#define CP_NICE 1
+#define CP_SYS 2
+#define CP_INTR 3
+#define CP_IDLE 4
+#define CPUSTATES 5
+
+/*
+ * Per-CPU scheduler state.
+ */
+struct schedstate_percpu {
+ struct timeval spc_runtime; /* time curproc started running */
+ __volatile int spc_schedflags; /* flags; see below */
+ u_int spc_schedticks; /* ticks for schedclock() */
+ u_int64_t spc_cp_time[CPUSTATES]; /* CPU state statistics */
+ u_char spc_curpriority; /* usrpri of curproc */
+ int spc_rrticks; /* ticks until roundrobin() */
+ int spc_pscnt; /* prof/stat counter */
+ int spc_psdiv; /* prof/stat divisor */
+};
+
+/* spc_flags */
+#define SPCF_SEENRR 0x0001 /* process has seen roundrobin() */
+#define SPCF_SHOULDYIELD 0x0002 /* process should yield the CPU */
+#define SPCF_SWITCHCLEAR (SPCF_SEENRR|SPCF_SHOULDYIELD)
+
#ifdef __HAVE_CPUINFO
+/*
+ * These are the fields we require in struct cpu_info that we get from
+ * curcpu():
+ *
+ * struct proc *ci_curproc;
+ * struct schedstate_percpu ci_schedstate;
+ * cpuid_t ci_cpuid;
+ */
#define curproc curcpu()->ci_curproc
#endif
diff --git a/sys/sys/sched.h b/sys/sys/sched.h
index badaf18396f..65a35b4e7cd 100644
--- a/sys/sys/sched.h
+++ b/sys/sys/sched.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: sched.h,v 1.7 2004/06/20 06:47:31 art Exp $ */
+/* $OpenBSD: sched.h,v 1.8 2004/06/20 08:25:30 deraadt Exp $ */
/* $NetBSD: sched.h,v 1.2 1999/02/28 18:14:58 ross Exp $ */
/*-
@@ -80,39 +80,8 @@
* Posix defines a <sched.h> which may want to include <sys/sched.h>
*/
-/*
- * CPU states.
- * XXX Not really scheduler state, but no other good place to put
- * it right now, and it really is per-CPU.
- */
-#define CP_USER 0
-#define CP_NICE 1
-#define CP_SYS 2
-#define CP_INTR 3
-#define CP_IDLE 4
-#define CPUSTATES 5
-
#ifdef _KERNEL
-/*
- * Per-CPU scheduler state.
- */
-struct schedstate_percpu {
- struct timeval spc_runtime; /* time curproc started running */
- __volatile int spc_schedflags; /* flags; see below */
- u_int spc_schedticks; /* ticks for schedclock() */
- u_int64_t spc_cp_time[CPUSTATES]; /* CPU state statistics */
- u_char spc_curpriority; /* usrpri of curproc */
- int spc_rrticks; /* ticks until roundrobin() */
- int spc_pscnt; /* prof/stat counter */
- int spc_psdiv; /* prof/stat divisor */
-};
-
-/* spc_flags */
-#define SPCF_SEENRR 0x0001 /* process has seen roundrobin() */
-#define SPCF_SHOULDYIELD 0x0002 /* process should yield the CPU */
-#define SPCF_SWITCHCLEAR (SPCF_SEENRR|SPCF_SHOULDYIELD)
-
#define PPQ (128 / NQS) /* priorities per queue */
#define NICE_WEIGHT 2 /* priorities per nice level */
#define ESTCPULIM(e) min((e), NICE_WEIGHT * PRIO_MAX - PPQ)
@@ -120,22 +89,36 @@ struct schedstate_percpu {
extern int schedhz; /* ideally: 16 */
extern int rrticks_init; /* ticks per roundrobin() */
-struct proc;
+#ifdef _SYS_PROC_H_
void schedclock(struct proc *);
#ifdef __HAVE_CPUINFO
-struct cpu_info;
void roundrobin(struct cpu_info *);
#endif
+static __inline void scheduler_fork_hook(
+ struct proc *parent, struct proc *child);
+static __inline void scheduler_wait_hook(
+ struct proc *parent, struct proc *child);
/* Inherit the parent's scheduler history */
-#define scheduler_fork_hook(parent, child) do { \
- (child)->p_estcpu = (parent)->p_estcpu; \
-} while (0)
+
+static __inline void
+scheduler_fork_hook(parent, child)
+ struct proc *parent, *child;
+{
+ child->p_estcpu = parent->p_estcpu;
+}
/* Chargeback parents for the sins of their children. */
-#define scheduler_wait_hook(parent, child) do { \
- (parent)->p_estcpu = ESTCPULIM((parent)->p_estcpu + (child)->p_estcpu);\
-} while (0)
+
+static __inline void
+scheduler_wait_hook(parent, child)
+ struct proc *parent, *child;
+{
+ /* XXX just return if parent == init?? */
+
+ parent->p_estcpu = ESTCPULIM(parent->p_estcpu + child->p_estcpu);
+}
+#endif /* _SYS_PROC_H_ */
#ifndef splsched
#define splsched() splhigh()