Author: markj
Date: Wed Jan  9 17:41:49 2019
New Revision: 342892
URL: https://svnweb.freebsd.org/changeset/base/342892

Log:
  MFC r342686:
  Avoid setting PG_U unconditionally in pmap_enter_quick_locked().

Modified:
  stable/11/sys/amd64/amd64/pmap.c
  stable/11/sys/i386/i386/pmap.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/amd64/amd64/pmap.c
==============================================================================
--- stable/11/sys/amd64/amd64/pmap.c    Wed Jan  9 17:39:15 2019        
(r342891)
+++ stable/11/sys/amd64/amd64/pmap.c    Wed Jan  9 17:41:49 2019        
(r342892)
@@ -5167,8 +5167,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, v
     vm_prot_t prot, vm_page_t mpte, struct rwlock **lockp)
 {
        struct spglist free;
-       pt_entry_t *pte, PG_V;
-       vm_paddr_t pa;
+       pt_entry_t newpte, *pte, PG_V;
 
        KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva ||
            (m->oflags & VPO_UNMANAGED) != 0,
@@ -5258,17 +5257,15 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, v
         */
        pmap_resident_count_inc(pmap, 1);
 
-       pa = VM_PAGE_TO_PHYS(m) | pmap_cache_bits(pmap, m->md.pat_mode, 0);
+       newpte = VM_PAGE_TO_PHYS(m) | PG_V |
+           pmap_cache_bits(pmap, m->md.pat_mode, 0);
+       if ((m->oflags & VPO_UNMANAGED) == 0)
+               newpte |= PG_MANAGED;
        if ((prot & VM_PROT_EXECUTE) == 0)
-               pa |= pg_nx;
-
-       /*
-        * Now validate mapping with RO protection
-        */
-       if ((m->oflags & VPO_UNMANAGED) != 0)
-               pte_store(pte, pa | PG_V | PG_U);
-       else
-               pte_store(pte, pa | PG_V | PG_U | PG_MANAGED);
+               newpte |= pg_nx;
+       if (va < VM_MAXUSER_ADDRESS)
+               newpte |= PG_U;
+       pte_store(pte, newpte);
        return (mpte);
 }
 

Modified: stable/11/sys/i386/i386/pmap.c
==============================================================================
--- stable/11/sys/i386/i386/pmap.c      Wed Jan  9 17:39:15 2019        
(r342891)
+++ stable/11/sys/i386/i386/pmap.c      Wed Jan  9 17:41:49 2019        
(r342892)
@@ -3822,8 +3822,7 @@ static vm_page_t
 pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
     vm_prot_t prot, vm_page_t mpte)
 {
-       pt_entry_t *pte;
-       vm_paddr_t pa;
+       pt_entry_t newpte, *pte;
        struct spglist free;
 
        KASSERT(va < kmi.clean_sva || va >= kmi.clean_eva ||
@@ -3909,19 +3908,17 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, v
         */
        pmap->pm_stats.resident_count++;
 
-       pa = VM_PAGE_TO_PHYS(m) | pmap_cache_bits(m->md.pat_mode, 0);
+       newpte = VM_PAGE_TO_PHYS(m) | PG_V |
+           pmap_cache_bits(m->md.pat_mode, 0);
+       if ((m->oflags & VPO_UNMANAGED) == 0)
+               newpte |= PG_MANAGED;
 #if defined(PAE) || defined(PAE_TABLES)
        if ((prot & VM_PROT_EXECUTE) == 0)
-               pa |= pg_nx;
+               newpte |= pg_nx;
 #endif
-
-       /*
-        * Now validate mapping with RO protection
-        */
-       if ((m->oflags & VPO_UNMANAGED) != 0)
-               pte_store(pte, pa | PG_V | PG_U);
-       else
-               pte_store(pte, pa | PG_V | PG_U | PG_MANAGED);
+       if (pmap != kernel_pmap)
+               newpte |= PG_U;
+       pte_store(pte, newpte);
        return (mpte);
 }
 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to