> 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.