Re: [PATCH][v2] KVM: PPC: add paravirt idle loop for 64-bit book E
From: Alexander Graf <hidden>
Date: 2013-01-24 17:43:14
Also in:
kvm
On 23.01.2013, at 00:54, Stuart Yoder wrote:
From: Stuart Yoder <redacted> =20 Signed-off-by: Stuart Yoder <redacted>
Ben, this one is in generic powerpc code, so I'd say it's for you :). Alex
--- =20 -v2 -macro'ized loop in idle_book3e.S to avoid code=20 duplication, paravirt loop is now in idle_book3e.S =20 arch/powerpc/kernel/epapr_hcalls.S | 2 ++ arch/powerpc/kernel/idle_book3e.S | 30 =
++++++++++++++++++++++++++++--
quoted hunk ↗ jump to hunk
2 files changed, 30 insertions(+), 2 deletions(-) =20diff --git a/arch/powerpc/kernel/epapr_hcalls.S =
b/arch/powerpc/kernel/epapr_hcalls.S
quoted hunk ↗ jump to hunk
index 62c0dc2..9f1ebf7 100644--- a/arch/powerpc/kernel/epapr_hcalls.S +++ b/arch/powerpc/kernel/epapr_hcalls.S@@ -17,6 +17,7 @@#include <asm/asm-compat.h> #include <asm/asm-offsets.h> =20 +#ifndef CONFIG_PPC64 /* epapr_ev_idle() was derived from e500_idle() */ _GLOBAL(epapr_ev_idle) CURRENT_THREAD_INFO(r3, r1)@@ -42,6 +43,7 @@ epapr_ev_idle_start:* _TLF_NAPPING. */ b idle_loop +#endif =20 /* Hypercall entry point. Will be patched with device tree =
instructions. */
quoted hunk ↗ jump to hunk
.global epapr_hypercall_startdiff --git a/arch/powerpc/kernel/idle_book3e.S =
b/arch/powerpc/kernel/idle_book3e.S
quoted hunk ↗ jump to hunk
index 4c7cb400..e1c9acd 100644--- a/arch/powerpc/kernel/idle_book3e.S +++ b/arch/powerpc/kernel/idle_book3e.S@@ -16,11 +16,13 @@#include <asm/ppc-opcode.h> #include <asm/processor.h> #include <asm/thread_info.h> +#include <asm/epapr_hcalls.h> =20 /* 64-bit version only for now */ #ifdef CONFIG_PPC64 =20 -_GLOBAL(book3e_idle) +.macro BOOK3E_IDLE name loop +_GLOBAL(\name) /* Save LR for later */ mflr r0 std r0,16(r1)@@ -67,7 +69,31 @@ _GLOBAL(book3e_idle)=20 /* We can now re-enable hard interrupts and go to sleep */ wrteei 1 -1: PPC_WAIT(0) + \loop + +.endm + +.macro BOOK3E_IDLE_LOOP +1: + PPC_WAIT(0) b 1b +.endm + +.macro EPAPR_EV_IDLE_LOOP +idle_loop: + LOAD_REG_IMMEDIATE(r11, EV_HCALL_TOKEN(EV_IDLE)) + +.global epapr_ev_idle_start +epapr_ev_idle_start: + li r3, -1 + nop + nop + nop + b idle_loop +.endm + +BOOK3E_IDLE epapr_ev_idle, EPAPR_EV_IDLE_LOOP + +BOOK3E_IDLE book3e_idle BOOK3E_IDLE_LOOP =20 #endif /* CONFIG_PPC64 */ --=20 1.7.9.7 =20 =20