--- a/sys/platform/pc64/acpica/acpi_madt.c +++ b/sys/platform/pc64/acpica/acpi_madt.c @@ -372,7 +372,12 @@ if (error) panic("madt_iterate_entries(pass2) failed"); - KKASSERT(arg.bsp_found); + if (!arg.bsp_found) { + kprintf("ACPI MADT: no enabled BSP entry for apic id %d\n", + bsp_apic_id); + sdt_sdth_unmap(&madt->Header); + return EINVAL; + } naps = arg.cpu - 1; /* exclude BSP */ kprintf("ACPI CPUS = %d\n", arg.cpu); @@ -496,6 +501,7 @@ { vm_paddr_t lapic_addr = 0; int bsp_apic_id; + int error; KKASSERT(madt_phyaddr != 0); @@ -542,8 +548,9 @@ return EINVAL; } - if (madt_lapic_pass2(bsp_apic_id)) - panic("madt_lapic_enumerate: madt_lapic_pass2 failed"); + error = madt_lapic_pass2(bsp_apic_id); + if (error) + return error; /* lapic_config() tries the next enumerator */ return 0; }