Hi Frank, Could you please try the diff below? -p. Index: uvm_km.c =================================================================== RCS file: /data/cvs/openbsd/src/sys/uvm/uvm_km.c,v retrieving revision 1.63 diff -u -p -r1.63 uvm_km.c --- uvm_km.c 29 Apr 2007 15:46:42 -0000 1.63 +++ uvm_km.c 4 Jun 2007 07:03:19 -0000 @@ -534,10 +534,20 @@ uvm_km_alloc1(struct vm_map *map, vsize_ } simple_unlock(&uvm.kernel_object->vmobjlock); if (__predict_false(pg == NULL)) { - uvm_wait("km_alloc1w"); /* wait for memory */ - continue; + if (curproc == uvm.pagedaemon_proc) { + /* + * It is unfeasible for the page daemon to + * sleep for memory, so free what we have + * allocated and fail. + */ + uvm_unmap(map, kva, loopva - kva); + return (NULL); + } else { + uvm_wait("km_alloc1w"); /* wait for memory */ + continue; + } } - + /* * map it in; note we're never called with an intrsafe * object, so we always use regular old pmap_enter(). !DSPAM:4663cef315161970415933!