Christophe Leroy's on April 4, 2020 12:19 am: > > > Le 03/04/2020 à 15:26, Nicholas Piggin a écrit : >> This allows rtas_args to be put on the machine check stack, which >> avoids a lot of complications with re-entrancy deadlocks. >> >> Reviewed-by: Mahesh Salgaonkar <mah...@linux.ibm.com> >> Signed-off-by: Nicholas Piggin <npig...@gmail.com> >> --- >> arch/powerpc/kernel/setup_64.c | 17 ++++++++++++++++- >> 1 file changed, 16 insertions(+), 1 deletion(-) >> >> diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c >> index e05e6dd67ae6..3a2428aa3d9a 100644 >> --- a/arch/powerpc/kernel/setup_64.c >> +++ b/arch/powerpc/kernel/setup_64.c >> @@ -692,6 +692,9 @@ void __init exc_lvl_early_init(void) >> void __init emergency_stack_init(void) >> { >> u64 limit; >> +#ifdef CONFIG_PPC_BOOK3S_64 > > #ifdef not needed, see below > >> + u64 mce_limit; >> +#endif >> unsigned int i; >> >> /* >> @@ -710,6 +713,18 @@ void __init emergency_stack_init(void) >> */ >> limit = min(ppc64_bolted_size(), ppc64_rma_size); >> >> + /* >> + * Machine check on pseries calls rtas, but can't use the static >> + * rtas_args due to a machine check hitting while the lock is held. >> + * rtas args have to be under 4GB, so the machine check stack is >> + * limited to 4GB so args can be put on stack. >> + */ >> +#ifdef CONFIG_PPC_BOOK3S_64 > > This ifdef is not needed. FW_FEATURE_LPAR is only possible on > CONFIG_PPC_BOOK3S_64 (indeed only on PSERIES or PS3). On others > firmware_has_feature(FW_FEATURE_LPAR) should return 0 at compile time.
Sure I'll remove it. >> + mce_limit = limit; >> + if (firmware_has_feature(FW_FEATURE_LPAR) && mce_limit > >> 4UL*1024*1024*1024) >> + mce_limit = 4UL*1024*1024*1024; > > You should use SZ_4G instead of hardcoding. Will do. Thanks, Nick