linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/4] x86: introduce hypervisor_cpuid_base()
@ 2013-07-23  9:41 Jason Wang
  2013-07-23  9:41 ` [PATCH 2/4] xen: switch to use hypervisor_cpuid_base() Jason Wang
                   ` (4 more replies)
  0 siblings, 5 replies; 30+ messages in thread
From: Jason Wang @ 2013-07-23  9:41 UTC (permalink / raw)
  To: tglx, mingo, hpa, x86, gleb, pbonzini, kvm, linux-kernel; +Cc: Jason Wang

This patch introduce hypervisor_cpuid_base() which loop test the hypervisor
existence function until the signature match and check the number of leaves if
required. This could be used by Xen/KVM guest to detect the existence of
hypervisor.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: "Paolo Bonzini" <pbonzini@redhat.com>
Cc: Gleb Natapov <gleb@redhat.com>
Cc: x86@kernel.org
Signed-off-by: Jason Wang <jasowang@redhat.com>
---
 arch/x86/include/asm/processor.h |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 24cf5ae..a8136d0 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -971,6 +971,26 @@ unsigned long calc_aperfmperf_ratio(struct aperfmperf *old,
 	return ratio;
 }
 
+static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
+{
+	uint32_t base, eax, ebx, ecx, edx;
+	char signature[13];
+
+	for (base = 0x40000000; base < 0x40010000; base += 0x100) {
+		cpuid(base, &eax, &ebx, &ecx, &edx);
+		*(uint32_t *)(signature + 0) = ebx;
+		*(uint32_t *)(signature + 4) = ecx;
+		*(uint32_t *)(signature + 8) = edx;
+		signature[12] = 0;
+
+		if (!strcmp(sig, signature) &&
+		    (leaves == 0 || ((eax - base) >= leaves)))
+			return base;
+	}
+
+	return 0;
+}
+
 extern unsigned long arch_align_stack(unsigned long sp);
 extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
 
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2013-07-25  8:13 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-23  9:41 [PATCH 1/4] x86: introduce hypervisor_cpuid_base() Jason Wang
2013-07-23  9:41 ` [PATCH 2/4] xen: switch to use hypervisor_cpuid_base() Jason Wang
2013-07-23 11:16   ` Paolo Bonzini
2013-07-23 15:55   ` Konrad Rzeszutek Wilk
2013-07-23  9:41 ` [PATCH 3/4] kvm: " Jason Wang
2013-07-23 11:16   ` Paolo Bonzini
2013-07-23  9:41 ` [PATCH 4/4] x86: properly handle kvm emulation of hyperv Jason Wang
2013-07-23 11:17   ` Paolo Bonzini
2013-07-23 13:55   ` KY Srinivasan
2013-07-23 14:48     ` H. Peter Anvin
2013-07-23 17:45       ` KY Srinivasan
2013-07-23 18:45         ` H. Peter Anvin
2013-07-23 22:42           ` KY Srinivasan
2013-07-24  4:37       ` Jason Wang
2013-07-24  4:48         ` H. Peter Anvin
2013-07-24  6:54           ` Jason Wang
2013-07-24  7:06             ` Paolo Bonzini
2013-07-24 14:01               ` KY Srinivasan
2013-07-24 15:14                 ` H. Peter Anvin
2013-07-24 19:05                   ` KY Srinivasan
2013-07-24 21:37                     ` H. Peter Anvin
2013-07-25  7:59                       ` Paolo Bonzini
2013-07-25  8:12                         ` Jason Wang
2013-07-23 10:04 ` [PATCH 1/4] x86: introduce hypervisor_cpuid_base() H. Peter Anvin
2013-07-23 11:16   ` Paolo Bonzini
2013-07-23 16:03     ` H. Peter Anvin
2013-07-24  4:44       ` Jason Wang
2013-07-24  4:47         ` H. Peter Anvin
2013-07-23 13:48 ` Gleb Natapov
2013-07-24  4:34   ` Jason Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).