Interrupts are not being delivered by intr_thread() (to for example rumpdisk) at times of very low free memory and blocks in call to kmem_cache_alloc(). This prevents swapout and results in a locked kernel. A simple solution is to make 'intr_thread()' vm_privileged. --- device/intr.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/device/intr.c b/device/intr.c index 8396847e..ab27cba1 100644 --- a/device/intr.c +++ b/device/intr.c @@ -282,6 +282,8 @@ intr_thread (void) user_intr_t *e; int id; ipc_port_t dst_port; + + current_thread()->vm_privilege = 1; queue_init (&main_intr_queue); for (;;) -- 2.47.3
