Author: alc
Date: Sat Jun  3 17:24:13 2017
New Revision: 319542
URL: https://svnweb.freebsd.org/changeset/base/319542

Log:
  Eliminate duplication of the pmap and pv list unlock operations in
  pmap_enter() by implementing a single return path.  Otherwise, the
  duplication will only increase with the upcoming support for psind == 1.
  
  Reviewed by:  kib (some time ago)

Modified:
  head/sys/amd64/amd64/pmap.c

Modified: head/sys/amd64/amd64/pmap.c
==============================================================================
--- head/sys/amd64/amd64/pmap.c Sat Jun  3 16:24:17 2017        (r319541)
+++ head/sys/amd64/amd64/pmap.c Sat Jun  3 17:24:13 2017        (r319542)
@@ -4313,6 +4313,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, v
        pv_entry_t pv;
        vm_paddr_t opa, pa;
        vm_page_t mpte, om;
+       int rv;
        boolean_t nosleep;
 
        PG_A = pmap_accessed_bit(pmap);
@@ -4387,10 +4388,8 @@ retry:
                mpte = _pmap_allocpte(pmap, pmap_pde_pindex(va),
                    nosleep ? NULL : &lock);
                if (mpte == NULL && nosleep) {
-                       if (lock != NULL)
-                               rw_wunlock(lock);
-                       PMAP_UNLOCK(pmap);
-                       return (KERN_RESOURCE_SHORTAGE);
+                       rv = KERN_RESOURCE_SHORTAGE;
+                       goto out;
                }
                goto retry;
        } else
@@ -4516,10 +4515,12 @@ unchanged:
            vm_reserv_level_iffullpop(m) == 0)
                pmap_promote_pde(pmap, pde, va, &lock);
 
+       rv = KERN_SUCCESS;
+out:
        if (lock != NULL)
                rw_wunlock(lock);
        PMAP_UNLOCK(pmap);
-       return (KERN_SUCCESS);
+       return (rv);
 }
 
 /*
_______________________________________________
[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