From c2ad14942ce1145ecf62f4fa957f2bcb408bb556 Mon Sep 17 00:00:00 2001 From: Artur Grabowski Date: Mon, 21 Jun 2004 23:12:15 +0000 Subject: Put back the moving of schedstate_percpu into sched.h. This time expose it to userland so that i386 builds (other architectures didn't show the problem). deraadt@ ok --- sys/arch/i386/include/cpu.h | 4 +-- sys/arch/sparc64/include/cpu.h | 4 +-- sys/sys/proc.h | 41 +-------------------------- sys/sys/sched.h | 64 +++++++++++++++++++++++++++--------------- 4 files changed, 46 insertions(+), 67 deletions(-) diff --git a/sys/arch/i386/include/cpu.h b/sys/arch/i386/include/cpu.h index 855cfc8dbd6..18da562cd3b 100644 --- a/sys/arch/i386/include/cpu.h +++ b/sys/arch/i386/include/cpu.h @@ -1,4 +1,4 @@ -/* $OpenBSD: cpu.h,v 1.63 2004/06/20 08:25:30 deraadt Exp $ */ +/* $OpenBSD: cpu.h,v 1.64 2004/06/21 23:12:14 art Exp $ */ /* $NetBSD: cpu.h,v 1.35 1996/05/05 19:29:26 christos Exp $ */ /*- @@ -72,7 +72,7 @@ #include #include /* will also get LOCKDEBUG */ -#include +#include struct intrsource; diff --git a/sys/arch/sparc64/include/cpu.h b/sys/arch/sparc64/include/cpu.h index 6b1fb127ece..faa8964f581 100644 --- a/sys/arch/sparc64/include/cpu.h +++ b/sys/arch/sparc64/include/cpu.h @@ -1,4 +1,4 @@ -/* $OpenBSD: cpu.h,v 1.27 2004/06/20 08:25:30 deraadt Exp $ */ +/* $OpenBSD: cpu.h,v 1.28 2004/06/21 23:12:14 art Exp $ */ /* $NetBSD: cpu.h,v 1.28 2001/06/14 22:56:58 thorpej Exp $ */ /* @@ -75,7 +75,7 @@ #include #include -#include +#include /* * 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 9b0d4fc5b23..11049171027 100644 --- a/sys/sys/proc.h +++ b/sys/sys/proc.h @@ -1,4 +1,4 @@ -/* $OpenBSD: proc.h,v 1.73 2004/06/20 08:25:30 deraadt Exp $ */ +/* $OpenBSD: proc.h,v 1.74 2004/06/21 23:12:14 art Exp $ */ /* $NetBSD: proc.h,v 1.44 1996/04/22 01:23:21 christos Exp $ */ /*- @@ -46,46 +46,7 @@ #include /* For struct timeout. */ #include /* 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 65a35b4e7cd..97c68dce08b 100644 --- a/sys/sys/sched.h +++ b/sys/sys/sched.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sched.h,v 1.8 2004/06/20 08:25:30 deraadt Exp $ */ +/* $OpenBSD: sched.h,v 1.9 2004/06/21 23:12:14 art Exp $ */ /* $NetBSD: sched.h,v 1.2 1999/02/28 18:14:58 ross Exp $ */ /*- @@ -80,8 +80,40 @@ * Posix defines a which may want to include */ +/* + * 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. + * XXX - expose to userland for now. + */ +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 */ +}; + #ifdef _KERNEL +/* 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) @@ -89,36 +121,22 @@ extern int schedhz; /* ideally: 16 */ extern int rrticks_init; /* ticks per roundrobin() */ -#ifdef _SYS_PROC_H_ +struct proc; 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 */ - -static __inline void -scheduler_fork_hook(parent, child) - struct proc *parent, *child; -{ - child->p_estcpu = parent->p_estcpu; -} +#define scheduler_fork_hook(parent, child) do { \ + (child)->p_estcpu = (parent)->p_estcpu; \ +} while (0) /* Chargeback parents for the sins of their children. */ - -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_ */ +#define scheduler_wait_hook(parent, child) do { \ + (parent)->p_estcpu = ESTCPULIM((parent)->p_estcpu + (child)->p_estcpu);\ +} while (0) #ifndef splsched #define splsched() splhigh() -- cgit v1.2.3