Irq 7 is special. It is not just the parallel port. It can also be a
[pintos-anon] / src / threads / interrupt.c
index 6d3f6bb2e269a909de1cce3cdc8ea9d14ae888b5..72b37837dcf420f98110b4e1ab23c838b3704a29 100644 (file)
@@ -355,16 +355,23 @@ intr_handler (struct intr_frame *frame)
       yield_on_return = false;
     }
 
-  /* Invoke the interrupt's handler.
-     If there is no handler, invoke the unexpected interrupt
-     handler. */
+  /* Invoke the interrupt's handler. */
   handler = intr_handlers[frame->vec_no];
-  if (handler == NULL)
+  if (handler != NULL)
+    handler (frame);
+  else if (frame->vec_no == 0x27 || frame->vec_no == 0x2f)
     {
+      /* There is no handler, but this interrupt can trigger
+         spuriously due to a hardware fault or hardware race
+         condition.  Ignore it. */
+    }
+  else 
+    {
+      /* No handler and not spurious.  Invoke the unexpected
+         interrupt handler. */
       intr_dump_frame (frame);
-      PANIC ("Unexpected interrupt");
+      PANIC ("Unexpected interrupt"); 
     }
-  handler (frame);
 
   /* Complete the processing of an external interrupt. */
   if (external)