All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V2 1/4] x86: introduce hypervisor_cpuid_base()
@ 2013-07-25  8:54 Jason Wang
  2013-07-25  8:54   ` Jason Wang
                   ` (3 more replies)
  0 siblings, 4 replies; 21+ messages in thread
From: Jason Wang @ 2013-07-25  8:54 UTC (permalink / raw)
  To: tglx, mingo, hpa, x86, linux-kernel, pbonzini
  Cc: kvm, Jason Wang, Gleb Natapov

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>
---
Changes from V1:
- use memcpy() and uint32_t instead of strcmp()
---
 arch/x86/include/asm/processor.h |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 24cf5ae..7763307 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -971,6 +971,21 @@ 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, signature[3];
+
+	for (base = 0x40000000; base < 0x40010000; base += 0x100) {
+		cpuid(base, &eax, &signature[0], &signature[1], &signature[2]);
+
+		if (!memcmp(sig, signature, 12) &&
+		    (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] 21+ messages in thread

end of thread, other threads:[~2013-08-05 16:50 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-25  8:54 [PATCH V2 1/4] x86: introduce hypervisor_cpuid_base() Jason Wang
2013-07-25  8:54 ` [PATCH V2 2/4] xen: switch to use hypervisor_cpuid_base() Jason Wang
2013-07-25  8:54   ` Jason Wang
2013-08-05 13:57   ` [tip:x86/paravirt] xen: Switch " tip-bot for Jason Wang
2013-07-25  8:54 ` [PATCH V2 3/4] kvm: switch " Jason Wang
2013-08-05 13:58   ` [tip:x86/paravirt] x86, kvm: Switch to use hypervisor_cpuid_base( ) tip-bot for Jason Wang
2013-07-25  8:54 ` [PATCH V2 4/4] x86: correctly detect hypervisor Jason Wang
2013-07-25  8:54   ` Jason Wang
2013-07-25 10:56   ` KY Srinivasan
2013-07-25 10:56     ` KY Srinivasan
2013-07-25 10:56   ` KY Srinivasan
2013-08-05  3:38   ` Jason Wang
2013-08-05  3:38     ` Jason Wang
2013-08-05 14:34     ` Konrad Rzeszutek Wilk
2013-08-05 14:34       ` Konrad Rzeszutek Wilk
2013-08-05 15:20       ` H. Peter Anvin
2013-08-05 15:20         ` H. Peter Anvin
2013-08-05 16:50         ` Konrad Rzeszutek Wilk
2013-08-05 16:50           ` Konrad Rzeszutek Wilk
2013-08-05 13:58   ` [tip:x86/paravirt] x86: Correctly " tip-bot for Jason Wang
2013-08-05 13:57 ` [tip:x86/paravirt] x86: Introduce hypervisor_cpuid_base() tip-bot for Jason Wang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.