[PATCH v2 43/52] powerpc/64s/exception: machine check early only runs in HV mode
Mahesh J Salgaonkar
mahesh at linux.vnet.ibm.com
Thu Jun 20 19:53:29 AEST 2019
On 2019-06-20 15:14:50 Thu, Nicholas Piggin wrote:
> machine_check_common_early and machine_check_handle_early only run in
> HVMODE. Remove dead code.
That's not true. For pseries guest with FWNMI enabled hypervisor,
machine_check_common_early gets called in non-HV mode as well.
machine_check_fwnmi
machine_check_common_early
machine_check_handle_early
machine_check_early
pseries_machine_check_realmode
Thanks,
-Mahesh.
>
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> ---
> arch/powerpc/kernel/exceptions-64s.S | 38 +++++-----------------------
> 1 file changed, 6 insertions(+), 32 deletions(-)
>
> diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
> index b12755a4f884..f3362adc99e6 100644
> --- a/arch/powerpc/kernel/exceptions-64s.S
> +++ b/arch/powerpc/kernel/exceptions-64s.S
> @@ -1014,10 +1014,7 @@ TRAMP_REAL_BEGIN(machine_check_common_early)
> /* Save r9 through r13 from EXMC save area to stack frame. */
> EXCEPTION_PROLOG_COMMON_2(PACA_EXMC)
> mfmsr r11 /* get MSR value */
> -BEGIN_FTR_SECTION
> - ori r11,r11,MSR_ME /* turn on ME bit */
> -END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
> - ori r11,r11,MSR_RI /* turn on RI bit */
> + ori r11,r11,MSR_ME|MSR_RI /* turn on ME, RI */
> LOAD_HANDLER(r12, machine_check_handle_early)
> 1: mtspr SPRN_SRR0,r12
> mtspr SPRN_SRR1,r11
> @@ -1124,11 +1121,8 @@ EXC_COMMON_BEGIN(machine_check_handle_early)
> bl machine_check_early
> std r3,RESULT(r1) /* Save result */
> ld r12,_MSR(r1)
> -BEGIN_FTR_SECTION
> - b 4f
> -END_FTR_SECTION_IFCLR(CPU_FTR_HVMODE)
>
> -#ifdef CONFIG_PPC_P7_NAP
> +#ifdef CONFIG_PPC_P7_NAP
> /*
> * Check if thread was in power saving mode. We come here when any
> * of the following is true:
> @@ -1141,7 +1135,7 @@ END_FTR_SECTION_IFCLR(CPU_FTR_HVMODE)
> BEGIN_FTR_SECTION
> rlwinm. r11,r12,47-31,30,31
> bne machine_check_idle_common
> -END_FTR_SECTION_IFSET(CPU_FTR_HVMODE | CPU_FTR_ARCH_206)
> +END_FTR_SECTION_IFSET(CPU_FTR_ARCH_206)
> #endif
>
> /*
> @@ -1150,12 +1144,11 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE | CPU_FTR_ARCH_206)
> */
> rldicl. r11,r12,4,63 /* See if MC hit while in HV mode. */
> beq 5f
> -4: andi. r11,r12,MSR_PR /* See if coming from user. */
> + andi. r11,r12,MSR_PR /* See if coming from user. */
> bne 9f /* continue in V mode if we are. */
>
> 5:
> #ifdef CONFIG_KVM_BOOK3S_64_HANDLER
> -BEGIN_FTR_SECTION
> /*
> * We are coming from kernel context. Check if we are coming from
> * guest. if yes, then we can continue. We will fall through
> @@ -1164,7 +1157,6 @@ BEGIN_FTR_SECTION
> lbz r11,HSTATE_IN_GUEST(r13)
> cmpwi r11,0 /* Check if coming from guest */
> bne 9f /* continue if we are. */
> -END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
> #endif
> /*
> * At this point we are not sure about what context we come from.
> @@ -1199,7 +1191,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
> cmpdi r3,0 /* see if we handled MCE successfully */
>
> beq 1b /* if !handled then panic */
> -BEGIN_FTR_SECTION
> +
> /*
> * Return from MC interrupt.
> * Queue up the MCE event so that we can log it later, while
> @@ -1208,18 +1200,7 @@ BEGIN_FTR_SECTION
> bl machine_check_queue_event
> MACHINE_CHECK_HANDLER_WINDUP
> RFI_TO_USER_OR_KERNEL
> -FTR_SECTION_ELSE
> - /*
> - * pSeries: Return from MC interrupt. Before that stay on emergency
> - * stack and call machine_check_exception to log the MCE event.
> - */
> - LOAD_HANDLER(r10,mce_return)
> - mtspr SPRN_SRR0,r10
> - ld r10,PACAKMSR(r13)
> - mtspr SPRN_SRR1,r10
> - RFI_TO_KERNEL
> - b .
> -ALT_FTR_SECTION_END_IFSET(CPU_FTR_HVMODE)
> +
> 9:
> /* Deliver the machine check to host kernel in V mode. */
> MACHINE_CHECK_HANDLER_WINDUP
> @@ -1238,13 +1219,6 @@ EXC_COMMON_BEGIN(unrecover_mce)
> bl unrecoverable_exception
> b 1b
>
> -EXC_COMMON_BEGIN(mce_return)
> - /* Invoke machine_check_exception to print MCE event and return. */
> - addi r3,r1,STACK_FRAME_OVERHEAD
> - bl machine_check_exception
> - MACHINE_CHECK_HANDLER_WINDUP
> - RFI_TO_KERNEL
> - b .
>
> EXC_REAL_BEGIN(data_access, 0x300, 0x80)
> EXCEPTION_PROLOG_0 PACA_EXGEN
> --
> 2.20.1
>
--
Mahesh J Salgaonkar
More information about the Linuxppc-dev
mailing list