Messages in this thread Patch in this message | | | From | Cao jin <> | Subject | Question about prefill_possible_map | Date | Fri, 27 Mar 2020 14:38:23 +0800 |
| |
Hi,
At the beginning of this function, there is:
/* No boot processor was found in mptable or ACPI MADT */ if (!num_processors) { if (boot_cpu_has(X86_FEATURE_APIC)) { int apicid = boot_cpu_physical_apicid; int cpu = hard_smp_processor_id();
pr_warn("Boot CPU (id %d) not listed by BIOS\n", cpu);
/* Make sure boot cpu is enumerated */ if (apic->cpu_present_to_apicid(0) == BAD_APICID && apic->apic_id_valid(apicid)) generic_processor_info(apicid, boot_cpu_apic_version); }
if (!num_processors) num_processors = 1; }
I see 3 cases will go through this code chunk,
1. UP, has no APCI MADT & MP table, but has APIC 2. 2a51fe083eba7f: kdump kernel running on the hot-plugged CPU 3. normal UP(No table, no APIC)
And "if (boot_cpu_has(X86_FEATURE_APIC))" covers case 1 & 2 to my understanding.
But both cases 1 & 2 already have boot_cpu_physical_apicid initialized from APIC ID register: 1. init_apic_mappings --> register_lapic_address 2. early_acpi_boot_init --> early_acpi_process_madt -->...--> register_lapic_address
So my question is: is variable "cpu" redundant? Could it be:
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 69881b2d446c..99fc03511568 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -1456,9 +1456,9 @@ __init void prefill_possible_map(void) if (!num_processors) { if (boot_cpu_has(X86_FEATURE_APIC)) { int apicid = boot_cpu_physical_apicid; - int cpu = hard_smp_processor_id();
- pr_warn("Boot CPU (id %d) not listed by BIOS\n", cpu); + pr_warn("Boot CPU (id %d) not listed by BIOS\n", \ + boot_cpu_physical_apicid);
/* Make sure boot cpu is enumerated */ if (apic->cpu_present_to_apicid(0) == BAD_APICID && -- Sincerely, Cao jin
| |