mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
arm64/riscv pmap: Initialize the pmap's pm_pvchunk field
I believe that there are two reasons that the missing TAILQ initialization operations haven't caused a problem. First, the TAILQ head's first field is being initialized to zeroes elsewhere. Second, the first access to the TAILQ head's last field is by TAILQ_INSERT_HEAD(), which assigns to the last field without reading it when the first field is NULL. Reviewed by: kib, markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D41118
This commit is contained in:
parent
5d3c982549
commit
29edff0dea
2 changed files with 6 additions and 0 deletions
|
|
@ -1291,6 +1291,7 @@ pmap_bootstrap(vm_paddr_t kernstart, vm_size_t kernlen)
|
|||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
kernel_pmap->pm_l0_paddr =
|
||||
pmap_early_vtophys((vm_offset_t)kernel_pmap_store.pm_l0);
|
||||
TAILQ_INIT(&kernel_pmap->pm_pvchunk);
|
||||
vm_radix_init(&kernel_pmap->pm_root);
|
||||
kernel_pmap->pm_cookie = COOKIE_FROM(-1, INT_MIN);
|
||||
kernel_pmap->pm_stage = PM_STAGE1;
|
||||
|
|
@ -2270,6 +2271,7 @@ pmap_pinit0(pmap_t pmap)
|
|||
bzero(&pmap->pm_stats, sizeof(pmap->pm_stats));
|
||||
pmap->pm_l0_paddr = READ_SPECIALREG(ttbr0_el1);
|
||||
pmap->pm_l0 = (pd_entry_t *)PHYS_TO_DMAP(pmap->pm_l0_paddr);
|
||||
TAILQ_INIT(&pmap->pm_pvchunk);
|
||||
vm_radix_init(&pmap->pm_root);
|
||||
pmap->pm_cookie = COOKIE_FROM(ASID_RESERVED_FOR_PID_0, INT_MIN);
|
||||
pmap->pm_stage = PM_STAGE1;
|
||||
|
|
@ -2293,6 +2295,7 @@ pmap_pinit_stage(pmap_t pmap, enum pmap_stage stage, int levels)
|
|||
pmap->pm_l0_paddr = VM_PAGE_TO_PHYS(m);
|
||||
pmap->pm_l0 = (pd_entry_t *)PHYS_TO_DMAP(pmap->pm_l0_paddr);
|
||||
|
||||
TAILQ_INIT(&pmap->pm_pvchunk);
|
||||
vm_radix_init(&pmap->pm_root);
|
||||
bzero(&pmap->pm_stats, sizeof(pmap->pm_stats));
|
||||
pmap->pm_cookie = COOKIE_FROM(-1, INT_MAX);
|
||||
|
|
|
|||
|
|
@ -646,6 +646,7 @@ pmap_bootstrap(vm_offset_t l1pt, vm_paddr_t kernstart, vm_size_t kernlen)
|
|||
/* Set this early so we can use the pagetable walking functions */
|
||||
kernel_pmap_store.pm_top = (pd_entry_t *)l1pt;
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
TAILQ_INIT(&kernel_pmap->pm_pvchunk);
|
||||
vm_radix_init(&kernel_pmap->pm_root);
|
||||
|
||||
rw_init(&pvh_global_lock, "pmap pv global");
|
||||
|
|
@ -1327,6 +1328,7 @@ pmap_pinit0(pmap_t pmap)
|
|||
pmap->pm_satp = pmap_satp_mode() |
|
||||
(vtophys(pmap->pm_top) >> PAGE_SHIFT);
|
||||
CPU_ZERO(&pmap->pm_active);
|
||||
TAILQ_INIT(&pmap->pm_pvchunk);
|
||||
vm_radix_init(&pmap->pm_root);
|
||||
pmap_activate_boot(pmap);
|
||||
}
|
||||
|
|
@ -1369,6 +1371,7 @@ pmap_pinit(pmap_t pmap)
|
|||
pmap->pm_top[i] = kernel_pmap->pm_top[i];
|
||||
}
|
||||
|
||||
TAILQ_INIT(&pmap->pm_pvchunk);
|
||||
vm_radix_init(&pmap->pm_root);
|
||||
|
||||
return (1);
|
||||
|
|
|
|||
Loading…
Reference in a new issue