Author: kib
Date: Mon Sep 21 15:53:41 2020
New Revision: 365951
URL: https://svnweb.freebsd.org/changeset/base/365951

Log:
  amd64 pmap: only calculate page table page when needed.
  
  Noted by:     alc
  Reviewed by:  alc, markj
  Sponsored by: The FreeBSD Foundation
  MFC after:    1 week
  Differential revision:        https://reviews.freebsd.org/D26499

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

Modified: head/sys/amd64/amd64/pmap.c
==============================================================================
--- head/sys/amd64/amd64/pmap.c Mon Sep 21 15:49:02 2020        (r365950)
+++ head/sys/amd64/amd64/pmap.c Mon Sep 21 15:53:41 2020        (r365951)
@@ -6525,12 +6525,13 @@ restart:
                        origpte = *pdpe;
                        MPASS(origpte == 0);
                } else {
-                       mp = PHYS_TO_VM_PAGE(*pml4e & PG_FRAME);
                        pdpe = pmap_pdpe(pmap, va);
                        KASSERT(pdpe != NULL, ("va %#lx lost pdpe", va));
                        origpte = *pdpe;
-                       if ((origpte & PG_V) == 0)
+                       if ((origpte & PG_V) == 0) {
+                               mp = PHYS_TO_VM_PAGE(*pml4e & PG_FRAME);
                                mp->ref_count++;
+                       }
                }
                KASSERT((origpte & PG_V) == 0 || ((origpte & PG_PS) != 0 &&
                    (origpte & PG_FRAME) == (pten & PG_FRAME)),
@@ -6563,10 +6564,11 @@ restart:
                } else {
                        pdpe = pmap_pdpe(pmap, va);
                        MPASS(pdpe != NULL && (*pdpe & PG_V) != 0);
-                       mp = PHYS_TO_VM_PAGE(*pdpe & PG_FRAME);
                        origpte = *pde;
-                       if ((origpte & PG_V) == 0)
+                       if ((origpte & PG_V) == 0) {
+                               mp = PHYS_TO_VM_PAGE(*pdpe & PG_FRAME);
                                mp->ref_count++;
+                       }
                }
                KASSERT((origpte & PG_V) == 0 || ((origpte & PG_PS) != 0 &&
                    (origpte & PG_FRAME) == (pten & PG_FRAME)),
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to