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:
Mark Johnston
2026-04-01 05:15:26 -04:00
parent f3b59bf285
commit c6a1c1260f
9 changed files with 9 additions and 9 deletions
+1 -1
View File
@@ -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 +
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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);