NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

kern/54821: 9.99.32 assertion in uvm_pageactivate



>Number:         54821
>Category:       kern
>Synopsis:       9.99.32 assertion in uvm_pageactivate
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Jan 01 12:30:00 +0000 2020
>Originator:     Michael van Elst
>Release:        NetBSD 9.99.32
>Organization:

>Environment:


System: NetBSD tazz 9.99.32 NetBSD 9.99.32 (GENERIC)
Architecture: x86_64
Machine: amd64
>Description:
With a -current kernel of today, the system boots but panics late in
the startup sequence.

panic: kernel diagnostic assertion "mutex_owned(&pg->interlock)" failed: file "/scratch/netbsd-current/src/sys/uvm/uvm_page.c", line 1824

The backtrace shows:

vpanic + 0x178
kern_assert + 0x48
uvm_pageactivate + 0x65
amap_cow_now + 0x113
uvmspace_fork + 0x2ec
uvm_proc_fork + 0x3c
fork1 + 0x3ea
sys_fork + 0x29
syscall + 0x299
--- syscall (number 2) ---

then follows a fatal breakpoint trap in supervisor mode over
a rather random address (cr2 = 78f8817f208c).


>How-To-Repeat:
Boot 9.99.32 on amd64 under some unknown conditions.

>Fix:

Maybe just:

Index: sys/uvm/uvm_amap.c
===================================================================
RCS file: /cvsroot/src/sys/uvm/uvm_amap.c,v
retrieving revision 1.111
diff -p -u -r1.111 uvm_amap.c
--- sys/uvm/uvm_amap.c  13 Dec 2019 20:10:22 -0000      1.111
+++ sys/uvm/uvm_amap.c  1 Jan 2020 12:26:10 -0000
@@ -1069,7 +1069,9 @@ ReStart:
 		 * Drop PG_BUSY on new page.  Since its owner was locked all
 		 * this time - it cannot be PG_RELEASED or PG_WANTED.
 		 */
+		uvm_pagelock(npg);
 		uvm_pageactivate(npg);
+		uvm_pageunlock(npg);
 		npg->flags &= ~(PG_BUSY|PG_FAKE);
 		UVM_PAGE_OWN(npg, NULL);
 	}

>Unformatted:
 
 


Home | Main Index | Thread Index | Old Index