Thread (4 messages) 4 messages, 4 authors, 2013-01-24

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(-)
=20
diff --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_start
diff --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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help