diff options
-rw-r--r-- | sys/arch/i386/include/cpu.h | 4 | ||||
-rw-r--r-- | sys/arch/sparc64/include/cpu.h | 4 | ||||
-rw-r--r-- | sys/sys/proc.h | 41 | ||||
-rw-r--r-- | sys/sys/sched.h | 63 |
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() |