• HATAYAMA Daisuke's avatar
    x86, apic, kexec: Add disable_cpu_apicid kernel parameter · 151e0c7d
    HATAYAMA Daisuke authored
    Add disable_cpu_apicid kernel parameter. To use this kernel parameter,
    specify an initial APIC ID of the corresponding CPU you want to
    disable.
    
    This is mostly used for the kdump 2nd kernel to disable BSP to wake up
    multiple CPUs without causing system reset or hang due to sending INIT
    from AP to BSP.
    
    Kdump users first figure out initial APIC ID of the BSP, CPU0 in the
    1st kernel, for example from /proc/cpuinfo and then set up this kernel
    parameter for the 2nd kernel using the obtained APIC ID.
    
    However, doing this procedure at each boot time manually is awkward,
    which should be automatically done by user-land service scripts, for
    example, kexec-tools on fedora/RHEL distributions.
    
    This design is more flexible than disabling BSP in kernel boot time
    automatically in that in kernel boot time we have no choice but
    referring to ACPI/MP table to obtain initial APIC ID for BSP, meaning
    that the method is not applicable to the systems without such BIOS
    tables.
    
    One assumption behind this design is that users get initial APIC ID of
    the BSP in still healthy state and so BSP is uniquely kept in
    CPU0. Thus, through the kernel parameter, only one initial APIC ID can
    be specified.
    
    In a comparison with disabled_cpu_apicid, we use read_apic_id(), not
    boot_cpu_physical_apicid, because on some platforms, the variable is
    modified to the apicid reported as BSP through MP table and this
    function is executed with the temporarily modified
    boot_cpu_physical_apicid. As a result, disabled_cpu_apicid kernel
    parameter doesn't work well for apicids of APs.
    
    Fixing the wrong handling of boot_cpu_physical_apicid requires some
    reviews and tests beyond some platforms and it could take some
    time. The fix here is a kind of workaround to focus on the main topic
    of this patch.
    Signed-off-by: default avatarHATAYAMA Daisuke <d.hatayama@jp.fujitsu.com>
    Link: http://lkml.kernel.org/r/20140115064458.1545.38775.stgit@localhost6.localdomain6Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
    151e0c7d
apic.c 63.5 KB