diff options
-rw-r--r-- | sys/arch/amd64/amd64/genassym.cf | 3 | ||||
-rw-r--r-- | sys/arch/amd64/amd64/locore.S | 11 | ||||
-rw-r--r-- | sys/arch/amd64/amd64/machdep.c | 4 | ||||
-rw-r--r-- | sys/arch/amd64/include/cpu.h | 35 | ||||
-rw-r--r-- | sys/arch/amd64/include/types.h | 10 | ||||
-rw-r--r-- | sys/arch/amd64/include/userret.h | 4 | ||||
-rw-r--r-- | sys/sys/sched.h | 4 |
7 files changed, 20 insertions, 51 deletions
diff --git a/sys/arch/amd64/amd64/genassym.cf b/sys/arch/amd64/amd64/genassym.cf index a56769705b4..7061ce92c6b 100644 --- a/sys/arch/amd64/amd64/genassym.cf +++ b/sys/arch/amd64/amd64/genassym.cf @@ -1,4 +1,4 @@ -# $OpenBSD: genassym.cf,v 1.4 2004/06/13 21:49:12 niklas Exp $ +# $OpenBSD: genassym.cf,v 1.5 2004/06/22 01:16:50 art Exp $ # Written by Artur Grabowski art@openbsd.org, Public Domain @@ -41,6 +41,7 @@ member P_MD_REGS p_md.md_regs member P_MD_FLAGS p_md.md_flags member P_MD_ASTPENDING p_md.md_astpending member p_flag +member p_cpu export P_SYSTEM diff --git a/sys/arch/amd64/amd64/locore.S b/sys/arch/amd64/amd64/locore.S index 665161f05c6..a32e5de4edb 100644 --- a/sys/arch/amd64/amd64/locore.S +++ b/sys/arch/amd64/amd64/locore.S @@ -1,4 +1,4 @@ -/* $OpenBSD: locore.S,v 1.12 2004/06/21 22:35:47 niklas Exp $ */ +/* $OpenBSD: locore.S,v 1.13 2004/06/22 01:16:50 art Exp $ */ /* $NetBSD: locore.S,v 1.2 2003/04/26 19:34:45 fvdl Exp $ */ /* @@ -142,20 +142,11 @@ #include <machine/asm.h> -#if defined(MULTIPROCESSOR) - #define SET_CURPROC(proc,cpu) \ movq CPUVAR(SELF),cpu ; \ movq proc,CPUVAR(CURPROC) ; \ movq cpu,P_CPU(proc) -#else - -#define SET_CURPROC(proc,tcpu) movq proc,CPUVAR(CURPROC) -#define GET_CURPROC(reg) movq CPUVAR(CURPROC),reg - -#endif - #define GET_CURPCB(reg) movq CPUVAR(CURPCB),reg #define SET_CURPCB(reg) movq reg,CPUVAR(CURPCB) diff --git a/sys/arch/amd64/amd64/machdep.c b/sys/arch/amd64/amd64/machdep.c index 2d8b3eb11aa..7516289ac0b 100644 --- a/sys/arch/amd64/amd64/machdep.c +++ b/sys/arch/amd64/amd64/machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machdep.c,v 1.24 2004/05/13 20:20:24 sturm Exp $ */ +/* $OpenBSD: machdep.c,v 1.25 2004/06/22 01:16:50 art Exp $ */ /* $NetBSD: machdep.c,v 1.3 2003/05/07 22:58:18 fvdl Exp $ */ /*- @@ -1821,7 +1821,6 @@ microtime(struct timeval *tv) } #endif -#ifdef MULTIPROCESSOR void need_resched(struct cpu_info *ci) { @@ -1829,7 +1828,6 @@ need_resched(struct cpu_info *ci) if ((ci)->ci_curproc != NULL) aston((ci)->ci_curproc); } -#endif /* * Allocate an IDT vector slot within the given range. diff --git a/sys/arch/amd64/include/cpu.h b/sys/arch/amd64/include/cpu.h index 9caf05b561d..4cd297e86b9 100644 --- a/sys/arch/amd64/include/cpu.h +++ b/sys/arch/amd64/include/cpu.h @@ -1,4 +1,4 @@ -/* $OpenBSD: cpu.h,v 1.7 2004/06/13 21:49:13 niklas Exp $ */ +/* $OpenBSD: cpu.h,v 1.8 2004/06/22 01:16:50 art Exp $ */ /* $NetBSD: cpu.h,v 1.1 2003/04/26 18:39:39 fvdl Exp $ */ /*- @@ -53,13 +53,12 @@ #include <sys/device.h> #include <sys/lock.h> +#include <sys/sched.h> struct cpu_info { struct device *ci_dev; struct cpu_info *ci_self; -#if 0 struct schedstate_percpu ci_schedstate; /* scheduler state */ -#endif struct cpu_info *ci_next; struct proc *ci_curproc; @@ -141,6 +140,12 @@ extern struct cpu_info *cpu_info_list; #define CPU_INFO_FOREACH(cii, ci) cii = 0, ci = cpu_info_list; \ ci != NULL; ci = ci->ci_next +/* + * Preempt the current process if in interrupt from user mode, + * or after the current trap/syscall if in system mode. + */ +extern void need_resched(struct cpu_info *); + #if defined(MULTIPROCESSOR) #define X86_MAXPROCS 32 /* bitmask; can be bumped to 64 */ @@ -161,13 +166,6 @@ extern struct cpu_info *cpu_info[X86_MAXPROCS]; void cpu_boot_secondary_processors(void); void cpu_init_idle_pcbs(void); - -/* - * Preempt the current process if in interrupt from user mode, - * or after the current trap/syscall if in system mode. - */ -extern void need_resched(struct cpu_info *); - #else /* !MULTIPROCESSOR */ #define X86_MAXPROCS 1 @@ -179,6 +177,8 @@ extern struct cpu_info cpu_info_primary; #endif +#include <machine/psl.h> + /* * definitions of cpu-dependent requirements * referenced in generic code @@ -186,19 +186,6 @@ extern struct cpu_info cpu_info_primary; #define cpu_number() 0 #define CPU_IS_PRIMARY(ci) 1 -/* - * Preempt the current process if in interrupt from user mode, - * or after the current trap/syscall if in system mode. - */ - -#define need_resched(ci) \ -do { \ - struct cpu_info *__ci = curcpu(); \ - __ci->ci_want_resched = 1; \ - if (__ci->ci_curproc != NULL) \ - aston(__ci->ci_curproc); \ -} while (/*CONSTCOND*/0) - #endif /* MULTIPROCESSOR */ #define aston(p) ((p)->p_md.md_astpending = 1) @@ -313,8 +300,6 @@ void x86_bus_space_mallocok(void); #endif /* _KERNEL */ -#include <machine/psl.h> - /* * CTL_MACHDEP definitions. */ diff --git a/sys/arch/amd64/include/types.h b/sys/arch/amd64/include/types.h index 29db1c37d00..6b7458c307a 100644 --- a/sys/arch/amd64/include/types.h +++ b/sys/arch/amd64/include/types.h @@ -1,4 +1,4 @@ -/* $OpenBSD: types.h,v 1.2 2004/02/03 12:09:47 mickey Exp $ */ +/* $OpenBSD: types.h,v 1.3 2004/06/22 01:16:50 art Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -67,14 +67,8 @@ typedef unsigned long long uint64_t; typedef long register_t; -/* The amd64 does not have strict alignment requirements. */ -#define __NO_STRICT_ALIGNMENT - #define __HAVE_NWSCONS -#define __HAVE_CPU_COUNTER -#define __HAVE_SYSCALL_INTERN -#define __HAVE_MINIMAL_EMUL #define __HAVE_GENERIC_SOFT_INTERRUPTS -#define __HAVE_CPU_MAXPROC +#define __HAVE_CPUINFO #endif /* _MACHTYPES_H_ */ diff --git a/sys/arch/amd64/include/userret.h b/sys/arch/amd64/include/userret.h index 4422d1b25dd..8f5dd35892d 100644 --- a/sys/arch/amd64/include/userret.h +++ b/sys/arch/amd64/include/userret.h @@ -1,4 +1,4 @@ -/* $OpenBSD: userret.h,v 1.1 2004/01/28 01:39:39 mickey Exp $ */ +/* $OpenBSD: userret.h,v 1.2 2004/06/22 01:16:50 art Exp $ */ /* $NetBSD: userret.h,v 1.1 2003/04/26 18:39:49 fvdl Exp $ */ /* @@ -95,5 +95,5 @@ userret(struct proc *p) while ((sig = CURSIG(p)) != 0) postsig(sig); - curpriority = p->p_priority = p->p_usrpri; + curcpu()->ci_schedstate.spc_curpriority = p->p_priority = p->p_usrpri; } diff --git a/sys/sys/sched.h b/sys/sys/sched.h index 97c68dce08b..2bf36105626 100644 --- a/sys/sys/sched.h +++ b/sys/sys/sched.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sched.h,v 1.9 2004/06/21 23:12:14 art Exp $ */ +/* $OpenBSD: sched.h,v 1.10 2004/06/22 01:16:50 art Exp $ */ /* $NetBSD: sched.h,v 1.2 1999/02/28 18:14:58 ross Exp $ */ /*- @@ -138,7 +138,7 @@ void roundrobin(struct cpu_info *); (parent)->p_estcpu = ESTCPULIM((parent)->p_estcpu + (child)->p_estcpu);\ } while (0) -#ifndef splsched +#if !defined(__HAVE_CPUINFO) && !defined(splsched) #define splsched() splhigh() #endif #ifndef IPL_SCHED |