From 7f0b01654de17494dace8670e8974e41e66c0b56 Mon Sep 17 00:00:00 2001 From: Philippe Houdoin Date: Sun, 15 Feb 2009 18:43:02 +0000 Subject: [PATCH] Fixed the patch: on disabled processor entry, next entry pointer wasn't computed, leading to an infinite loop... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29224 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/boot/platform/bios_ia32/smp.cpp | 29 +++++++++++----------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/system/boot/platform/bios_ia32/smp.cpp b/src/system/boot/platform/bios_ia32/smp.cpp index f8dccfc7d4..d6ac5b8c81 100644 --- a/src/system/boot/platform/bios_ia32/smp.cpp +++ b/src/system/boot/platform/bios_ia32/smp.cpp @@ -151,24 +151,25 @@ smp_do_mp_config(mp_floating_struct *floatingStruct) struct mp_base_processor *processor = (struct mp_base_processor *)pointer; - /* skip if the processor is not enabled. */ - if(!(processor->cpu_flags & 0x1)) - break; - - gKernelArgs.arch_args.cpu_apic_id[gKernelArgs.num_cpus] = processor->apic_id; - gKernelArgs.arch_args.cpu_os_id[processor->apic_id] = gKernelArgs.num_cpus; - gKernelArgs.arch_args.cpu_apic_version[gKernelArgs.num_cpus] = processor->apic_version; + /* is processor enabled? */ + if(processor->cpu_flags & 0x1) { + + gKernelArgs.arch_args.cpu_apic_id[gKernelArgs.num_cpus] = processor->apic_id; + gKernelArgs.arch_args.cpu_os_id[processor->apic_id] = gKernelArgs.num_cpus; + gKernelArgs.arch_args.cpu_apic_version[gKernelArgs.num_cpus] = processor->apic_version; #ifdef TRACE_SMP - const char *cpuFamily[] = { "", "", "", "", "Intel 486", - "Intel Pentium", "Intel Pentium Pro", "Intel Pentium II" }; + const char *cpuFamily[] = { "", "", "", "", "Intel 486", + "Intel Pentium", "Intel Pentium Pro", "Intel Pentium II" }; #endif - TRACE(("smp: cpu#%ld: %s, apic id %d, version %d%s\n", - gKernelArgs.num_cpus, cpuFamily[(processor->signature & 0xf00) >> 8], - processor->apic_id, processor->apic_version, (processor->cpu_flags & 0x2) ? - ", BSP" : "")); + TRACE(("smp: cpu#%ld: %s, apic id %d, version %d%s\n", + gKernelArgs.num_cpus, cpuFamily[(processor->signature & 0xf00) >> 8], + processor->apic_id, processor->apic_version, (processor->cpu_flags & 0x2) ? + ", BSP" : "")); - gKernelArgs.num_cpus++; + gKernelArgs.num_cpus++; + } + pointer += sizeof(struct mp_base_processor); break; }