/*
* GeekOS interrupt handling data structures and functions
* Copyright (c) 2001,2003 David H. Hovemeyer <daveho@cs.umd.edu>
- * $Revision: 1.3 $
+ * $Revision: 1.5 $
*
* This is free software. You are permitted to use,
* redistribute, and modify it as specified in the file "COPYING".
{
Begin_IRQ(state);
- Print("Unexpected Interrupt! Ignoring!\n");
- SerialPrint("*** Unexpected interrupt! *** Ignoring!\n");
- Dump_Interrupt_State(state);
- // SerialPrint_VMCS_ALL();
-
+
+ /* A "feature" of some chipsets is that if an interrupt is raised by mistake
+ * then its automatically assigned to IRQ 7(Int 39).
+ * Makes perfect sense...
+ * See:
+ * http://forums12.itrc.hp.com/service/forums/questionanswer.do?admit=109447627+1204759699215+28353475&threadId=1118488
+ */
+ if (state->intNum != 39) {
+ Print("Unexpected Interrupt! Ignoring!\n");
+ SerialPrint("*** Unexpected interrupt! *** Ignoring!\n");
+ Dump_Interrupt_State(state);
+ }
End_IRQ(state);
//STOP();
{
uint_t errorCode = state->errorCode;
- Print("eax=%08x ebx=%08x ecx=%08x edx=%08x\n"
+ PrintBoth("eax=%08x ebx=%08x ecx=%08x edx=%08x\n"
"esi=%08x edi=%08x ebp=%08x\n"
"eip=%08x cs=%08x eflags=%08x\n"
"Interrupt number=%d (%s), error code=%d\n"