lkml.org 
[lkml]   [2023]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[patch V3 12/60] x86/of: Fix the APIC address registration
    Date
    The device tree APIC parser tries to force enable the local APIC when it is
    not set in CPUID. apic_force_enable() registers the boot CPU apic on
    success.

    If that succeeds then dtb_lapic_setup() registers the local APIC again
    eventually with a different address.

    Rewrite the code so that it only registers it once.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    ---
    arch/x86/kernel/devicetree.c | 14 +++++---------
    1 file changed, 5 insertions(+), 9 deletions(-)

    --- a/arch/x86/kernel/devicetree.c
    +++ b/arch/x86/kernel/devicetree.c
    @@ -157,19 +157,15 @@ static void __init dtb_lapic_setup(void)

    /* Did the boot loader setup the local APIC ? */
    if (!boot_cpu_has(X86_FEATURE_APIC)) {
    + /* Try force enabling, which registers the APIC address */
    if (apic_force_enable(lapic_addr))
    return;
    - }
    - smp_found_config = 1;
    - if (of_property_read_bool(dn, "intel,virtual-wire-mode")) {
    - pr_info("Virtual Wire compatibility mode.\n");
    - pic_mode = 0;
    } else {
    - pr_info("IMCR and PIC compatibility mode.\n");
    - pic_mode = 1;
    + register_lapic_address(lapic_addr);
    }
    -
    - register_lapic_address(lapic_addr);
    + smp_found_config = 1;
    + pic_mode = !of_property_read_bool(dn, "intel,virtual-wire-mode");
    + pr_info("%s compatibility mode.\n", pic_mode ? "IMCR and PIC" : "Virtual Wire");
    }

    #endif /* CONFIG_X86_LOCAL_APIC */
    \
     
     \ /
      Last update: 2023-08-01 12:48    [W:6.381 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site