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 <[email protected]>
> ---
>  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

Reply via email to