lkml.org 
[lkml]   [2014]   [Apr]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [Patch v2] lapic need be checked if available when initialize acpi processor id
    Date
    On Wednesday, April 30, 2014 01:55:03 PM Baoquan He wrote:
    > In acpi_processor_get_info(), acpi processor info is initialized including
    > id, namely cpu index. Currently, if on UP system running SMP kerenl with
    > no LAPIC in MADT, cpu0_initialized is checked if acpi processor id is
    > initialized.
    >
    > However this check maybe is not correct for kdump kernel. Most of time
    > only 1 CPU is supported because of known problems. So in 1st kernel
    > multiple CPUs are present, then crash happened in one specific CPU,
    > say 2nd CPU. Then it jump into kdump kernel with "nr_cpus=1" specified
    > in cmdline. In this situation, since kdump kernel is warm reset, it will
    > reuse the ACPI resource passed from crashed kernel directly, namely 1st
    > kernel. It means in MADT all LAPIC is enabled while only 1 CPU is
    > present in running system. The kdump kernel usually is the same as the
    > crashed 1st kernel. So now in kdump kernel, x86_cpu_to_apicid stored the
    > apicid and its related cpu id. If only check cpu0_initialized, it will
    > assign 0 to the acpi processor id of 1st CPU, it's not correct.
    >
    > So in this patch, check acpi_lapic too. If acpi_lapic is 0, then LAPIC in
    > MADT is not available, assigne 0 to the handling acpi processor. If
    > acpi_lapic is 1, then LAPIC in MADT is available, let's get apic processor
    > id from x86_cpu_to_apicid.
    >
    > Signed-off-by: Baoquan He <bhe@redhat.com>
    > ---
    > drivers/acpi/acpi_processor.c | 2 +-
    > 1 file changed, 1 insertion(+), 1 deletion(-)
    >
    > diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
    > index c29c2c3..33f934d 100644
    > --- a/drivers/acpi/acpi_processor.c
    > +++ b/drivers/acpi/acpi_processor.c
    > @@ -267,7 +267,7 @@ static int acpi_processor_get_info(struct acpi_device *device)
    > pr->apic_id = apic_id;
    >
    > cpu_index = acpi_map_cpuid(pr->apic_id, pr->acpi_id);
    > - if (!cpu0_initialized) {
    > + if (!cpu0_initialized && !acpi_lapic) {

    That doesn't compile:

    drivers/acpi/acpi_processor.c:271:28: error: 'acpi_lapic' undeclared (first use in this function)

    > cpu0_initialized = 1;
    > /* Handle UP system running SMP kernel, with no LAPIC in MADT */
    > if ((cpu_index == -1) && (num_online_cpus() == 1))
    >

    --
    I speak only for myself.
    Rafael J. Wysocki, Intel Open Source Technology Center.


    \
     
     \ /
      Last update: 2014-04-30 22:41    [W:4.068 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site