Re: [PATCH 06/14] powerpc/64s: interrupt replay balance the return branch predictor
From: Nicholas Piggin <npiggin@gmail.com>
Date: 2017-06-13 11:10:11
On Tue, 13 Jun 2017 19:51:19 +1000 Michael Ellerman [off-list ref] wrote:
Nicholas Piggin [off-list ref] writes:quoted
The __replay_interrupt code is branched to with bl, but the caller is returned to directly with rfid from the interrupt. Instead return to a return stub that returns to the caller with blr, which should do better with the return predictor. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- arch/powerpc/kernel/exceptions-64s.S | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index a04ee0d7f88e..d55201625ea3 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S@@ -1586,7 +1586,7 @@ _GLOBAL(__replay_interrupt) * we don't give a damn about, so we don't bother storing them. */ mfmsr r12 - mflr r11 + LOAD_REG_ADDR(r11, __replay_interrupt_return)Can you make it a local label, to make it clear nothing outside the file returns to there, and to not clutter the symbol map?
I can do that. Interrupt returns will now get significantly attributed to this guy in profiles (and you can see it on some sleep/wake workloads). __replay_interrupt is probably better than arch_local_irq_restore, I guess. Thanks, Nick