[PATCH] powerpc/booke: Eliminate rfi from exception entry path.

Alexander Graf agraf at suse.de
Wed Jul 11 10:44:52 EST 2012


On 11.07.2012, at 02:34, Scott Wood wrote:

> Unlike classic, we don't really need the MSR change to be atomic with the
> branch.  This eliminates a trap as a KVM guest (in the absence of
> hardware hypervisor extensions), where mtmsr is paravirtualized but rfi
> is not.  For a virtualized guest without any paravirtualization, this
> eliminates an additional two traps (SRR0/1).
> 
> Signed-off-by: Scott Wood <scottwood at freescale.com>
> ---
> arch/powerpc/kernel/entry_32.S |   16 ++++++++++++++++
> 1 files changed, 16 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
> index ba3aeb4..6bb637c 100644
> --- a/arch/powerpc/kernel/entry_32.S
> +++ b/arch/powerpc/kernel/entry_32.S
> @@ -193,6 +193,9 @@ transfer_to_handler_cont:
> 	lwz	r11,0(r9)		/* virtual address of handler */
> 	lwz	r9,4(r9)		/* where to go when done */
> #ifdef CONFIG_TRACE_IRQFLAGS
> +#ifdef CONFIG_BOOKE
> +	mtmsr	r10
> +#else
> 	lis	r12,reenable_mmu at h
> 	ori	r12,r12,reenable_mmu at l
> 	mtspr	SPRN_SRR0,r12
> @@ -201,6 +204,7 @@ transfer_to_handler_cont:
> 	RFI
> reenable_mmu:				/* re-enable mmu so we can */
> 	mfmsr	r10
> +#endif /* !CONFIG_BOOKE */
> 	lwz	r12,_MSR(r1)
> 	xor	r10,r10,r12
> 	andi.	r10,r10,MSR_EE		/* Did EE change? */
> @@ -247,11 +251,23 @@ reenable_mmu:				/* re-enable mmu so we can */
> 	mtlr	r9
> 	bctr				/* jump to handler */
> #else /* CONFIG_TRACE_IRQFLAGS */
> +#ifdef CONFIG_BOOKE
> +	/*
> +	 * We're not changing address space on Book E, and the extra rfi
> +	 * can hurt when virtualized without hardware support -- whereas
> +	 * mtmsr can be paravirtualized.

We can always paravirtualize RFI as well if it makes sense.


Alex



More information about the Linuxppc-dev mailing list