• Borislav Petkov's avatar
    x86/microcode: Rework microcode loading · 06b8534c
    Borislav Petkov authored
    Yeah, I know, I know, this is a huuge patch and reviewing it is hard.
    
    Sorry but this is the only way I could think of in which I can rewrite
    the microcode patches loading procedure without breaking (knowingly) the
    driver.
    
    So maybe this patch is easier to review if one looks at the files after
    the patch has been applied instead at the diff. Because then it becomes
    pretty obvious:
    
    * The BSP-loading path - load_ucode_bsp() is working independently from
      the AP path now and it doesn't save any pointers or patches anymore -
      it solely parses the builtin or initrd microcode and applies the patch.
      That's it.
    
    This fixes the CONFIG_RANDOMIZE_MEMORY offset fun more solidly.
    
    * The AP-loading path - load_ucode_ap() then goes and scans
      builtin/initrd *again* for the microcode patches but it caches them this
      time so that we don't have to do that scan on each AP but only once.
    
    This simplifies the code considerably.
    
    Then, when we save the microcode from the initrd/builtin, we go and
    add the relevant patches to our own cache. The AMD side did do that
    and now the Intel side does it too. So no more pointer copying and
    blabla, we save the microcode patches ourselves and are independent from
    initrd/builtin.
    
    This whole conversion gives us other benefits like unifying the
    initrd parsing into a single function: find_microcode_in_initrd() is
    used by both.
    
    The diffstat speaks for itself: 456 insertions(+), 695 deletions(-)
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    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/20161025095522.11964-12-bp@alien8.deSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    06b8534c
core.c 15 KB