On 16/12/20(Wed) 22:49, Greg Steuck wrote:
> I just hit this while booting an i386-current in vmd. The source tree is
> synced to "Remove the assertion in uvm_km_pgremove()."
>
> I enabled WITNESS on top of GENERIC. Naturally, GENERIC-Dec15 snap works.
>
> Anybody else see this so I know it's worth a bisect?
> [...]
I can reproduce it. Diff below fixes it. This is the beginning of a
rabbit hole... thanks!
> witness: lock_object uninitialized: 0xd0f3c828
> Starting stack trace...
> witness_checkorder(0,d6bb011c,d1155e6c,d02e10e4,90) at witness_checkorder+0x8a
> witness_checkorder(d0f3c828,9,0) at witness_checkorder+0x8a
> mtx_enter(d0f3c81c) at mtx_enter+0x27
> pmap_extract_pae(d8bb0d80,f5605000,d8bb0da0) at pmap_extract_pae+0x53
> pmap_pinit_pd_pae(d8bb0d80) at pmap_pinit_pd_pae+0x268
> pmap_create(1,1000,f6fe5e86,d8bbfd54,d0f5ba18) at pmap_create+0xa8
> uvmspace_fork(d0f5b5fc,d8bb3e34,d0f5b5fc,1,d1155f70) at uvmspace_fork+0x56
> process_new(d8bb3e34,d0f5b5fc,1) at process_new+0xeb
> fork1(d0eb7b14,1,d04eb560,0,0,d1155f90) at fork1+0x1ba
> panic: acquiring blockable sleep lock with spinlock or critical section held
> (rwlock) kmmaplk
pmap_kernel()'s mutexes aren't initialized. Diff below does that.
Index: arch/i386/i386/pmap.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/pmap.c,v
retrieving revision 1.209
diff -u -p -r1.209 pmap.c
--- arch/i386/i386/pmap.c 24 Sep 2020 11:36:50 -0000 1.209
+++ arch/i386/i386/pmap.c 17 Dec 2020 21:47:11 -0000
@@ -961,6 +961,8 @@ pmap_bootstrap(vaddr_t kva_start)
*/
kpm = pmap_kernel();
+ mtx_init(&kpm->pm_mtx, IPL_VM);
+ mtx_init(&kpm->pm_apte_mtx, IPL_VM);
uvm_objinit(&kpm->pm_obj, NULL, 1);
bzero(&kpm->pm_list, sizeof(kpm->pm_list)); /* pm_list not used */
kpm->pm_pdir = (vaddr_t)(proc0.p_addr->u_pcb.pcb_cr3 + KERNBASE);