A litte trouble with declarations of boot() and panic() resolved. gcc-2.5.8
[unix-history] / sys / kern / sys_process.c
index 2a328de..902cc12 100644 (file)
@@ -31,7 +31,7 @@
  * SUCH DAMAGE.
  *
  *     from: @(#)sys_process.c 7.22 (Berkeley) 5/11/91
  * SUCH DAMAGE.
  *
  *     from: @(#)sys_process.c 7.22 (Berkeley) 5/11/91
- *     $Id: sys_process.c,v 1.8 1993/12/02 02:48:15 davidg Exp $
+ *     $Id: sys_process.c,v 1.9 1993/12/19 00:51:35 wollman Exp $
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -180,13 +180,24 @@ pwrite (struct proc *procp, unsigned int addr, unsigned int datum) {
 
        vm_map_lookup_done (tmap, out_entry);
   
 
        vm_map_lookup_done (tmap, out_entry);
   
+       /*
+        * Fault the page-table-page in...
+        */
+       vm_map_pageable(map, trunc_page(vtopte(pageno)),
+               trunc_page(vtopte(pageno)) + NBPG, FALSE);
        /*
         * Fault the page in...
         */
 
        rv = vm_fault (map, pageno, VM_PROT_WRITE, FALSE);
        /*
         * Fault the page in...
         */
 
        rv = vm_fault (map, pageno, VM_PROT_WRITE, FALSE);
-       if (rv != KERN_SUCCESS)
+       if (rv != KERN_SUCCESS) {
+               /*
+                * release the page table page
+                */
+               vm_map_pageable(map, trunc_page(vtopte(pageno)),
+                       trunc_page(vtopte(pageno)) + NBPG, TRUE);
                return EFAULT;
                return EFAULT;
+       }
 
        /*
         * The page may need to be faulted in again, it seems.
 
        /*
         * The page may need to be faulted in again, it seems.
@@ -203,7 +214,7 @@ pwrite (struct proc *procp, unsigned int addr, unsigned int datum) {
        if (!rv) {
                vm_object_reference (object);
 
        if (!rv) {
                vm_object_reference (object);
 
-               rv = vm_map_pageable (kernel_map, kva, kva + PAGE_SIZE, 0);
+               rv = vm_map_pageable (kernel_map, kva, kva + PAGE_SIZE, FALSE);
                if (!rv) {
                  bcopy (&datum, (caddr_t)(kva + page_offset), sizeof datum);
                }
                if (!rv) {
                  bcopy (&datum, (caddr_t)(kva + page_offset), sizeof datum);
                }
@@ -213,6 +224,13 @@ pwrite (struct proc *procp, unsigned int addr, unsigned int datum) {
        if (fix_prot)
                vm_map_protect (map, pageno, pageno + PAGE_SIZE,
                        VM_PROT_READ|VM_PROT_EXECUTE, 0);
        if (fix_prot)
                vm_map_protect (map, pageno, pageno + PAGE_SIZE,
                        VM_PROT_READ|VM_PROT_EXECUTE, 0);
+
+       /*
+        * release the page table page
+        */
+       vm_map_pageable(map, trunc_page(vtopte(pageno)),
+               trunc_page(vtopte(pageno)) + NBPG, TRUE);
+
        return rv;
 }
 
        return rv;
 }