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 <scottw...@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@h
>       ori     r12,r12,reenable_mmu@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

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to