GNU Mach hangs during SMP startup when the firmware exposes more CPUs than
NCPUS. The broadcast INIT/STARTUP IPI starts every exposed AP, including the
ones the parser rejected, and the zero-initialised cpu_id_lut made those APs
alias kernel ID 0 and corrupt the BSP's per-CPU and GDT state.

The series bounds cpu_lapic_list at insertion, keeps the BSP and skips
unusable MADT entries, parks rejected APs, panics with a reason on APIC
failure, and clarifies --enable-ncpus.

Changes since v1:
- former patch 2 split into four patches;
- former patch 3 now also covers x86_64;
- patch 1 drops the APIC ID range test.

The series applies to gnumach c5701c1c ("Raise NET_MAX_FILTER").

David Bidner (8):
  apic: Bound cpu_lapic_list by NCPUS
  acpi_parse_apic: Name ACPI error codes
  acpi_parse_apic: Ignore x2APIC and NMI MADT entries
  acpi_parse_apic: Stop on malformed MADT entries
  acpi_parse_apic: Reserve the BSP and bound CPU admission
  cpuboot: Park processors not accepted into the CPU list
  model_dep: Panic on APIC initialization failure
  configfrag-first: Clarify --enable-ncpus help

 configfrag-first.ac           |  3 +-
 i386/i386/apic.c              | 25 ++++++++++--
 i386/i386/apic.h              |  3 +-
 i386/i386/cpuboot.S           | 12 ++++++
 i386/i386at/acpi_parse_apic.c | 75 +++++++++++++++++++++++++----------
 i386/i386at/acpi_parse_apic.h |  4 +-
 i386/i386at/model_dep.c       |  4 +-
 x86_64/cpuboot.S              | 17 ++++++++
 8 files changed, 114 insertions(+), 29 deletions(-)


Reply via email to