X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/d4be7420cef9e65c95d8946852ee6da218a748aa..41888f1633c1339d2f01b12ee2799c96530262dd:/usr/src/sys/kern/kern_clock.c diff --git a/usr/src/sys/kern/kern_clock.c b/usr/src/sys/kern/kern_clock.c index ba311786d4..158a9a8667 100644 --- a/usr/src/sys/kern/kern_clock.c +++ b/usr/src/sys/kern/kern_clock.c @@ -1,4 +1,4 @@ -/* kern_clock.c 3.7 %H% */ +/* %H% 3.12 kern_clock.c */ #include "../h/param.h" #include "../h/systm.h" @@ -46,7 +46,7 @@ caddr_t pc; register struct callo *p1, *p2; register struct proc *pp; register int s; - int a; + int a, cpstate; /* * reprime clock @@ -125,19 +125,20 @@ out: if (s > u.u_vm.vm_maxrss) u.u_vm.vm_maxrss = s; } - a = dk_busy&07; if (USERMODE(ps)) { u.u_vm.vm_utime++; if(u.u_procp->p_nice > NZERO) - a += 8; + cpstate = CP_NICE; + else + cpstate = CP_USER; } else { - a += 16; + cpstate = CP_SYS; if (noproc) - a += 8; + cpstate = CP_IDLE; else u.u_vm.vm_stime++; } - dk_time[a]++; + dk_time[cpstate][dk_busy&(DK_NSTATES-1)]++; if (!noproc) { pp = u.u_procp; if(++pp->p_cpu == 0) @@ -169,12 +170,20 @@ out: if(--pp->p_clktim == 0) if (pp->p_flag & STIMO) { s = spl6(); - if (pp->p_stat == SSLEEP) + switch (pp->p_stat) { + + case SSLEEP: setrun(pp); + break; + + case SSTOP: + unsleep(pp); + break; + } pp->p_flag &= ~STIMO; splx(s); } else - psignal(pp, SIGCLK); + psignal(pp, SIGALRM); if(pp->p_stat==SSLEEP||pp->p_stat==SSTOP) if (pp->p_slptime != 127) pp->p_slptime++; @@ -228,6 +237,8 @@ out: } #endif } + if (!BASEPRI(ps)) + unhang(); if (USERMODE(ps)) { /* * We do this last since it