From f6c512f8e39d597f29448c2a00c5d545d064a3a2 Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Mon, 10 Dec 2007 20:37:20 +0000 Subject: [PATCH] Avoid adding more CPUs than the kernel args can hold (and therefore overwriting other kernel args stuff). Doesn't fix my problems though as the current maximum is 4 CPUs. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23105 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/boot/platform/bios_ia32/smp.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/system/boot/platform/bios_ia32/smp.cpp b/src/system/boot/platform/bios_ia32/smp.cpp index aaa439c6d1..feb9665c03 100644 --- a/src/system/boot/platform/bios_ia32/smp.cpp +++ b/src/system/boot/platform/bios_ia32/smp.cpp @@ -156,6 +156,12 @@ smp_do_mp_config() switch (*ptr) { case MP_BASE_PROCESSOR: { + if (gKernelArgs.num_cpus == MAX_BOOT_CPUS) { + TRACE(("smp: already reached maximum boot CPUs (%d)\n", MAX_BOOT_CPUS)); + ptr += sizeof(struct mp_base_processor); + break; + } + struct mp_base_processor *processor = (struct mp_base_processor *)ptr; gKernelArgs.arch_args.cpu_apic_id[gKernelArgs.num_cpus] = processor->apic_id; @@ -267,6 +273,11 @@ smp_do_acpi_config(acpi_rsdp *rsdp) switch (apic->type) { case ACPI_MADT_LOCAL_APIC: { + if (gKernelArgs.num_cpus == MAX_BOOT_CPUS) { + TRACE(("smp: already reached maximum boot CPUs (%d)\n", MAX_BOOT_CPUS)); + break; + } + acpi_local_apic *localApic = (acpi_local_apic *)apic; TRACE(("smp: found local APIC with id %u\n", localApic->apic_id)); gKernelArgs.arch_args.cpu_apic_id[gKernelArgs.num_cpus] = localApic->apic_id;