X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fio_apic.c;h=35187af42b8706ce83aa02d51436ac1c3626d4d7;hb=30434aee50c56ff4a23400191562c5c9ffaff830;hp=8fa49eee755746b2e4e5bb6c153863b2351da50b;hpb=9e04092774141204bec0341885f5e726410ceb8e;p=palacios.git diff --git a/palacios/src/devices/io_apic.c b/palacios/src/devices/io_apic.c index 8fa49ee..35187af 100644 --- a/palacios/src/devices/io_apic.c +++ b/palacios/src/devices/io_apic.c @@ -245,7 +245,7 @@ static int ioapic_write(struct guest_info * core, addr_t guest_addr, void * src, return -1; } if (hi_val) { - PrintDebug("ioapic %u: Writing to hi of pin %d\n", ioapic->ioapic_id.val, redir_index); + PrintDebug("ioapic %u: Writing to hi of pin %d\n", ioapic->ioapic_id.id, redir_index); ioapic->redir_tbl[redir_index].hi = op_val; } else { PrintDebug("ioapic %u: Writing to lo of pin %d\n", ioapic->ioapic_id.id, redir_index); @@ -274,20 +274,24 @@ static int ioapic_raise_irq(struct v3_vm_info * vm, void * private_data, int irq irq_entry = &(ioapic->redir_tbl[irq]); if (irq_entry->mask == 0) { + struct v3_gen_ipi ipi; PrintDebug("ioapic %u: IOAPIC Signalling APIC to raise INTR %d\n", ioapic->ioapic_id.id, irq_entry->vec); - - // May need these for future reference - // icr.val = irq_entry->val; - // icr.trig_mode = irq_entry->trig_mode; - PrintDebug("io apic: raising irq %u\n", irq); - - - v3_apic_raise_intr(vm, ioapic->apic_dev, irq, irq_entry->val); + ipi.vector = irq_entry->vec; + ipi.mode = irq_entry->del_mode; + ipi.logical = irq_entry->dst_mode; + ipi.trigger_mode = irq_entry->trig_mode; + ipi.dst = irq_entry->dst_field; + ipi.dst_shorthand = 0; + // Need to add destination argument here... + if (v3_apic_send_ipi(vm, ioapic->apic_dev, &ipi) == -1) { + PrintError("Error sending IPI to apic %d\n", ipi.dst); + return -1; + } } return 0;