From 9df56f19a500bea90d160be1bf77e4fbcd204d3f Mon Sep 17 00:00:00 2001 From: Jason Wang Date: Thu, 25 Jul 2013 16:54:35 +0800 Subject: x86: Correctly detect hypervisor We try to handle the hypervisor compatibility mode by detecting hypervisor through a specific order. This is not robust, since hypervisors may implement each others features. This patch tries to handle this situation by always choosing the last one in the CPUID leaves. This is done by letting .detect() return a priority instead of true/false and just re-using the CPUID leaf where the signature were found as the priority (or 1 if it was found by DMI). Then we can just pick hypervisor who has the highest priority. Other sophisticated detection method could also be implemented on top. Suggested by H. Peter Anvin and Paolo Bonzini. Acked-by: K. Y. Srinivasan Cc: Haiyang Zhang Cc: Konrad Rzeszutek Wilk Cc: Jeremy Fitzhardinge Cc: Doug Covelli Cc: Borislav Petkov Cc: Dan Hecht Cc: Paul Gortmaker Cc: Marcelo Tosatti Cc: Gleb Natapov Cc: Paolo Bonzini Cc: Frederic Weisbecker Signed-off-by: Jason Wang Link: http://lkml.kernel.org/r/1374742475-2485-4-git-send-email-jasowang@redhat.com Signed-off-by: H. Peter Anvin --- arch/x86/xen/enlighten.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'arch/x86/xen') diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 193097ef3d7d..2fcaedc0b739 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c @@ -1720,15 +1720,12 @@ static void __init xen_hvm_guest_init(void) xen_hvm_init_mmu_ops(); } -static bool __init xen_hvm_platform(void) +static uint32_t __init xen_hvm_platform(void) { if (xen_pv_domain()) - return false; - - if (!xen_cpuid_base()) - return false; + return 0; - return true; + return xen_cpuid_base(); } bool xen_hvm_need_lapic(void) -- cgit v1.2.1