> Date: Thu, 28 Jan 2010 18:55:55 +0300
> From: Mike Belopuhov <m...@crypt.org.ru>
> 
> Hi all,
> 
> could someone please enlighten me how this uvm_pseg_get is supposed
> to work?
> 
> uvm_pseg_get
> mtx_enter(&uvm_pseg_lck);
> `-> uvm_pseg_init
>     `-> uvm_km_valloc
>         `-> uvm_km_valloc_align
>             `-> uvm_map
>                 `-> vm_map_lock <-- sleeping lock
> 
> Debugger(10,d73eeeac,d03e0ee2,d06ab9a0,0) at Debugger+0x4
> panic(d020319c,d73eeecc,d03ad948,d06ab980,d51c8000) at panic+0x61
> mtx_enter(d06ab980,d51c8000,d51d8000,d02f70c5,10000) at mtx_enter+0x5c
> uvm_pseg_release(d51c8000,10,d73eeefc,d02f41d4,50) at uvm_pseg_release+0x64
> uvm_aio_aiodone(d0f422e4,0,d11c1c3c,d73eef90,d02e763d) at uvm_aio_aiodone+0xba
> uvm_aiodone_daemon(d11c1c3c) at uvm_aiodone_daemon+0x97
> Bad frame pointer: 0xd079ceb8
> 
> OpenBSD 4.6.
> 
> Or am I missing something?

No, I think you're right.  I think uvm_pseg_init() should use a memory
allocation function that can't sleep.

I think I brought this up before questioning whether uvm_km_valloc()
was allowed to sleep (since we also have uvm_km_valloc_wait()).  To
that question art@ answered that uvm_km_valloc() still was allowed to
sleep.

Reply via email to