[prev in list] [next in list] [prev in thread] [next in thread]
List: kvm
Subject: [PATCH 2/2] KVM: PPC: epapr: Install ev_idle hcall for paravirt guest linux
From: Liu Yu <yu.liu () freescale ! com>
Date: 2011-12-31 6:16:16
Message-ID: 1325312176-17697-2-git-send-email-yu.liu () freescale ! com
[Download RAW message or body]
If the guest hypervisor node contains "has-idle" property.
Signed-off-by: Liu Yu <yu.liu@freescale.com>
---
arch/powerpc/kernel/kvm.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/kernel/kvm.c b/arch/powerpc/kernel/kvm.c
index b06bdae..258f129 100644
--- a/arch/powerpc/kernel/kvm.c
+++ b/arch/powerpc/kernel/kvm.c
@@ -28,6 +28,7 @@
#include <asm/sections.h>
#include <asm/cacheflush.h>
#include <asm/disassemble.h>
+#include <asm/machdep.h>
#define KVM_MAGIC_PAGE (-4096L)
#define magic_var(x) KVM_MAGIC_PAGE + offsetof(struct kvm_vcpu_arch_shared, x)
@@ -571,6 +572,30 @@ static __init void kvm_free_tmp(void)
}
}
+static void kvm_hcall_ev_idle(void)
+{
+ ulong in[8];
+ ulong out[8];
+
+ current_thread_info()->local_flags |= _TLF_NAPPING;
+ local_irq_enable();
+ kvm_hypercall(in, out, HC_VENDOR_EPAPR | HC_EV_IDLE);
+}
+
+static int kvm_para_ev_has_idle(void)
+{
+ struct device_node *hyper_node;
+
+ hyper_node = of_find_node_by_path("/hypervisor");
+ if (!hyper_node)
+ return 0;
+
+ if (of_get_property(hyper_node, "has-idle", NULL))
+ return 1;
+
+ return 0;
+}
+
static int __init kvm_guest_init(void)
{
if (!kvm_para_available())
@@ -587,6 +612,10 @@ static int __init kvm_guest_init(void)
powersave_nap = 1;
#endif
+ /* Install hcall EV_IDLE based power_save for guest kernel */
+ if (kvm_para_ev_has_idle())
+ ppc_md.power_save = kvm_hcall_ev_idle;
+
free_tmp:
kvm_free_tmp();
--
1.6.4
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic