-typedef enum {INIT_ST, SIPI, STARTED} ipi_state_t;
+typedef enum {INIT_ST,
+ SIPI,
+ STARTED} ipi_state_t;
struct apic_dev_state;
if (irq_num <= 15) {
- PrintError("apic %u: core ?: Attempting to raise an invalid interrupt: %d\n", apic->lapic_id.val,irq_num);
+ PrintError("apic %u: core %d: Attempting to raise an invalid interrupt: %d\n",
+ apic->lapic_id.val, apic->core->cpu_id, irq_num);
return -1;
}
- PrintDebug("apic %u: core ?: Raising APIC IRQ %d\n", apic->lapic_id.val, irq_num);
+ PrintDebug("apic %u: core %d: Raising APIC IRQ %d\n", apic->lapic_id.val, apic->core->cpu_id, irq_num);
if (*req_location & flag) {
- //V3_Print("Interrupts coallescing\n");
+ PrintDebug("Interrupt %d coallescing\n", irq_num);
}
if (*en_location & flag) {
*req_location |= flag;
} else {
- PrintDebug("apic %u: core ?: Interrupt not enabled... %.2x\n",
- apic->lapic_id.val, *en_location);
+ PrintDebug("apic %u: core %d: Interrupt not enabled... %.2x\n",
+ apic->lapic_id.val, apic->core->cpu_id,*en_location);
return 0;
}
case 0: //fixed
case 1: // lowest priority
- PrintDebug(" delivering IRQ to core %u\n", dst_core->cpu_id);
+ PrintDebug("delivering IRQ %d to core %u\n", vector, dst_core->cpu_id);
activate_apic_irq(dst_apic, vector);
// host maitains logical proc->phsysical proc
PrintDebug(" non-local core, forcing it to exit\n");
- v3_interrupt_cpu(core->vm_info, dst_core->cpu_id, 0);
+ v3_interrupt_cpu(dst_core->vm_info, dst_core->cpu_id, 0);
}
break;
// Sanity check
if (dst_apic->ipi_state != INIT_ST) {
PrintError(" Warning: core %u is not in INIT state (mode = %d), ignored\n",
- dst_core->cpu_id, dst_core->cpu_mode);
+ dst_core->cpu_id, dst_apic->ipi_state);
// Only a warning, since INIT INIT SIPI is common
break;
}
// Sanity check
if (dst_apic->ipi_state != SIPI) {
PrintError(" core %u is not in SIPI state (mode = %d), ignored!\n",
- dst_core->cpu_id, dst_core->cpu_mode);
+ dst_core->cpu_id, dst_apic->ipi_state);
break;
}
struct int_cmd_reg * icr) {
struct apic_state * dest_apic = NULL;
- PrintDebug("route_ipi: src_apic=%p, icr_data=%x",
- src_apic, icr_val);
+ PrintDebug("route_ipi: src_apic=%p, icr_data=%p\n",
+ src_apic, (void *)(addr_t)icr->val);
if ((icr->dst_mode == 0) && (icr->dst >= apic_dev->num_apics)) {
}
} else {
// logical delivery
- PrintError("icc_bus: use of logical delivery in self is not yet supported.\n");
+ PrintError("use of logical delivery in self is not yet supported.\n");
return -1;
}
break;
tmp_icr.dst = ipi->dst;
- route_ipi(apic_dev, NULL, &tmp_icr);
- return -1;
+ return route_ipi(apic_dev, NULL, &tmp_icr);
}