diff --git a/proc.c b/proc.c
index 614a1304f293208519cc45f557aebb996c5812b1..fdd633d6234c254819de8f45e7b3b96a075dd3b6 100644
--- a/proc.c
+++ b/proc.c
@@ -207,7 +207,7 @@ scheduler(void)
 
   c = &cpus[cpu()];
   for(;;){
-    // Enable interrupts on this processor.
+    // Enable interrupts on this processor, in lieu of saving intena.
     sti();
 
     // Loop over process table looking for process to run.
@@ -240,6 +240,8 @@ scheduler(void)
 void
 sched(void)
 {
+  int intena;
+
   if(read_eflags()&FL_IF)
     panic("sched interruptible");
   if(cp->state == RUNNING)
@@ -249,7 +251,9 @@ sched(void)
   if(cpus[cpu()].ncli != 1)
     panic("sched locks");
 
+  intena = cpus[cpu()].intena;
   swtch(&cp->context, &cpus[cpu()].context);
+  cpus[cpu()].intena = intena;
 }
 
 // Give up the CPU for one scheduling round.