- register struct callout *p1, *p2;
- register struct proc *pp;
- register int a, s;
-
- /*
- * Perform callouts (but not after panic's!)
- */
- if (panicstr == 0 && callout[0].c_time <= 0) {
- p1 = &callout[0];
- while (p1->c_func != 0 && p1->c_time <= 0) {
- (*p1->c_func)(p1->c_arg);
- p1++;
- }
- p2 = &callout[0];
- while (p2->c_func = p1->c_func) {
- p2->c_time = p1->c_time;
- p2->c_arg = p1->c_arg;
- p1++;
- p2++;
- }
- }
-
- /*
- * Drain silos.
- */
-#if NDH > 0
- s = spl5(); dhtimer(); splx(s);
-#endif
-#if NDZ > 0
- s = spl5(); dztimer(); splx(s);
-#endif
-
- /*
- * If idling and processes are waiting to swap in,
- * check on them.
- */
- if (noproc && runin) {
- runin = 0;
- wakeup((caddr_t)&runin);
- }
-
- /*
- * Run paging daemon and reschedule every 1/4 sec.
- */
- if (lbolt % (hz/4) == 0) {
- vmpago();
- runrun++;
- aston();
- }
-
- /*
- * Lightning bolt every second:
- * sleep timeouts
- * process priority recomputation
- * process %cpu averaging
- * virtual memory metering
- * kick swapper if processes want in
- */
- if (lbolt >= hz) {
- /*
- * This doesn't mean much on VAX since we run at
- * software interrupt time... if hardclock()
- * calls softclock() directly, it prevents
- * this code from running when the priority
- * was raised when the clock interrupt occurred.
- */
- if (BASEPRI(ps))
- return;
-
- /*
- * If we didn't run a few times because of
- * long blockage at high ipl, we don't
- * really want to run this code several times,
- * so squish out all multiples of hz here.
- */
- time += lbolt / hz;
- lbolt %= hz;
-
- /*
- * Wakeup lightning bolt sleepers.
- * Processes sleep on lbolt to wait
- * for short amounts of time (e.g. 1 second).
- */
- wakeup((caddr_t)&lbolt);
-
- /*
- * Recompute process priority and process
- * sleep() system calls as well as internal
- * sleeps with timeouts (tsleep() kernel routine).
- */
- for (pp = proc; pp < procNPROC; pp++)
- if (pp->p_stat && pp->p_stat!=SZOMB) {
- /*
- * Increase resident time, to max of 127 seconds
- * (it is kept in a character.) For
- * loaded processes this is time in core; for
- * swapped processes, this is time on drum.
- */
- if (pp->p_time != 127)
- pp->p_time++;
- /*
- * If process has clock counting down, and it
- * expires, set it running (if this is a tsleep()),
- * or give it an SIGALRM (if the user process
- * is using alarm signals.
- */
- if (pp->p_clktim && --pp->p_clktim == 0)
- if (pp->p_flag & STIMO) {
- s = spl6();
- switch (pp->p_stat) {