get rid of some old flags; TPF_GENERAL_ADDR means somebody is listening
[unix-history] / usr / src / sys / vm / vm_glue.c
index ae04826..82989d8 100644 (file)
@@ -7,7 +7,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)vm_glue.c   7.6 (Berkeley) %G%
+ *     @(#)vm_glue.c   7.9 (Berkeley) %G%
  *
  *
  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
  *
  *
  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
@@ -47,6 +47,7 @@
 
 int    avefree = 0;            /* XXX */
 unsigned maxdmap = MAXDSIZ;    /* XXX */
 
 int    avefree = 0;            /* XXX */
 unsigned maxdmap = MAXDSIZ;    /* XXX */
+int    readbuffers = 0;        /* XXX allow kgdb to read kernel buffer pool */
 
 kernacc(addr, len, rw)
        caddr_t addr;
 
 kernacc(addr, len, rw)
        caddr_t addr;
@@ -68,7 +69,7 @@ kernacc(addr, len, rw)
         * or worse, inconsistencies at the pmap level.  We only worry
         * about the buffer cache for now.
         */
         * or worse, inconsistencies at the pmap level.  We only worry
         * about the buffer cache for now.
         */
-       if (rv && (eaddr > (vm_offset_t)buffers &&
+       if (!readbuffers && rv && (eaddr > (vm_offset_t)buffers &&
                   saddr < (vm_offset_t)buffers + MAXBSIZE * nbuf))
                rv = FALSE;
        return(rv == TRUE);
                   saddr < (vm_offset_t)buffers + MAXBSIZE * nbuf))
                rv = FALSE;
        return(rv == TRUE);
@@ -141,6 +142,14 @@ vm_fork(p1, p2, isvfork)
        register struct user *up;
        vm_offset_t addr;
 
        register struct user *up;
        vm_offset_t addr;
 
+#ifdef i386
+       /*
+        * avoid copying any of the parent's pagetables or other per-process
+        * objects that reside in the map by marking all of them non-inheritable
+        */
+       (void)vm_map_inherit(&p1->p_vmspace->vm_map,
+               UPT_MIN_ADDRESS-UPAGES*NBPG, VM_MAX_ADDRESS, VM_INHERIT_NONE);
+#endif
        p2->p_vmspace = vmspace_fork(p1->p_vmspace);
 
 #ifdef SYSVSHM
        p2->p_vmspace = vmspace_fork(p1->p_vmspace);
 
 #ifdef SYSVSHM
@@ -173,7 +182,6 @@ vm_fork(p1, p2, isvfork)
             (caddr_t)&up->u_stats.pstat_startcopy));
 
 #ifdef i386
             (caddr_t)&up->u_stats.pstat_startcopy));
 
 #ifdef i386
-       /* bug in inherit_none? */
        { u_int addr = UPT_MIN_ADDRESS - UPAGES*NBPG; struct vm_map *vp;
 
        vp = &p2->p_vmspace->vm_map;
        { u_int addr = UPT_MIN_ADDRESS - UPAGES*NBPG; struct vm_map *vp;
 
        vp = &p2->p_vmspace->vm_map;
@@ -213,7 +221,7 @@ vm_init_limits(p)
         p->p_rlimit[RLIMIT_DATA].rlim_cur = DFLDSIZ;
         p->p_rlimit[RLIMIT_DATA].rlim_max = MAXDSIZ;
        p->p_rlimit[RLIMIT_RSS].rlim_cur = p->p_rlimit[RLIMIT_RSS].rlim_max =
         p->p_rlimit[RLIMIT_DATA].rlim_cur = DFLDSIZ;
         p->p_rlimit[RLIMIT_DATA].rlim_max = MAXDSIZ;
        p->p_rlimit[RLIMIT_RSS].rlim_cur = p->p_rlimit[RLIMIT_RSS].rlim_max =
-               ptoa(vm_page_free_count);
+               ptoa(vm_stat.free_count);
 }
 
 #include "../vm/vm_pageout.h"
 }
 
 #include "../vm/vm_pageout.h"
@@ -279,12 +287,12 @@ noswap:
         */
        size = round_page(ctob(UPAGES));
        addr = (vm_offset_t) p->p_addr;
         */
        size = round_page(ctob(UPAGES));
        addr = (vm_offset_t) p->p_addr;
-       if (vm_page_free_count > atop(size)) {
+       if (vm_stat.free_count > atop(size)) {
 #ifdef DEBUG
                if (swapdebug & SDB_SWAPIN)
                        printf("swapin: pid %d(%s)@%x, pri %d free %d\n",
                               p->p_pid, p->p_comm, p->p_addr,
 #ifdef DEBUG
                if (swapdebug & SDB_SWAPIN)
                        printf("swapin: pid %d(%s)@%x, pri %d free %d\n",
                               p->p_pid, p->p_comm, p->p_addr,
-                              ppri, vm_page_free_count);
+                              ppri, vm_stat.free_count);
 #endif
                vm_map_pageable(kernel_map, addr, addr+size, FALSE);
                (void) splclock();
 #endif
                vm_map_pageable(kernel_map, addr, addr+size, FALSE);
                (void) splclock();
@@ -302,14 +310,14 @@ noswap:
 #ifdef DEBUG
        if (swapdebug & SDB_FOLLOW)
                printf("sched: no room for pid %d(%s), free %d\n",
 #ifdef DEBUG
        if (swapdebug & SDB_FOLLOW)
                printf("sched: no room for pid %d(%s), free %d\n",
-                      p->p_pid, p->p_comm, vm_page_free_count);
+                      p->p_pid, p->p_comm, vm_stat.free_count);
 #endif
        (void) splhigh();
        VM_WAIT;
        (void) spl0();
 #ifdef DEBUG
        if (swapdebug & SDB_FOLLOW)
 #endif
        (void) splhigh();
        VM_WAIT;
        (void) spl0();
 #ifdef DEBUG
        if (swapdebug & SDB_FOLLOW)
-               printf("sched: room again, free %d\n", vm_page_free_count);
+               printf("sched: room again, free %d\n", vm_stat.free_count);
 #endif
        goto loop;
 }
 #endif
        goto loop;
 }
@@ -369,7 +377,7 @@ swapout_threads()
         * it (UPAGES pages).
         */
        if (didswap == 0 &&
         * it (UPAGES pages).
         */
        if (didswap == 0 &&
-           vm_page_free_count <= atop(round_page(ctob(UPAGES)))) {
+           vm_stat.free_count <= atop(round_page(ctob(UPAGES)))) {
                if ((p = outp) == 0)
                        p = outp2;
 #ifdef DEBUG
                if ((p = outp) == 0)
                        p = outp2;
 #ifdef DEBUG
@@ -391,7 +399,7 @@ swapout(p)
        if (swapdebug & SDB_SWAPOUT)
                printf("swapout: pid %d(%s)@%x, stat %x pri %d free %d\n",
                       p->p_pid, p->p_comm, p->p_addr, p->p_stat,
        if (swapdebug & SDB_SWAPOUT)
                printf("swapout: pid %d(%s)@%x, stat %x pri %d free %d\n",
                       p->p_pid, p->p_comm, p->p_addr, p->p_stat,
-                      p->p_slptime, vm_page_free_count);
+                      p->p_slptime, vm_stat.free_count);
 #endif
        size = round_page(ctob(UPAGES));
        addr = (vm_offset_t) p->p_addr;
 #endif
        size = round_page(ctob(UPAGES));
        addr = (vm_offset_t) p->p_addr;