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);

Reply via email to