lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0642/1039] x86/mce: Mark mce_panic() noinstr
    Date
    From: Borislav Petkov <bp@suse.de>

    [ Upstream commit 3c7ce80a818fa7950be123cac80cd078e5ac1013 ]

    And allow instrumentation inside it because it does calls to other
    facilities which will not be tagged noinstr.

    Fixes

    vmlinux.o: warning: objtool: do_machine_check()+0xc73: call to mce_panic() leaves .noinstr.text section

    Signed-off-by: Borislav Petkov <bp@suse.de>
    Link: https://lore.kernel.org/r/20211208111343.8130-8-bp@alien8.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/x86/kernel/cpu/mce/core.c | 15 ++++++++++++---
    1 file changed, 12 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c
    index 70ec5685906b2..9a52ec55e0555 100644
    --- a/arch/x86/kernel/cpu/mce/core.c
    +++ b/arch/x86/kernel/cpu/mce/core.c
    @@ -267,11 +267,17 @@ static void wait_for_panic(void)
    panic("Panicing machine check CPU died");
    }

    -static void mce_panic(const char *msg, struct mce *final, char *exp)
    +static noinstr void mce_panic(const char *msg, struct mce *final, char *exp)
    {
    - int apei_err = 0;
    struct llist_node *pending;
    struct mce_evt_llist *l;
    + int apei_err = 0;
    +
    + /*
    + * Allow instrumentation around external facilities usage. Not that it
    + * matters a whole lot since the machine is going to panic anyway.
    + */
    + instrumentation_begin();

    if (!fake_panic) {
    /*
    @@ -286,7 +292,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
    } else {
    /* Don't log too much for fake panic */
    if (atomic_inc_return(&mce_fake_panicked) > 1)
    - return;
    + goto out;
    }
    pending = mce_gen_pool_prepare_records();
    /* First print corrected ones that are still unlogged */
    @@ -324,6 +330,9 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
    panic(msg);
    } else
    pr_emerg(HW_ERR "Fake kernel panic: %s\n", msg);
    +
    +out:
    + instrumentation_end();
    }

    /* Support code for software error injection */
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-09-17 16:12    [W:4.386 / U:0.844 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site