MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pmap_bootstrap_l3

Function pmap_bootstrap_l3

freebsd/arm64/arm64/pmap.c:914–942  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

912}
913
914static vm_offset_t
915pmap_bootstrap_l3(vm_offset_t l1pt, vm_offset_t va, vm_offset_t l3_start)
916{
917 vm_offset_t l3pt;
918 vm_paddr_t pa;
919 pd_entry_t *l2;
920 u_int l2_slot;
921
922 KASSERT((va & L2_OFFSET) == 0, ("Invalid virtual address"));
923
924 l2 = pmap_l2(kernel_pmap, va);
925 l2 = (pd_entry_t *)rounddown2((uintptr_t)l2, PAGE_SIZE);
926 l2_slot = pmap_l2_index(va);
927 l3pt = l3_start;
928
929 for (; va < VM_MAX_KERNEL_ADDRESS; l2_slot++, va += L2_SIZE) {
930 KASSERT(l2_slot < Ln_ENTRIES, ("Invalid L2 index"));
931
932 pa = pmap_early_vtophys(l1pt, l3pt);
933 pmap_store(&l2[l2_slot],
934 (pa & ~Ln_TABLE_MASK) | ATTR_S1_UXN | L2_TABLE);
935 l3pt += PAGE_SIZE;
936 }
937
938 /* Clean the L2 page table */
939 memset((void *)l3_start, 0, l3pt - l3_start);
940
941 return l3pt;
942}
943
944/*
945 * Bootstrap the system enough to run with virtual memory.

Callers 1

pmap_bootstrapFunction · 0.85

Calls 3

pmap_l2Function · 0.85
pmap_early_vtophysFunction · 0.85
memsetFunction · 0.85

Tested by

no test coverage detected