lkml.org 
[lkml]   [2017]   [Nov]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] x86/idt: load idt early in start_secondary
    Date
    For ap, idt is first loaded in cpu_init() with load_current_idt(),
    that is to say, no exception can be handled before there. And then
    the idt_table has been completed by the bp.

    While there are some WARNs which needs the UD exception handling
    in the early boot code might be triggered when something uexpected
    happens during boot. In that case, cpu would fail to boot as the
    exception can't be handled. A WARNing during boot is not usually
    meaning the system could not boot.

    One use case is when ftrace=function is setup in kernel cmdline, the
    ftrace callback function will be called for every traced function.
    And in my case, the first traced function is load_ucode_ap. And there
    are WARN()s in function trace callback handling, it failed to reboot
    as one of the WARN()s is triggered before load_current_idt() executed.

    To make WARN()s can work earlier to ap, we load the idt_table early
    in start_secondary, and keep the second time idt load in cpu_init,
    as there is a load_ucode_ap() there.

    Signed-off-by: Chunyu Hu <chuhu@redhat.com>
    ---
    arch/x86/kernel/smpboot.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
    index 3d01df7..05a97d5 100644
    --- a/arch/x86/kernel/smpboot.c
    +++ b/arch/x86/kernel/smpboot.c
    @@ -237,7 +237,7 @@ static void notrace start_secondary(void *unused)
    load_cr3(swapper_pg_dir);
    __flush_tlb_all();
    #endif
    -
    + load_current_idt();
    cpu_init();
    x86_cpuinit.early_percpu_clock_init();
    preempt_disable();
    --
    1.8.3.1
    \
     
     \ /
      Last update: 2017-11-27 15:22    [W:5.321 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site