no swplo
[unix-history] / usr / src / sys / kern / kern_clock.c
index e538074..158a9a8 100644 (file)
@@ -1,4 +1,4 @@
-/*     kern_clock.c    3.8     %H%     */
+/*     %H%     3.12    kern_clock.c    */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #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;
        register struct callo *p1, *p2;
        register struct proc *pp;
        register int s;
-       int a;
+       int a, cpstate;
 
        /*
         * reprime clock
 
        /*
         * reprime clock
@@ -125,19 +125,20 @@ out:
                if (s > u.u_vm.vm_maxrss)
                        u.u_vm.vm_maxrss = s;
        }
                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)
        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 {
        } else {
-               a += 16;
+               cpstate = CP_SYS;
                if (noproc)
                if (noproc)
-                       a += 8;
+                       cpstate = CP_IDLE;
                else
                        u.u_vm.vm_stime++;
        }
                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)
        if (!noproc) {
                pp = u.u_procp;
                if(++pp->p_cpu == 0)
@@ -169,8 +170,16 @@ out:
                                if(--pp->p_clktim == 0)
                                        if (pp->p_flag & STIMO) {
                                                s = spl6();
                                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);
                                                        setrun(pp);
+                                                       break;
+
+                                               case SSTOP:
+                                                       unsleep(pp);
+                                                       break;
+                                               }
                                                pp->p_flag &= ~STIMO;
                                                splx(s);
                                        } else
                                                pp->p_flag &= ~STIMO;
                                                splx(s);
                                        } else
@@ -228,6 +237,8 @@ out:
                }
 #endif
        }
                }
 #endif
        }
+       if (!BASEPRI(ps))
+               unhang();
        if (USERMODE(ps)) {
                /*
                 * We do this last since it
        if (USERMODE(ps)) {
                /*
                 * We do this last since it