VOID=>(void)
[unix-history] / usr / src / sys / kern / kern_clock.c
index e2706fa..bede4fb 100644 (file)
@@ -1,4 +1,4 @@
-/*     kern_clock.c    3.2     %H%     */
+/*     kern_clock.c    3.6     %H%     */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
  *     jab the scheduler
  */
 #ifdef KPROF
  *     jab the scheduler
  */
 #ifdef KPROF
-short  kcount[20000];
+unsigned short kcount[20000];
 #endif
 
 #endif
 
+/*
+ * 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    rcnt;
+
 clock(pc, ps)
 caddr_t pc;
 {
 clock(pc, ps)
 caddr_t pc;
 {
@@ -88,6 +95,24 @@ caddr_t pc;
         * and time of day
         */
 out:
         * and time of day
         */
 out:
+
+       /*
+        * In order to not take input character interrupts to use
+        * the input silo on DZ's we have to guarantee to echo
+        * characters regularly.  This means that we have to
+        * call the timer routines predictably.  Since blocking
+        * in these routines is at spl5(), we have to make spl5()
+        * really spl6() blocking off the clock to put this code
+        * here.  Note also that it is critical that we run spl5()
+        * (i.e. really spl6()) in the receiver interrupt routines
+        * so we can't enter them recursively and transpose characters.
+        */
+       if (rcnt >= rintvl) {
+               dhtimer();
+               dztimer();
+               rcnt = 0;
+       } else
+               rcnt++;
        if (!noproc) {
                s = u.u_procp->p_rssize;
                u.u_vm.vm_idsrss += s;
        if (!noproc) {
                s = u.u_procp->p_rssize;
                u.u_vm.vm_idsrss += s;
@@ -118,7 +143,7 @@ out:
                if(++pp->p_cpu == 0)
                        pp->p_cpu--;
                if(pp->p_cpu % 16 == 0) {
                if(++pp->p_cpu == 0)
                        pp->p_cpu--;
                if(pp->p_cpu % 16 == 0) {
-                       VOID setpri(pp);
+                       (void) setpri(pp);
                        if (pp->p_pri >= PUSER)
                                pp->p_pri = pp->p_usrpri;
                }
                        if (pp->p_pri >= PUSER)
                                pp->p_pri = pp->p_usrpri;
                }
@@ -133,7 +158,7 @@ out:
                        return;
                lbolt -= HZ;
                ++time;
                        return;
                lbolt -= HZ;
                ++time;
-               VOID spl1();
+               (void) spl1();
                runrun++;
                wakeup((caddr_t)&lbolt);
                for(pp = &proc[0]; pp < &proc[NPROC]; pp++)
                runrun++;
                wakeup((caddr_t)&lbolt);
                for(pp = &proc[0]; pp < &proc[NPROC]; pp++)
@@ -163,7 +188,7 @@ out:
                        if(a > 255)
                                a = 255;
                        pp->p_cpu = a;
                        if(a > 255)
                                a = 255;
                        pp->p_cpu = a;
-                       VOID setpri(pp);
+                       (void) setpri(pp);
                        s = spl6();
                        if(pp->p_pri >= PUSER) {
                                if ((pp != u.u_procp || noproc) &&
                        s = spl6();
                        if(pp->p_pri >= PUSER) {
                                if ((pp != u.u_procp || noproc) &&
@@ -198,7 +223,7 @@ out:
                        if (pp->p_uid)
                                if (pp->p_nice == NZERO && u.u_vm.vm_utime > 600 * HZ)
                                        pp->p_nice = NZERO+4;
                        if (pp->p_uid)
                                if (pp->p_nice == NZERO && u.u_vm.vm_utime > 600 * HZ)
                                        pp->p_nice = NZERO+4;
-                       VOID setpri(pp);
+                       (void) setpri(pp);
                        pp->p_pri = pp->p_usrpri;
                }
 #endif
                        pp->p_pri = pp->p_usrpri;
                }
 #endif
@@ -213,10 +238,11 @@ out:
        }
 #ifdef KPROF
        else if (!noproc) {
        }
 #ifdef KPROF
        else if (!noproc) {
-               register int indx = ((int)pc & 0x7fffffff) / 8;
+               register int indx = ((int)pc & 0x7fffffff) / 4;
 
                if (indx >= 0 && indx < 20000)
 
                if (indx >= 0 && indx < 20000)
-                       kcount[indx]++;
+                       if (++kcount[indx] == 0)
+                               --kcount[indx];
        }
 #endif
 }
        }
 #endif
 }