• Ricardo Ribalda's avatar
    kexec: support purgatories with .text.hot sections · 8652d44f
    Ricardo Ribalda authored
    Patch series "kexec: Fix kexec_file_load for llvm16 with PGO", v7.
    
    When upreving llvm I realised that kexec stopped working on my test
    platform.
    
    The reason seems to be that due to PGO there are multiple .text sections
    on the purgatory, and kexec does not supports that.
    
    
    This patch (of 4):
    
    Clang16 links the purgatory text in two sections when PGO is in use:
    
      [ 1] .text             PROGBITS         0000000000000000  00000040
           00000000000011a1  0000000000000000  AX       0     0     16
      [ 2] .rela.text        RELA             0000000000000000  00003498
           0000000000000648  0000000000000018   I      24     1     8
      ...
      [17] .text.hot.        PROGBITS         0000000000000000  00003220
           000000000000020b  0000000000000000  AX       0     0     1
      [18] .rela.text.hot.   RELA             0000000000000000  00004428
           0000000000000078  0000000000000018   I      24    17     8
    
    And both of them have their range [sh_addr ... sh_addr+sh_size] on the
    area pointed by `e_entry`.
    
    This causes that image->start is calculated twice, once for .text and
    another time for .text.hot. The second calculation leaves image->start
    in a random location.
    
    Because of this, the system crashes immediately after:
    
    kexec_core: Starting new kernel
    
    Link: https://lkml.kernel.org/r/20230321-kexec_clang16-v7-0-b05c520b7296@chromium.org
    Link: https://lkml.kernel.org/r/20230321-kexec_clang16-v7-1-b05c520b7296@chromium.org
    Fixes: 93045705 ("kernel/kexec_file.c: split up __kexec_load_puragory")
    Signed-off-by: default avatarRicardo Ribalda <ribalda@chromium.org>
    Reviewed-by: default avatarRoss Zwisler <zwisler@google.com>
    Reviewed-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    Reviewed-by: default avatarPhilipp Rudo <prudo@redhat.com>
    Cc: Albert Ou <aou@eecs.berkeley.edu>
    Cc: Baoquan He <bhe@redhat.com>
    Cc: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Dave Young <dyoung@redhat.com>
    Cc: Eric W. Biederman <ebiederm@xmission.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Palmer Dabbelt <palmer@dabbelt.com>
    Cc: Palmer Dabbelt <palmer@rivosinc.com>
    Cc: Paul Walmsley <paul.walmsley@sifive.com>
    Cc: Simon Horman <horms@kernel.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tom Rix <trix@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    8652d44f
kexec_file.c 33 KB