Subject: Re: kern/31391: panic: uvm_lwp_fork: uvm_fault_wire failed: 14
To: None <gnats-bugs@netbsd.org>
From: YAMAMOTO Takashi <yamt@mwd.biglobe.ne.jp>
List: netbsd-bugs
Date: 11/07/2005 16:58:24
> >Number:         31391
> >Category:       kern
> >Synopsis:       panic: uvm_lwp_fork: uvm_fault_wire failed: 14

> newlwp(fb02b114,fd187808,c0000000,0,0) at netbsd:newlwp+0xc4

i guess that this c0000000 is due to a bug in uvm_km_valloc1.
maybe it's better to make uvm_uarea_alloc() do waitok allocation.

YAMAMOTO Takashi

Index: uvm_km.c
===================================================================
RCS file: /cvsroot/src/sys/uvm/uvm_km.c,v
retrieving revision 1.77
diff -u -p -r1.77 uvm_km.c
--- uvm_km.c	26 Feb 2005 22:31:44 -0000	1.77
+++ uvm_km.c	7 Nov 2005 07:49:06 -0000
@@ -763,6 +763,10 @@ uvm_km_valloc1(map, size, align, prefer,
 
 	KASSERT(error == 0 || (flags & UVM_KMF_NOWAIT) != 0);
 
+	if (error) {
+		return 0;
+	}
+
 	UVMHIST_LOG(maphist,"<- done (kva=0x%x)", kva,0,0,0);
 
 	return (kva);
Index: uvm_glue.c
===================================================================
RCS file: /cvsroot/src/sys/uvm/uvm_glue.c,v
retrieving revision 1.83.4.2
diff -u -p -r1.83.4.2 uvm_glue.c
--- uvm_glue.c	28 Oct 2005 19:49:21 -0000	1.83.4.2
+++ uvm_glue.c	7 Nov 2005 07:49:06 -0000
@@ -319,7 +319,8 @@ uvm_uarea_alloc(vaddr_t *uaddrp)
 		return TRUE;
 	} else {
 		simple_unlock(&uvm_uareas_slock);
-		*uaddrp = uvm_km_valloc_align(kernel_map, USPACE, USPACE_ALIGN);
+		*uaddrp = uvm_km_valloc1(kernel_map, USPACE, USPACE_ALIGN,
+		    UVM_UNKNOWN_OFFSET, 0);
 		return FALSE;
 	}
 }