x86/mce: Mark mce_panic() noinstr
[ 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>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
de360d9443
commit
f21ca973b4
@@ -295,11 +295,17 @@ static void wait_for_panic(void)
|
|||||||
panic("Panicing machine check CPU died");
|
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 llist_node *pending;
|
||||||
struct mce_evt_llist *l;
|
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) {
|
if (!fake_panic) {
|
||||||
/*
|
/*
|
||||||
@@ -314,7 +320,7 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
|
|||||||
} else {
|
} else {
|
||||||
/* Don't log too much for fake panic */
|
/* Don't log too much for fake panic */
|
||||||
if (atomic_inc_return(&mce_fake_panicked) > 1)
|
if (atomic_inc_return(&mce_fake_panicked) > 1)
|
||||||
return;
|
goto out;
|
||||||
}
|
}
|
||||||
pending = mce_gen_pool_prepare_records();
|
pending = mce_gen_pool_prepare_records();
|
||||||
/* First print corrected ones that are still unlogged */
|
/* First print corrected ones that are still unlogged */
|
||||||
@@ -352,6 +358,9 @@ static void mce_panic(const char *msg, struct mce *final, char *exp)
|
|||||||
panic(msg);
|
panic(msg);
|
||||||
} else
|
} else
|
||||||
pr_emerg(HW_ERR "Fake kernel panic: %s\n", msg);
|
pr_emerg(HW_ERR "Fake kernel panic: %s\n", msg);
|
||||||
|
|
||||||
|
out:
|
||||||
|
instrumentation_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Support code for software error injection */
|
/* Support code for software error injection */
|
||||||
|
Reference in New Issue
Block a user