diff options
| author | Peter Wemm <peter@FreeBSD.org> | 1997-04-26 11:46:25 +0000 |
|---|---|---|
| committer | Peter Wemm <peter@FreeBSD.org> | 1997-04-26 11:46:25 +0000 |
| commit | 477a642cee98950f11ce12c94468b0156991a8eb (patch) | |
| tree | 0b1362dc59c530540630177826b3e1cee9bb08bd /sys/kern/kern_synch.c | |
| parent | 539fc95753f186bdf4f6d04d86484abd3c7f59c5 (diff) | |
Notes
Diffstat (limited to 'sys/kern/kern_synch.c')
| -rw-r--r-- | sys/kern/kern_synch.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c index 04339cde1f9b..f684c0506c4a 100644 --- a/sys/kern/kern_synch.c +++ b/sys/kern/kern_synch.c @@ -36,10 +36,11 @@ * SUCH DAMAGE. * * @(#)kern_synch.c 8.9 (Berkeley) 5/19/95 - * $Id: kern_synch.c,v 1.29 1997/02/22 09:39:12 peter Exp $ + * $Id: kern_synch.c,v 1.30 1997/02/27 18:03:48 bde Exp $ */ #include "opt_ktrace.h" +#include "opt_smp.h" #include <sys/param.h> #include <sys/systm.h> @@ -176,7 +177,7 @@ schedcpu(arg) { register fixpt_t loadfac = loadfactor(averunnable.ldavg[0]); register struct proc *p; - register int s; + register int s, i, j; register unsigned int newcpu; wakeup((caddr_t)&lbolt); @@ -215,7 +216,16 @@ schedcpu(arg) resetpriority(p); if (p->p_priority >= PUSER) { #define PPQ (128 / NQS) /* priorities per queue */ +#ifdef SMP + for (j = i = 0; i < NCPU; i++) { + if (p == SMPcurproc[i]) + j++; + } + if (!j && + +#else if ((p != curproc) && +#endif p->p_stat == SRUN && (p->p_flag & P_INMEM) && (p->p_priority / PPQ) != (p->p_usrpri / PPQ)) { @@ -226,6 +236,7 @@ schedcpu(arg) p->p_priority = p->p_usrpri; } splx(s); + not_mine: } vmmeter(); timeout(schedcpu, (void *)0, hz); @@ -567,6 +578,10 @@ mi_switch() u -= 1000000; s++; } +#ifdef SMP + if (s < 0) + s = u = 0; +#endif p->p_rtime.tv_usec = u; p->p_rtime.tv_sec = s; |
