On Fri, Dec 10, 2010 at 02:04:17PM +0100, Wouter Coene wrote: > According to Ariane van der Steldt (ari...@stack.nl): > > On Thu, Dec 09, 2010 at 10:32:57PM +0100, Wouter Coene wrote: > > > + addr = uvm_km_kmemalloc(kernel_map, NULL, PAGE_SIZE, > > > + UVM_KMF_CANFAIL | UVM_KMF_ZERO); > > > > If you specify NULL as your object, you'll be given intr-safe memory. > > You want to use kernel object instead: > > Ah, now it makes sense. How about this diff: >
new sentence, new line, for man page diffs please. jmc > Index: uvm.9 > =================================================================== > RCS file: /cvs/openbsd/src/share/man/man9/uvm.9,v > retrieving revision 1.42 > diff -u -a -r1.42 uvm.9 > --- uvm.9 9 Nov 2010 16:03:38 -0000 1.42 > +++ uvm.9 10 Dec 2010 13:00:05 -0000 > @@ -534,7 +534,12 @@ > .Fa size > bytes of wired memory in the kernel map, zeroing the memory if the > .Fa zeroit > -argument is non-zero. > +argument is non-zero. Unless called on an interrupt-safe map, if memory is > +currently unavailable, > +.Fn uvm_km_alloc1 > +may sleep to wait for resources to be released by other processes. If not > +enough memory is available, this function returns > +.Dv NULL . > .Pp > The > .Fn uvm_km_kmemalloc > @@ -542,6 +547,10 @@ > .Fa size > bytes of wired kernel memory into > .Fa obj . > +.Fa obj > +can only be > +.Dv NULL > +when allocating from an interrupt-safe map. > The flags can be any of: > .Bd -literal > #define UVM_KMF_NOWAIT 0x1 /* matches M_NOWAIT */ > @@ -608,9 +617,9 @@ > bytes of memory in the kernel map, starting at address > .Fa addr . > .Fn uvm_km_free_wakeup > -calls > -.Fn thread_wakeup > -on the map before unlocking the map. > +wakes up any processes waiting for memory on the map (via > +.Fn thread_wakeup ) > +before unlocking the map. > .Sh ALLOCATION OF PHYSICAL MEMORY > .nr nS 1 > .Ft struct vm_page * > > Also, maybe a stupid question, but why doesn't the irq-safety of the > allocation depend on the VM_MAP_INTRSAFE flag, like for uvm_km_free()? > > Thanks, > Wouter Coene