lkml.org 
[lkml]   [2017]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 04/12] x86/apic: Move logical APIC ID away from apic_bsp_setup()
    Date
    apic_bsp_setup() sets and returns logical APIC ID for initializing
    cpu0_logical_apicid in SMP-capable system.

    The id has nothing to do with the initialization of local APIC and
    I/O APIC. And apic_bsp_setup() should be called for interrupt mode
    setup intently.

    Move the id setup into a separate helper function for cleanup and
    mark apic_bsp_setup() void.

    Signed-off-by: Dou Liyang <douly.fnst@cn.fujitsu.com>
    ---
    arch/x86/include/asm/apic.h | 2 +-
    arch/x86/kernel/apic/apic.c | 10 +---------
    arch/x86/kernel/smpboot.c | 12 +++++++++++-
    3 files changed, 13 insertions(+), 11 deletions(-)

    diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
    index ddc16ff..c3bedbd 100644
    --- a/arch/x86/include/asm/apic.h
    +++ b/arch/x86/include/asm/apic.h
    @@ -146,7 +146,7 @@ static inline int apic_force_enable(unsigned long addr)
    extern int apic_force_enable(unsigned long addr);
    #endif

    -extern int apic_bsp_setup(bool upmode);
    +extern void apic_bsp_setup(bool upmode);
    extern void apic_ap_setup(void);

    /*
    diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
    index 83b7c2e..51536b9 100644
    --- a/arch/x86/kernel/apic/apic.c
    +++ b/arch/x86/kernel/apic/apic.c
    @@ -2337,25 +2337,17 @@ static void __init apic_bsp_up_setup(void)
    * Returns:
    * apic_id of BSP APIC
    */
    -int __init apic_bsp_setup(bool upmode)
    +void __init apic_bsp_setup(bool upmode)
    {
    - int id;
    -
    connect_bsp_APIC();
    if (upmode)
    apic_bsp_up_setup();
    setup_local_APIC();

    - if (x2apic_mode)
    - id = apic_read(APIC_LDR);
    - else
    - id = GET_APIC_LOGICAL_ID(apic_read(APIC_LDR));
    -
    enable_IO_APIC();
    end_local_APIC_setup();
    irq_remap_enable_fault_handling();
    setup_IO_APIC();
    - return id;
    }

    /*
    diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
    index 93f0cda..3f74288 100644
    --- a/arch/x86/kernel/smpboot.c
    +++ b/arch/x86/kernel/smpboot.c
    @@ -1287,6 +1287,14 @@ static void __init smp_cpu_index_default(void)
    }
    }

    +static void __init smp_get_logical_apicid(void)
    +{
    + if (x2apic_mode)
    + cpu0_logical_apicid = apic_read(APIC_LDR);
    + else
    + cpu0_logical_apicid = GET_APIC_LOGICAL_ID(apic_read(APIC_LDR));
    +}
    +
    /*
    * Prepare for SMP bootup. The MP table or ACPI has been read
    * earlier. Just do some sanity checking here and enable APIC mode.
    @@ -1347,11 +1355,13 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
    }

    default_setup_apic_routing();
    - cpu0_logical_apicid = apic_bsp_setup(false);
    + apic_bsp_setup(false);

    /* Setup local timer */
    x86_init.timers.setup_percpu_clockev();

    + smp_get_logical_apicid();
    +
    pr_info("CPU0: ");
    print_cpu_info(&cpu_data(0));

    --
    2.5.5


    \
     
     \ /
      Last update: 2017-07-03 13:11    [W:5.602 / U:0.480 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site