diff -Nur qemu-cvs/cpu-exec.c qemu-pic/cpu-exec.c --- qemu-cvs/cpu-exec.c 2004-07-14 19:20:55.000000000 +0200 +++ qemu-pic/cpu-exec.c 2004-09-24 00:52:28.000000000 +0200 @@ -228,6 +228,7 @@ int intno; env->interrupt_request &= ~CPU_INTERRUPT_HARD; intno = cpu_get_pic_interrupt(env); + if (intno >= 0) { if (loglevel & CPU_LOG_TB_IN_ASM) { fprintf(logfile, "Servicing hardware INT=0x%02x\n", intno); } @@ -239,6 +240,7 @@ #else T0 = 0; #endif + } } #elif defined(TARGET_PPC) #if 0 diff -Nur qemu-cvs/hw/i8259.c qemu-pic/hw/i8259.c --- qemu-cvs/hw/i8259.c 2004-06-20 14:58:36.000000000 +0200 +++ qemu-pic/hw/i8259.c 2004-09-24 00:55:47.000000000 +0200 @@ -204,19 +204,22 @@ irq2 = pic_get_irq(&pics[1]); if (irq2 >= 0) { pic_intack(&pics[1], irq2); + intno = pics[1].irq_base + irq2; + irq = irq2 + 8; } else { /* spurious IRQ on slave controller */ - irq2 = 7; + irq = -1; + intno = -1; + /* EOI for master PIC */ + pics[0].isr &= ~(1 << 2); } - intno = pics[1].irq_base + irq2; - irq = irq2 + 8; } else { intno = pics[0].irq_base + irq; } } else { /* spurious IRQ on host controller */ - irq = 7; - intno = pics[0].irq_base + irq; + irq = -1; + intno = -1; } pic_update_irq();