Fix discrepancy between the IOAPIC ID advertised by firmware tables and the
actual value read by the guest from the device. The IOAPIC ID is now set to zero in both MPtable/ACPI tables as well as in the ioapic device emulation. Pointed out by: grehan@
This commit is contained in:
parent
8cb3704a63
commit
d6fe268fdd
@ -263,7 +263,7 @@ basl_fwrite_madt(FILE *fp)
|
||||
EFPRINTF(fp, "[0001]\t\tSubtable Type : 01\n");
|
||||
EFPRINTF(fp, "[0001]\t\tLength : 0C\n");
|
||||
/* iasl expects a hex value for the i/o apic id */
|
||||
EFPRINTF(fp, "[0001]\t\tI/O Apic ID : %02x\n", basl_ncpu);
|
||||
EFPRINTF(fp, "[0001]\t\tI/O Apic ID : %02x\n", 0);
|
||||
EFPRINTF(fp, "[0001]\t\tReserved : 00\n");
|
||||
EFPRINTF(fp, "[0004]\t\tAddress : fec00000\n");
|
||||
EFPRINTF(fp, "[0004]\t\tInterrupt : 00000000\n");
|
||||
|
@ -279,12 +279,12 @@ mptable_build(struct vmctx *ctx, int ncpu)
|
||||
mpch->entry_count += MPE_NUM_BUSES;
|
||||
|
||||
mpei = (io_apic_entry_ptr)curraddr;
|
||||
mpt_build_ioapic_entries(mpei, ncpu + 1);
|
||||
mpt_build_ioapic_entries(mpei, 0);
|
||||
curraddr += sizeof(*mpei);
|
||||
mpch->entry_count++;
|
||||
|
||||
mpie = (int_entry_ptr) curraddr;
|
||||
mpt_build_ioint_entries(mpie, MPEII_MAX_IRQ, ncpu + 1);
|
||||
mpt_build_ioint_entries(mpie, MPEII_MAX_IRQ, 0);
|
||||
curraddr += sizeof(*mpie) * MPEII_MAX_IRQ;
|
||||
mpch->entry_count += MPEII_MAX_IRQ;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user