BSD 4_4_Lite1 release
[unix-history] / usr / src / sys / vm / vm_glue.c
index 1e8f184..5676ff3 100644 (file)
@@ -33,7 +33,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)vm_glue.c   8.1 (Berkeley) 7/15/93
+ *     @(#)vm_glue.c   8.6 (Berkeley) 1/5/94
  *
  *
  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
  *
  *
  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
@@ -71,6 +71,8 @@
 #include <vm/vm_page.h>
 #include <vm/vm_kern.h>
 
 #include <vm/vm_page.h>
 #include <vm/vm_kern.h>
 
+#include <machine/cpu.h>
+
 int    avefree = 0;            /* XXX */
 unsigned maxdmap = MAXDSIZ;    /* XXX */
 int    readbuffers = 0;        /* XXX allow kgdb to read kernel buffer pool */
 int    avefree = 0;            /* XXX */
 unsigned maxdmap = MAXDSIZ;    /* XXX */
 int    readbuffers = 0;        /* XXX allow kgdb to read kernel buffer pool */
@@ -304,7 +306,7 @@ int swapdebug = 0;
  *        clear some space.
  */
 void
  *        clear some space.
  */
 void
-sched()
+scheduler()
 {
        register struct proc *p;
        register int pri;
 {
        register struct proc *p;
        register int pri;
@@ -320,9 +322,9 @@ loop:
 #endif
        pp = NULL;
        ppri = INT_MIN;
 #endif
        pp = NULL;
        ppri = INT_MIN;
-       for (p = (struct proc *)allproc; p != NULL; p = p->p_nxt) {
-               if (p->p_stat == SRUN && (p->p_flag & SLOAD) == 0) {
-                       pri = p->p_time + p->p_slptime - p->p_nice * 8;
+       for (p = (struct proc *)allproc; p != NULL; p = p->p_next) {
+               if (p->p_stat == SRUN && (p->p_flag & P_INMEM) == 0) {
+                       pri = p->p_swtime + p->p_slptime - p->p_nice * 8;
                        if (pri > ppri) {
                                pp = p;
                                ppri = pri;
                        if (pri > ppri) {
                                pp = p;
                                ppri = pri;
@@ -356,12 +358,18 @@ loop:
                               ppri, cnt.v_free_count);
 #endif
                vm_map_pageable(kernel_map, addr, addr+size, FALSE);
                               ppri, cnt.v_free_count);
 #endif
                vm_map_pageable(kernel_map, addr, addr+size, FALSE);
+               /*
+                * Some architectures need to be notified when the
+                * user area has moved to new physical page(s) (e.g.
+                * see pmax/pmax/vm_machdep.c).
+                */
+               cpu_swapin(p);
                (void) splstatclock();
                if (p->p_stat == SRUN)
                (void) splstatclock();
                if (p->p_stat == SRUN)
-                       setrq(p);
-               p->p_flag |= SLOAD;
+                       setrunqueue(p);
+               p->p_flag |= P_INMEM;
                (void) spl0();
                (void) spl0();
-               p->p_time = 0;
+               p->p_swtime = 0;
                goto loop;
        }
        /*
                goto loop;
        }
        /*
@@ -383,8 +391,9 @@ loop:
        goto loop;
 }
 
        goto loop;
 }
 
-#define        swappable(p) \
-       (((p)->p_flag & (SSYS|SLOAD|SKEEP|SWEXIT|SPHYSIO)) == SLOAD)
+#define        swappable(p)                                                    \
+       (((p)->p_flag &                                                 \
+           (P_SYSTEM | P_INMEM | P_NOSWAP | P_WEXIT | P_PHYSIO)) == P_INMEM)
 
 /*
  * Swapout is driven by the pageout daemon.  Very simple, we find eligible
 
 /*
  * Swapout is driven by the pageout daemon.  Very simple, we find eligible
@@ -409,14 +418,14 @@ swapout_threads()
 #endif
        outp = outp2 = NULL;
        outpri = outpri2 = 0;
 #endif
        outp = outp2 = NULL;
        outpri = outpri2 = 0;
-       for (p = (struct proc *)allproc; p != NULL; p = p->p_nxt) {
+       for (p = (struct proc *)allproc; p != NULL; p = p->p_next) {
                if (!swappable(p))
                        continue;
                switch (p->p_stat) {
                case SRUN:
                if (!swappable(p))
                        continue;
                switch (p->p_stat) {
                case SRUN:
-                       if (p->p_time > outpri2) {
+                       if (p->p_swtime > outpri2) {
                                outp2 = p;
                                outp2 = p;
-                               outpri2 = p->p_time;
+                               outpri2 = p->p_swtime;
                        }
                        continue;
                        
                        }
                        continue;
                        
@@ -505,11 +514,11 @@ swapout(p)
        pmap_collect(vm_map_pmap(&p->p_vmspace->vm_map));
 #endif
        (void) splhigh();
        pmap_collect(vm_map_pmap(&p->p_vmspace->vm_map));
 #endif
        (void) splhigh();
-       p->p_flag &= ~SLOAD;
+       p->p_flag &= ~P_INMEM;
        if (p->p_stat == SRUN)
                remrq(p);
        (void) spl0();
        if (p->p_stat == SRUN)
                remrq(p);
        (void) spl0();
-       p->p_time = 0;
+       p->p_swtime = 0;
 }
 
 /*
 }
 
 /*