Author: markj
Date: Wed May 20 17:33:11 2020
New Revision: 361285
URL: https://svnweb.freebsd.org/changeset/base/361285

Log:
  MFC r360690:
  Simplify arm64's pmap_bootstrap() a bit.

Modified:
  stable/12/sys/arm64/arm64/pmap.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/arm64/arm64/pmap.c
==============================================================================
--- stable/12/sys/arm64/arm64/pmap.c    Wed May 20 17:27:54 2020        
(r361284)
+++ stable/12/sys/arm64/arm64/pmap.c    Wed May 20 17:33:11 2020        
(r361285)
@@ -779,9 +779,7 @@ void
 pmap_bootstrap(vm_offset_t l0pt, vm_offset_t l1pt, vm_paddr_t kernstart,
     vm_size_t kernlen)
 {
-       u_int l1_slot, l2_slot;
-       pt_entry_t *l2;
-       vm_offset_t va, freemempos;
+       vm_offset_t freemempos;
        vm_offset_t dpcpu, msgbufpv;
        vm_paddr_t start_pa, pa, min_pa;
        uint64_t kern_delta;
@@ -807,7 +805,7 @@ pmap_bootstrap(vm_offset_t l0pt, vm_offset_t l1pt, vm_
         * Find the minimum physical address. physmap is sorted,
         * but may contain empty ranges.
         */
-       for (i = 0; i < (physmap_idx * 2); i += 2) {
+       for (i = 0; i < physmap_idx * 2; i += 2) {
                if (physmap[i] == physmap[i + 1])
                        continue;
                if (physmap[i] <= min_pa)
@@ -820,38 +818,14 @@ pmap_bootstrap(vm_offset_t l0pt, vm_offset_t l1pt, vm_
        /* Create a direct map region early so we can use it for pa -> va */
        freemempos = pmap_bootstrap_dmap(l1pt, min_pa, freemempos);
 
-       va = KERNBASE;
        start_pa = pa = KERNBASE - kern_delta;
 
        /*
-        * Read the page table to find out what is already mapped.
-        * This assumes we have mapped a block of memory from KERNBASE
-        * using a single L1 entry.
+        * Create the l2 tables up to VM_MAX_KERNEL_ADDRESS.  We assume that the
+        * loader allocated the first and only l2 page table page used to map
+        * the kernel, preloaded files and module metadata.
         */
-       l2 = pmap_early_page_idx(l1pt, KERNBASE, &l1_slot, &l2_slot);
-
-       /* Sanity check the index, KERNBASE should be the first VA */
-       KASSERT(l2_slot == 0, ("The L2 index is non-zero"));
-
-       /* Find how many pages we have mapped */
-       for (; l2_slot < Ln_ENTRIES; l2_slot++) {
-               if ((l2[l2_slot] & ATTR_DESCR_MASK) == 0)
-                       break;
-
-               /* Check locore used L2 blocks */
-               KASSERT((l2[l2_slot] & ATTR_DESCR_MASK) == L2_BLOCK,
-                   ("Invalid bootstrap L2 table"));
-               KASSERT((l2[l2_slot] & ~ATTR_MASK) == pa,
-                   ("Incorrect PA in L2 table"));
-
-               va += L2_SIZE;
-               pa += L2_SIZE;
-       }
-
-       va = roundup2(va, L1_SIZE);
-
-       /* Create the l2 tables up to VM_MAX_KERNEL_ADDRESS */
-       freemempos = pmap_bootstrap_l2(l1pt, va, freemempos);
+       freemempos = pmap_bootstrap_l2(l1pt, KERNBASE + L1_SIZE, freemempos);
        /* And the l3 tables for the early devmap */
        freemempos = pmap_bootstrap_l3(l1pt,
            VM_MAX_KERNEL_ADDRESS - (PMAP_MAPDEV_EARLY_SIZE), freemempos);
_______________________________________________
[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