Backout previous "Unwire with map lock held" (commitid: eQBvWUwShD91dN9Z)
authorkn <kn@openbsd.org>
Fri, 11 Feb 2022 12:06:48 +0000 (12:06 +0000)
committerkn <kn@openbsd.org>
Fri, 11 Feb 2022 12:06:48 +0000 (12:06 +0000)
WITNESS builds broke^W^Wkernels panic on boot as reported by anton and bluhm.
Booting bsd.mp in single-user mode inside VMM shows:

root on sd0a (5f9e458ed30b39ab.a) swap on sd0b dump on sd0b
Enter pathname of shell or RETURN for sh:
witness: lock order reversal:
 1st 0xfffffd801f8ce468 vmmaplk (&map->lock)
 2nd 0xfffffd801b8162c0 inode (&ip->i_lock)
lock order "&ip->i_lock"(rrwlock) -> "&map->lock"(rwlock) first seen at:
#0  rw_enter_read+0x38
#1  uvmfault_lookup+0x8a
#2  uvm_fault_check+0x32
#3  uvm_fault+0xfb
#4  kpageflttrap+0x12c
#5  kerntrap+0x91
#6  alltraps_kern_meltdown+0x7b
#7  copyout+0x53
#8  ffs_read+0x1f6
#9  VOP_READ+0x41
#10 vn_rdwr+0xa1
#11 vmcmd_map_readvn+0xa0
#12 exec_process_vmcmds+0x88
#13 sys_execve+0x732
#14 start_init+0x26f
#15 proc_trampoline+0x1c
lock order data w1 -> w2 missing
# exit
kernel: protection fault trap, code=0
Stopped at      witness_checkorder+0x312:       movl    0x10(%r14),%ecx

gkoehler reported faults on poisened addresses on macppc dual G5.

sys/uvm/uvm_map.c

index ff46892..9263c4d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: uvm_map.c,v 1.285 2022/02/11 09:25:04 kn Exp $        */
+/*     $OpenBSD: uvm_map.c,v 1.286 2022/02/11 12:06:48 kn Exp $        */
 /*     $NetBSD: uvm_map.c,v 1.86 2000/11/27 08:40:03 chs Exp $ */
 
 /*
@@ -2734,7 +2734,6 @@ uvm_map_teardown(struct vm_map *map)
        KERNEL_ASSERT_UNLOCKED();
 
        KASSERT((map->flags & VM_MAP_INTRSAFE) == 0);
-       vm_map_lock(map);
 
        /* Remove address selectors. */
        uvm_addr_destroy(map->uaddr_exe);