As reported by AIsha Tammy on bugs@, there's a current recursion
possible with the pageqlock:
ddb> trace
db_enter() at db_enter+0x10
panic(ffffffff81dcd47c) at panic+0x12a
mtx_enter(ffffffffB219ed00) at mtx_enter+0x81
uvm_objfree(fffffd8015f2c9a0) at uvm_objfree+0x61
buf_dealloc_mem(fffffd8015f2c8e0) at buf_dealloc_mem+0x7c
buf_put(fffffd8O15f2c8e0) at buf _put+Oxcd
brelse(fffffd8O15f2c8e0) at brelse+0x3df
sd_buf_done(fffffd8014a27028) at sd_buf_done+0xf9
vioblk_vq_done (ffff8000000c 7050) at vioblk_vq_done+0x6f
virtio_check_vqs (ffff80000009ce00) at virtio_check_vqs+0xfe
intr_handler (ffff80000e6dea70, ffff800000047700) at intr_handler+0x38
Xintr_ioapic_edge19_untramp() at Xintr_ioapic_edge19_untramp+0x18f
mtx_enter (fffffd8002699680) at mtx_enter+0xb
uvm_pagedeactivate(fffffd800Z2699680) at uvm_pagedeactivate+0x105
uyvmpd_scan() at uvmpd_scan+0x259
uvm_pageout (ffff8000ffff9718) at uvm_pageout +0x375
end trace frame: 0x0, count: -16
Diff below should prevent that, ok?
Index: uvm/uvm_page.c
===================================================================
RCS file: /cvs/src/sys/uvm/uvm_page.c,v
retrieving revision 1.151
diff -u -p -r1.151 uvm_page.c
--- uvm/uvm_page.c 24 Nov 2020 13:49:09 -0000 1.151
+++ uvm/uvm_page.c 26 Nov 2020 17:17:55 -0000
@@ -180,7 +180,7 @@ uvm_page_init(vaddr_t *kvm_startp, vaddr
TAILQ_INIT(&uvm.page_active);
TAILQ_INIT(&uvm.page_inactive_swp);
TAILQ_INIT(&uvm.page_inactive_obj);
- mtx_init(&uvm.pageqlock, IPL_NONE);
+ mtx_init(&uvm.pageqlock, IPL_VM);
mtx_init(&uvm.fpageqlock, IPL_VM);
uvm_pmr_init();