* [PATCH] powerpc/booke: Eliminate rfi from exception entry path.
@ 2012-07-11 0:34 Scott Wood
2012-07-11 0:36 ` Benjamin Herrenschmidt
2012-07-11 0:44 ` Alexander Graf
0 siblings, 2 replies; 7+ messages in thread
From: Scott Wood @ 2012-07-11 0:34 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Alexander Graf, Stuart Yoder
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@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.
+ */
+ mtmsr r10
+ mtctr r11
+ mtlr r9
+ bctr
+#else
mtspr SPRN_SRR0,r11
mtspr SPRN_SRR1,r10
mtlr r9
SYNC
RFI /* jump to handler, enable MMU */
+#endif /* !CONFIG_BOOKE */
#endif /* CONFIG_TRACE_IRQFLAGS */
#if defined (CONFIG_6xx) || defined(CONFIG_E500)
--
1.7.5.4
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] powerpc/booke: Eliminate rfi from exception entry path.
2012-07-11 0:34 [PATCH] powerpc/booke: Eliminate rfi from exception entry path Scott Wood
@ 2012-07-11 0:36 ` Benjamin Herrenschmidt
2012-07-11 0:41 ` Scott Wood
2012-07-11 0:44 ` Alexander Graf
1 sibling, 1 reply; 7+ messages in thread
From: Benjamin Herrenschmidt @ 2012-07-11 0:36 UTC (permalink / raw)
To: Scott Wood; +Cc: linuxppc-dev, Alexander Graf, Stuart Yoder
On Tue, 2012-07-10 at 19:34 -0500, 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).
In fact, I wonder, what do we write into the MSR at this point that
wasn't already in it in BookE ? RI ? I wonder if we could get away
without the mtmsr alltogether...
Cheers,
Ben.
> Signed-off-by: Scott Wood <scottwood@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.
> + */
> + mtmsr r10
> + mtctr r11
> + mtlr r9
> + bctr
> +#else
> mtspr SPRN_SRR0,r11
> mtspr SPRN_SRR1,r10
> mtlr r9
> SYNC
> RFI /* jump to handler, enable MMU */
> +#endif /* !CONFIG_BOOKE */
> #endif /* CONFIG_TRACE_IRQFLAGS */
>
> #if defined (CONFIG_6xx) || defined(CONFIG_E500)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] powerpc/booke: Eliminate rfi from exception entry path.
2012-07-11 0:36 ` Benjamin Herrenschmidt
@ 2012-07-11 0:41 ` Scott Wood
2012-07-11 0:53 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 7+ messages in thread
From: Scott Wood @ 2012-07-11 0:41 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Alexander Graf, Stuart Yoder
On 07/10/2012 07:36 PM, Benjamin Herrenschmidt wrote:
> On Tue, 2012-07-10 at 19:34 -0500, 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).
>
> In fact, I wonder, what do we write into the MSR at this point that
> wasn't already in it in BookE ? RI ? I wonder if we could get away
> without the mtmsr alltogether...
Doesn't EE get set there for some exceptions?
-Scott
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] powerpc/booke: Eliminate rfi from exception entry path.
2012-07-11 0:34 [PATCH] powerpc/booke: Eliminate rfi from exception entry path Scott Wood
2012-07-11 0:36 ` Benjamin Herrenschmidt
@ 2012-07-11 0:44 ` Alexander Graf
2012-07-11 0:47 ` Scott Wood
1 sibling, 1 reply; 7+ messages in thread
From: Alexander Graf @ 2012-07-11 0:44 UTC (permalink / raw)
To: Scott Wood; +Cc: linuxppc-dev, Stuart Yoder
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).
>=20
> Signed-off-by: Scott Wood <scottwood@freescale.com>
> ---
> arch/powerpc/kernel/entry_32.S | 16 ++++++++++++++++
> 1 files changed, 16 insertions(+), 0 deletions(-)
>=20
> 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
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] powerpc/booke: Eliminate rfi from exception entry path.
2012-07-11 0:44 ` Alexander Graf
@ 2012-07-11 0:47 ` Scott Wood
2012-07-11 0:54 ` Benjamin Herrenschmidt
0 siblings, 1 reply; 7+ messages in thread
From: Scott Wood @ 2012-07-11 0:47 UTC (permalink / raw)
To: Alexander Graf; +Cc: linuxppc-dev, Stuart Yoder
On 07/10/2012 07:44 PM, Alexander Graf wrote:
>
> On 11.07.2012, at 02:34, Scott Wood wrote:
>> +#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.
I'm not sure that's possible. We thought about it a while back, but
IIRC the difficulty was not leaving a register clobbered.
-Scott
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] powerpc/booke: Eliminate rfi from exception entry path.
2012-07-11 0:41 ` Scott Wood
@ 2012-07-11 0:53 ` Benjamin Herrenschmidt
0 siblings, 0 replies; 7+ messages in thread
From: Benjamin Herrenschmidt @ 2012-07-11 0:53 UTC (permalink / raw)
To: Scott Wood; +Cc: linuxppc-dev, Alexander Graf, Stuart Yoder
On Tue, 2012-07-10 at 19:41 -0500, Scott Wood wrote:
> On 07/10/2012 07:36 PM, Benjamin Herrenschmidt wrote:
> > On Tue, 2012-07-10 at 19:34 -0500, 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).
> >
> > In fact, I wonder, what do we write into the MSR at this point that
> > wasn't already in it in BookE ? RI ? I wonder if we could get away
> > without the mtmsr alltogether...
>
> Doesn't EE get set there for some exceptions?
It does, tho arguably it shouldn't in most cases :-) I'm happy to turn a
bunch of these into explicit local_irq_enable() in the C code though
which will turn into a wrteei which is more efficient on BookE.
Cheers,
Ben.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] powerpc/booke: Eliminate rfi from exception entry path.
2012-07-11 0:47 ` Scott Wood
@ 2012-07-11 0:54 ` Benjamin Herrenschmidt
0 siblings, 0 replies; 7+ messages in thread
From: Benjamin Herrenschmidt @ 2012-07-11 0:54 UTC (permalink / raw)
To: Scott Wood; +Cc: linuxppc-dev, Alexander Graf, Stuart Yoder
On Tue, 2012-07-10 at 19:47 -0500, Scott Wood wrote:
> On 07/10/2012 07:44 PM, Alexander Graf wrote:
> >
> > On 11.07.2012, at 02:34, Scott Wood wrote:
> >> +#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.
>
> I'm not sure that's possible. We thought about it a while back, but
> IIRC the difficulty was not leaving a register clobbered.
Besides mtmsr is slow on real HW as well. Also paravirt as done today
for complex instructions like mtmsr is racy :-) (I already had a chat
about that with Alex a while back, we might want to re-consider what
kind of fix can be done at some point).
Cheers,
Ben.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-07-11 0:54 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-11 0:34 [PATCH] powerpc/booke: Eliminate rfi from exception entry path Scott Wood
2012-07-11 0:36 ` Benjamin Herrenschmidt
2012-07-11 0:41 ` Scott Wood
2012-07-11 0:53 ` Benjamin Herrenschmidt
2012-07-11 0:44 ` Alexander Graf
2012-07-11 0:47 ` Scott Wood
2012-07-11 0:54 ` Benjamin Herrenschmidt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).