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


Reply via email to