diff mbox

[2/2] tell cpuinfo if we're running on top of KVM

Message ID 1233859341-10419-3-git-send-email-glommer@redhat.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Glauber Costa Feb. 5, 2009, 6:42 p.m. UTC
From: Glauber Costa <gcosta@redhat.com>

KVM has a specific cpuid signature, for a long time now. It's currently
used in the kernel to advertise the possible availability of paravirt
functions, but it's safe to assume that any reasonably recent kvm
hypervisor will sign cpuid this way, regardless of any pv capability.

Use this information to fill in the hypervisor field in cpuinfo.

Signed-off-by: Glauber Costa <gcosta@redhat.com>
---
 arch/x86/include/asm/processor.h |    1 +
 arch/x86/kernel/cpu/hypervisor.c |    5 +++++
 2 files changed, 6 insertions(+), 0 deletions(-)
diff mbox

Patch

diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 091cd88..919c08d 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -126,6 +126,7 @@  struct cpuinfo_x86 {
 
 #define X86_HYPER_VENDOR_NONE  0
 #define X86_HYPER_VENDOR_VMWARE 1
+#define X86_HYPER_VENDOR_KVM	2
 
 /*
  * capabilities of CPUs
diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c
index 8c3fca7..251817a 100644
--- a/arch/x86/kernel/cpu/hypervisor.c
+++ b/arch/x86/kernel/cpu/hypervisor.c
@@ -23,6 +23,7 @@ 
 
 #include <asm/processor.h>
 #include <asm/vmware.h>
+#include <asm/kvm_para.h>
 #include <asm/hypervisor.h>
 
 static inline void __cpuinit
@@ -30,6 +31,8 @@  detect_hypervisor_vendor(struct cpuinfo_x86 *c)
 {
 	if (vmware_platform()) {
 		c->x86_hyper_vendor = X86_HYPER_VENDOR_VMWARE;
+	} else if (kvm_para_available()) {
+		c->x86_hyper_vendor = X86_HYPER_VENDOR_KVM;
 	} else {
 		c->x86_hyper_vendor = X86_HYPER_VENDOR_NONE;
 	}
@@ -55,6 +58,8 @@  char * __cpuinit hypervisor_str(struct cpuinfo_x86 *c)
 {
 	if (c->x86_hyper_vendor == X86_HYPER_VENDOR_VMWARE)
 		return "VMWare";
+	else if (c->x86_hyper_vendor == X86_HYPER_VENDOR_KVM)
+		return "KVM";
 	else
 		return "none";
 }