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:
Neel Natu 2013-11-25 23:31:00 +00:00
parent 8cb3704a63
commit d6fe268fdd
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=258609
2 changed files with 3 additions and 3 deletions

View File

@ -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");

View File

@ -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;