+ /*
+ * We adjust the priority of the current process.
+ * The priority of a process gets worse as it accumulates
+ * CPU time. The cpu usage estimator (p_cpu) is increased here
+ * and the formula for computing priorities (in kern_synch.c)
+ * will compute a different value each time the p_cpu increases
+ * by 4. The cpu usage estimator ramps up quite quickly when
+ * the process is running (linearly), and decays away
+ * exponentially, * at a rate which is proportionally slower
+ * when the system is busy. The basic principal is that the
+ * system will 90% forget that a process used a lot of CPU
+ * time in 5*loadav seconds. This causes the system to favor
+ * processes which haven't run much recently, and to
+ * round-robin among other processes.
+ */
+ p->p_cpticks++;
+ if (++p->p_cpu == 0)
+ p->p_cpu--;
+ if ((p->p_cpu&3) == 0) {
+ setpri(p);
+ if (p->p_pri >= PUSER)
+ p->p_pri = p->p_usrpri;
+ }
+ }
+
+ /*
+ * If the alternate clock has not made itself known then
+ * we must gather the statistics.
+ */
+ if (phz == 0)
+ gatherstats(&frame);
+
+ /*
+ * Increment the time-of-day, and schedule
+ * processing of the callouts at a very low cpu priority,
+ * so we don't keep the relatively high clock interrupt
+ * priority any longer than necessary.
+ */
+#ifdef ADJTIME
+ if (adjtimedelta == 0)
+ bumptime(&time, tick);
+ else {
+ if (adjtimedelta < 0) {
+ bumptime(&time, tick-ADJ_TICK);
+ adjtimedelta++;
+ } else {
+ bumptime(&time, tick+ADJ_TICK);
+ adjtimedelta--;