pmap: Do not use PMAP_LOCK_INIT with kernel_pmap
The kernel_pmap lock is a bit special: it does not need the DUPOK flag, and it really belongs to a different lock class. If it belongs to the same class as regular pmap locks, then witness may report warnings when performing UMA allocations under a regular pmap lock, if the allocation triggers a pmap_growkernel() call. Replace instances of PMAP_LOCK_INIT(kernel_pmap) with inline mtx_init() calls to silence some witness warnings for harmless behaviour I see with some uncommitted test programs. Reviewed by: alc, kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D56185
This commit is contained in:
@@ -2127,7 +2127,7 @@ pmap_bootstrap(vm_paddr_t *firstaddr)
|
||||
* DMAP_TO_PHYS()/PHYS_TO_DMAP() are functional only after
|
||||
* kva_layout is fixed.
|
||||
*/
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF);
|
||||
if (la57) {
|
||||
kva_layout = kva_layout_la57;
|
||||
vtoptem = ((1ul << (NPTEPGSHIFT + NPDEPGSHIFT + NPDPEPGSHIFT +
|
||||
|
||||
@@ -1173,7 +1173,7 @@ pmap_bootstrap(vm_offset_t firstaddr)
|
||||
/*
|
||||
* Initialize the kernel pmap (which is statically allocated).
|
||||
*/
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF);
|
||||
kernel_l1pa = (vm_paddr_t)kern_pt1; /* for libkvm */
|
||||
kernel_pmap->pm_pt1 = kern_pt1;
|
||||
kernel_pmap->pm_pt2tab = kern_pt2tab;
|
||||
|
||||
@@ -1347,7 +1347,7 @@ pmap_bootstrap(void)
|
||||
|
||||
/* Set this early so we can use the pagetable walking functions */
|
||||
kernel_pmap_store.pm_l0 = pagetable_l0_ttbr1;
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF);
|
||||
kernel_pmap->pm_l0_paddr =
|
||||
pmap_early_vtophys((vm_offset_t)kernel_pmap_store.pm_l0);
|
||||
TAILQ_INIT(&kernel_pmap->pm_pvchunk);
|
||||
|
||||
@@ -630,7 +630,7 @@ __CONCAT(PMTYPE, bootstrap)(vm_paddr_t firstaddr)
|
||||
* Count bootstrap data as being resident in case any of this data is
|
||||
* later unmapped (using pmap_remove()) and freed.
|
||||
*/
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF);
|
||||
kernel_pmap->pm_pdir = IdlePTD;
|
||||
#ifdef PMAP_PAE_COMP
|
||||
kernel_pmap->pm_pdpt = IdlePDPT;
|
||||
|
||||
@@ -878,7 +878,7 @@ moea_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
|
||||
/*
|
||||
* Initialize the kernel pmap (which is statically allocated).
|
||||
*/
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF);
|
||||
for (i = 0; i < 16; i++)
|
||||
kernel_pmap->pm_sr[i] = EMPTY_SEGMENT + i;
|
||||
CPU_FILL(&kernel_pmap->pm_active);
|
||||
|
||||
@@ -1089,7 +1089,7 @@ moea64_mid_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
|
||||
CPU_FILL(&kernel_pmap->pm_active);
|
||||
RB_INIT(&kernel_pmap->pmap_pvo);
|
||||
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF);
|
||||
|
||||
/*
|
||||
* Now map in all the other buffers we allocated earlier
|
||||
|
||||
@@ -1842,7 +1842,7 @@ mmu_radix_setup_pagetables(vm_size_t hwphyssz)
|
||||
vm_paddr_t l1phys;
|
||||
|
||||
bzero(kernel_pmap, sizeof(struct pmap));
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF);
|
||||
vm_radix_init(&kernel_pmap->pm_radix);
|
||||
|
||||
ptpages = allocpages(3);
|
||||
|
||||
@@ -901,7 +901,7 @@ mmu_booke_bootstrap(vm_offset_t start, vm_offset_t kernelend)
|
||||
/*******************************************************/
|
||||
/* Initialize (statically allocated) kernel pmap. */
|
||||
/*******************************************************/
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF);
|
||||
|
||||
debugf("kernel_pmap = 0x%"PRI0ptrX"\n", (uintptr_t)kernel_pmap);
|
||||
kernel_pte_alloc(virtual_avail, kernstart);
|
||||
|
||||
@@ -921,7 +921,7 @@ pmap_bootstrap(vm_paddr_t kernstart, vm_size_t kernlen)
|
||||
|
||||
printf("pmap_bootstrap %lx %lx\n", kernstart, kernlen);
|
||||
|
||||
PMAP_LOCK_INIT(kernel_pmap);
|
||||
mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF);
|
||||
TAILQ_INIT(&kernel_pmap->pm_pvchunk);
|
||||
vm_radix_init(&kernel_pmap->pm_root);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user