Author: alc
Date: Sat Jun  5 18:20:09 2010
New Revision: 208846
URL: http://svn.freebsd.org/changeset/base/208846

Log:
  Don't set PG_WRITEABLE in pmap_enter() unless the page is managed.
  
  Correct a typo in a nearby comment on sparc64.

Modified:
  head/sys/arm/arm/pmap.c
  head/sys/powerpc/booke/pmap.c
  head/sys/sparc64/sparc64/pmap.c

Modified: head/sys/arm/arm/pmap.c
==============================================================================
--- head/sys/arm/arm/pmap.c     Sat Jun  5 18:01:34 2010        (r208845)
+++ head/sys/arm/arm/pmap.c     Sat Jun  5 18:20:09 2010        (r208846)
@@ -3412,7 +3412,8 @@ do_l2b_alloc:
        
        if (prot & VM_PROT_WRITE) {
                npte |= L2_S_PROT_W;
-               if (m != NULL)
+               if (m != NULL &&
+                   (m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
                        vm_page_flag_set(m, PG_WRITEABLE);
        }
        npte |= pte_l2_s_cache_mode;

Modified: head/sys/powerpc/booke/pmap.c
==============================================================================
--- head/sys/powerpc/booke/pmap.c       Sat Jun  5 18:01:34 2010        
(r208845)
+++ head/sys/powerpc/booke/pmap.c       Sat Jun  5 18:20:09 2010        
(r208846)
@@ -1596,7 +1596,8 @@ mmu_booke_enter_locked(mmu_t mmu, pmap_t
                        if (!su)
                                flags |= PTE_UW;
 
-                       vm_page_flag_set(m, PG_WRITEABLE);
+                       if ((flags & PTE_MANAGED) != 0)
+                               vm_page_flag_set(m, PG_WRITEABLE);
                } else {
                        /* Handle modified pages, sense modify status. */
 
@@ -1662,7 +1663,8 @@ mmu_booke_enter_locked(mmu_t mmu, pmap_t
                        if (!su)
                                flags |= PTE_UW;
 
-                       vm_page_flag_set(m, PG_WRITEABLE);
+                       if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
+                               vm_page_flag_set(m, PG_WRITEABLE);
                }
 
                if (prot & VM_PROT_EXECUTE) {

Modified: head/sys/sparc64/sparc64/pmap.c
==============================================================================
--- head/sys/sparc64/sparc64/pmap.c     Sat Jun  5 18:01:34 2010        
(r208845)
+++ head/sys/sparc64/sparc64/pmap.c     Sat Jun  5 18:20:09 2010        
(r208846)
@@ -1409,7 +1409,8 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
                        tp->tte_data |= TD_SW;
                        if (wired)
                                tp->tte_data |= TD_W;
-                       vm_page_flag_set(m, PG_WRITEABLE);
+                       if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
+                               vm_page_flag_set(m, PG_WRITEABLE);
                } else if ((data & TD_W) != 0)
                        vm_page_dirty(m);
 
@@ -1429,7 +1430,7 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
        } else {
                /*
                 * If there is an existing mapping, but its for a different
-                * phsyical address, delete the old mapping.
+                * physical address, delete the old mapping.
                 */
                if (tp != NULL) {
                        CTR0(KTR_PMAP, "pmap_enter_locked: replace");
@@ -1449,7 +1450,8 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
                        data |= TD_P;
                if ((prot & VM_PROT_WRITE) != 0) {
                        data |= TD_SW;
-                       vm_page_flag_set(m, PG_WRITEABLE);
+                       if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
+                               vm_page_flag_set(m, PG_WRITEABLE);
                }
                if (prot & VM_PROT_EXECUTE) {
                        data |= TD_EXEC;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to