X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2F8259a.c;h=6609a5c4a4b6061287233dc023a0c5de300065fe;hb=022f63d320c2837822dc7f6be84f860a01f02d7c;hp=c10d1efcbc65e64490ea6ffdfbadb1fb81886d7c;hpb=013d95f63ad584b8307ca90a82f8649b0bd7a818;p=palacios.git diff --git a/palacios/src/devices/8259a.c b/palacios/src/devices/8259a.c index c10d1ef..6609a5c 100644 --- a/palacios/src/devices/8259a.c +++ b/palacios/src/devices/8259a.c @@ -318,7 +318,9 @@ static int pic_lower_intr(struct v3_vm_info * vm, void * private_data, struct v3 static int pic_intr_pending_from_master(struct guest_info * info, void * private_data) { struct pic_internal * state = (struct pic_internal*)private_data; - return state->master_irr & (~(state->master_imr)); + return state->master_irr // interrupt pending in the master's irr + & (~(state->master_imr)) // and is not masked in the master + & (~(state->master_icw3)); // and the pin is not hooked to slave } static int pic_intr_pending_from_slave(struct guest_info * info, void * private_data) { @@ -593,7 +595,7 @@ static int write_master_port1(struct guest_info * core, ushort_t port, void * sr if (IS_OCW2(cw)) { // handle the EOI here struct ocw2 * cw2 = (struct ocw2*)&cw; - int eoi_irq; + int eoi_irq=-1; PrintDebug(core->vm_info, core, "8259 PIC: Master: Handling OCW2 = %x (wr_Master1)\n", cw); @@ -748,7 +750,7 @@ static int write_slave_port1(struct guest_info * core, ushort_t port, void * src state->slave_state = ICW2; } else if (state->slave_state == READY) { if (IS_OCW2(cw)) { - int eoi_irq; + int eoi_irq = -1; // handle the EOI here struct ocw2 * cw2 = (struct ocw2 *)&cw;