X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/5da67d35b1d69550a3f763afc15ca8162decbcfb..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 bede4fbfe8..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.6 %H% */ +/* %H% 3.12 kern_clock.c */ #include "../h/param.h" #include "../h/systm.h" @@ -37,7 +37,7 @@ unsigned short kcount[20000]; * We handle regular calls to the dh and dz silo input processors * without using timeouts to save a little time. */ -int rintvl = 4; /* every 1/15'th of sec check receivers */ +int rintvl = 0; /* every 1/60'th of sec check receivers */ int rcnt; clock(pc, ps) @@ -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