[PATCH] powerpc/64: Fix setting of AIL in hypervisor mode

Michael Neuling mikey at neuling.org
Fri Nov 18 09:38:26 AEDT 2016


On Tue, 2016-11-15 at 15:28 +1100, Benjamin Herrenschmidt wrote:
> Commit d3cbff1b5 "powerpc: Put exception configuration in a common place"
> broke the setting of the AIL bit (which enables taking exceptions with
> the MMU still on) on all processors, moving it incorrectly to a function
> called only on the boot CPU. This was correct for the guest case but
> not when running in hypervisor mode.
> 
> This fixes it by partially reverting that commit, putting the setting
> back in cpu_ready_for_interrupts()
> 
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
> Fixes: d3cbff1b5 ("powerpc: Put exception configuration in a common place")
> CC: stable at vger.kernel.org # v4.8+

Acked-By: Michael Neuling <mikey at neuling.org>

> ---
>  arch/powerpc/kernel/setup_64.c | 20 ++++++++++++++------
>  1 file changed, 14 insertions(+), 6 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
> index 7ac8e6e..ac75224 100644
> --- a/arch/powerpc/kernel/setup_64.c
> +++ b/arch/powerpc/kernel/setup_64.c
> @@ -226,17 +226,25 @@ static void __init configure_exceptions(void)
>  		if (firmware_has_feature(FW_FEATURE_OPAL))
>  			opal_configure_cores();
>  
> -		/* Enable AIL if supported, and we are in hypervisor mode */
> -		if (early_cpu_has_feature(CPU_FTR_HVMODE) &&
> -		    early_cpu_has_feature(CPU_FTR_ARCH_207S)) {
> -			unsigned long lpcr = mfspr(SPRN_LPCR);
> -			mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3);
> -		}
> +		/* AIL on native is done in cpu_ready_for_interrupts */
>  	}
>  }
>  
>  static void cpu_ready_for_interrupts(void)
>  {
> +	/*
> +	 * Enable AIL if supported, and we are in hypervisor mode. This
> +	 * is called once for every processor.
> +	 *
> +	 * If we are not in hypervisor mode the job is done once for
> +	 * the whole partition in configure_exceptions().
> +	 */
> +	if (early_cpu_has_feature(CPU_FTR_HVMODE) &&
> +	    early_cpu_has_feature(CPU_FTR_ARCH_207S)) {
> +		unsigned long lpcr = mfspr(SPRN_LPCR);
> +		mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3);
> +	}
> +
>  	/* Set IR and DR in PACA MSR */
>  	get_paca()->kernel_msr = MSR_KERNEL;
>  }
> 


More information about the Linuxppc-dev mailing list