$NetBSD: patch-ac,v 1.1.1.1 2001/07/07 14:40:07 veego Exp $

--- source/vmmon/netbsd/host.c	Tue Apr  3 14:23:08 2001
+++ source/vmmon/netbsd/host.c	Thu Jun 28 21:52:09 2001
@@ -315,9 +315,16 @@
 
 		/*
 		 * now locate it and write the results back to the pmap
+		 *
+		 * Under extreme memory pressure, the page may be gone again.
+		 * Just fail the lock in that case.
+		 * (It was ASSERT_BUG(6339, mpn).)
+		 * -- edward
 		 */
 		mpn = FindMPN(vpn);
-		ASSERT(mpn);
+		if (mpn == 0) {
+			return 0;
+		}
      	 
 		/*
 		 * XXX SMP.
@@ -628,6 +635,7 @@
 	if (vm->crossvaddr != NULL)
 		Warning("KernelAddr already allocated\n");
 
+	PHOLD(curproc);
 	uvm_vslock(curproc, addr, PAGE_SIZE,
 	    VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
 
@@ -636,6 +644,7 @@
 	pmap_extract(vm_map_pmap(&curproc->p_vmspace->vm_map), uaddr, &paddr);
 	pmap_kenter_pa(kvaddr, paddr,
 	    VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE);
+	PRELE(curproc);
 	vm->crossvaddr = (void *)kvaddr;
 	vm->crossuaddr = addr;
 #ifdef DEBUG
