• Borislav Petkov's avatar
    x86/microcode/AMD: Change load_microcode_amd()'s param to bool to fix preemptibility bug · 26c3a6a7
    Borislav Petkov authored
    commit dac6ca24 upstream.
    
    With CONFIG_DEBUG_PREEMPT enabled, I get:
    
      BUG: using smp_processor_id() in preemptible [00000000] code: swapper/0/1
      caller is debug_smp_processor_id
      CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.12.0-rc2+ #2
      Call Trace:
       dump_stack
       check_preemption_disabled
       debug_smp_processor_id
       save_microcode_in_initrd_amd
       ? microcode_init
       save_microcode_in_initrd
       ...
    
    because, well, it says it above, we're using smp_processor_id() in
    preemptible code.
    
    But passing the CPU number is not really needed. It is only used to
    determine whether we're on the BSP, and, if so, to save the microcode
    patch for early loading.
    
     [ We don't absolutely need to do it on the BSP but we do that
       customarily there. ]
    
    Instead, convert that function parameter to a boolean which denotes
    whether the patch should be saved or not, thereby avoiding the use of
    smp_processor_id() in preemptible code.
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/20170528200414.31305-1-bp@alien8.deSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    [arnd: rebased to 4.9, after running into warning:
     arch/x86/kernel/cpu/microcode/amd.c:881:30: self-comparison always evaluates to true]
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    26c3a6a7
microcode_amd.h 1.82 KB