x86: interrupt return path checks kmsgs
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 27 Oct 2010 00:46:00 +0000 (17:46 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:56 +0000 (17:35 -0700)
It's a little slower (due to checks for current and such), but this way
we'll be sure to handle the kmsg that a given interrupt caused.  Note,
interrupts are still disabled during the handling of the kmsg.

kern/arch/i686/trap.c

index 35438c9..fe53da6 100644 (file)
@@ -331,7 +331,13 @@ void irq_handler(struct trapframe *tf)
        else
                lapic_send_eoi();
 #endif
        else
                lapic_send_eoi();
 #endif
-
+       /* Return to the current process, which should be runnable.  If we're the
+        * kernel, we should just return naturally.  Note that current and tf need
+        * to still be okay (might not be after blocking) */
+       if (in_kernel(tf))
+               return;
+       proc_restartcore(current, tf);
+       assert(0);
 }
 
 void
 }
 
 void