• Prarit Bhargava's avatar
    arch/x86: Handle non enumerated CPU after physical hotplug · 2a51fe08
    Prarit Bhargava authored
    When a CPU is physically added to a system then the MADT table is not
    updated.
    
    If subsequently a kdump kernel is started on that physically added CPU then
    the ACPI enumeration fails to provide the information for this CPU which is
    now the boot CPU of the kdump kernel.
    
    As a consequence, generic_processor_info() is not invoked for that CPU so
    the number of enumerated processors is 0 and none of the initializations,
    including the logical package id management, are performed.
    
    We have code which relies on the correctness of the logical package map and
    other information which is initialized via generic_processor_info().
    Executing such code will result in undefined behaviour or kernel crashes.
    
    This problem applies only to the kdump kernel because a normal kexec will
    switch to the original boot CPU, which is enumerated in MADT, before
    jumping into the kexec kernel.
    
    The boot code already has a check for num_processors equal 0 in
    prefill_possible_map(). We can use that check as an indicator that the
    enumeration of the boot CPU did not happen and invoke generic_processor_info()
    for it. That initializes the relevant data for the boot CPU and therefore
    prevents subsequent failure.
    
    [ tglx: Refined the code and rewrote the changelog ]
    Signed-off-by: default avatarPrarit Bhargava <prarit@redhat.com>
    Fixes: 1f12e32f ("x86/topology: Create logical package id")
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Len Brown <len.brown@intel.com>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: dyoung@redhat.com
    Cc: Eric Biederman <ebiederm@xmission.com>
    Cc: kexec@lists.infradead.org
    Link: http://lkml.kernel.org/r/1475514432-27682-1-git-send-email-prarit@redhat.comSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    2a51fe08
smpboot.c 41.5 KB