Author: andrew
Date: Mon Aug 22 10:21:09 2016
New Revision: 304596
URL: https://svnweb.freebsd.org/changeset/base/304596

Log:
  Add KASSERTS in pmap_alloc_l3 to ensure we are not encountering superpages
  when we don't yet expect them;
  
  Obtained from:        ABT Systems Ltd
  MFC after:    1 month
  Sponsored by: The FreeBSD Foundation

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

Modified: head/sys/arm64/arm64/pmap.c
==============================================================================
--- head/sys/arm64/arm64/pmap.c Mon Aug 22 08:00:14 2016        (r304595)
+++ head/sys/arm64/arm64/pmap.c Mon Aug 22 10:21:09 2016        (r304596)
@@ -1537,6 +1537,9 @@ pmap_alloc_l3(pmap_t pmap, vm_offset_t v
 {
        vm_pindex_t ptepindex;
        pd_entry_t *pde, tpde;
+#ifdef INVARIANTS
+       pt_entry_t *pte;
+#endif
        vm_page_t m;
        int lvl;
 
@@ -1555,13 +1558,33 @@ retry:
         * and activate it. If we get a level 2 pde it will point to a level 3
         * table.
         */
-       if (lvl == 2) {
+       switch (lvl) {
+       case -1:
+               break;
+       case 0:
+#ifdef INVARIANTS
+               pte = pmap_l0_to_l1(pde, va);
+               KASSERT(pmap_load(pte) == 0,
+                   ("pmap_alloc_l3: TODO: l0 superpages"));
+#endif
+               break;
+       case 1:
+#ifdef INVARIANTS
+               pte = pmap_l1_to_l2(pde, va);
+               KASSERT(pmap_load(pte) == 0,
+                   ("pmap_alloc_l3: TODO: l1 superpages"));
+#endif
+               break;
+       case 2:
                tpde = pmap_load(pde);
                if (tpde != 0) {
                        m = PHYS_TO_VM_PAGE(tpde & ~ATTR_MASK);
                        m->wire_count++;
                        return (m);
                }
+               break;
+       default:
+               panic("pmap_alloc_l3: Invalid level %d", lvl);
        }
 
        /*
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to