Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp4837548pxy; Tue, 27 Apr 2021 13:56:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxbtce1gqWPY6qy3Bbz+zUkFr1B1l+R80+T3y44jOTaO3q/ybnIgbdcIVDE08o2Bo3sijUV X-Received: by 2002:a63:b515:: with SMTP id y21mr24088616pge.253.1619556964977; Tue, 27 Apr 2021 13:56:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619556964; cv=none; d=google.com; s=arc-20160816; b=ZKSiClgOjC1GvOmFyRMhk94Kuf56Z9GW9xCsWUiRwwIXuz+xgT7FdChYtiugSVFNJy lHtoIeb+IZyRlPkgO4WdXsOPwExBV8KmninVaRvDWMKJFGXjhADjcEtwaVdCxtLpLlDD tA8x1H69NivVWRkkHeBwYHyaydpkST7e4OkfXgwceZiRT8p+uA0Xzx/BdeSP63rD9uGJ pGROGguXMaEtEmPqpgl5jxf+Qe98YmAZPT9D+mLgqSzpqmN3rVRHCbUUueJF3yX1cNne 3BEcAzZvQSJOXL72CNdwoi/fMNBPOCzHHRZypKOczumCrMtT3kiWHh0SSEPPB7feiAAV AVpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=Ej89Qm9LLMSPxt8OXtylVuc32Z7Yd+HfBt+EQT9qOcM=; b=E3TNqt0CLzPGyV6skPBI71ZHSdWHz8RuNJj/4fL0IkF6JW/s1MFanG3gZrSOm67D1P HxqE4sz2z/+/MsDKFmXGFiblzQ79X/BjRs1d1PPa44W6Eu5Vt5c/1OstwVKNsFENzwQK 8zHpmKRtabs/OhZkA5DpzrvXINBYvgzvvdL1QAbPuUl9KTbIfiVst3ekc+Io8A8F0eku XvgdsyeTssu1AJgTG8AqXmeZn4lCf5lsbAemzrZ54UxiS0oR9VjsAUXzbJP/35aWMmYp qY4PR6ca+dvzkboso5ax/BxdAvXMoEiA79U3vcpxHprbzlqJs1/YNbfUZ3R9zFXSjWpv lyZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=PDSa9QUP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id lk18si5864023pjb.42.2021.04.27.13.55.51; Tue, 27 Apr 2021 13:56:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=PDSa9QUP; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239125AbhD0Uzy (ORCPT + 99 others); Tue, 27 Apr 2021 16:55:54 -0400 Received: from linux.microsoft.com ([13.77.154.182]:35570 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239013AbhD0Uzt (ORCPT ); Tue, 27 Apr 2021 16:55:49 -0400 Received: from viremana-dev.fwjladdvyuiujdukmejncen4mf.xx.internal.cloudapp.net (unknown [13.66.132.26]) by linux.microsoft.com (Postfix) with ESMTPSA id D8A1B20B8001; Tue, 27 Apr 2021 13:55:05 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com D8A1B20B8001 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1619556905; bh=Ej89Qm9LLMSPxt8OXtylVuc32Z7Yd+HfBt+EQT9qOcM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PDSa9QUPVYflfgMJWAgTbEJG+7+06T7vKyciYF1fXrbSVUcbE/FBojkyuHIrc6Cbt ldrKzzEEb56CaYP9qDhkS+uBdx/7fJilIdaSw7DpW3jAky2Lhcrrn20Ax8Uy5lB6jT RudJ8XQk73khY8QEpCt60IEDwyFrUOH09bjYb2z8= From: Vineeth Pillai To: Lan Tianyu , Michael Kelley , Paolo Bonzini , Sean Christopherson , Vitaly Kuznetsov , Tom Lendacky , Wanpeng Li , Jim Mattson , Joerg Roedel , Wei Liu , Stephen Hemminger , Haiyang Zhang Cc: Vineeth Pillai , "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "K. Y. Srinivasan" , x86@kernel.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org Subject: [PATCH v4 1/7] hyperv: Detect Nested virtualization support for SVM Date: Tue, 27 Apr 2021 20:54:50 +0000 Message-Id: <8ffa88e6ceb55d283c76b4c5fd9ad0fb1a2cf667.1619556430.git.viremana@linux.microsoft.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Previously, to detect nested virtualization enlightenment support, we were using HV_X64_ENLIGHTENED_VMCS_RECOMMENDED feature bit of HYPERV_CPUID_ENLIGHTMENT_INFO.EAX CPUID as docuemented in TLFS: "Bit 14: Recommend a nested hypervisor using the enlightened VMCS interface. Also indicates that additional nested enlightenments may be available (see leaf 0x4000000A)". Enlightened VMCS, however, is an Intel only feature so the above detection method doesn't work for AMD. So, use the HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS.EAX CPUID information ("The maximum input value for hypervisor CPUID information.") and this works for both AMD and Intel. Signed-off-by: Vineeth Pillai --- arch/x86/kernel/cpu/mshyperv.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 3546d3e21787..c6f812851e37 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -252,6 +252,7 @@ static void __init hv_smp_prepare_cpus(unsigned int max_cpus) static void __init ms_hyperv_init_platform(void) { + int hv_max_functions_eax; int hv_host_info_eax; int hv_host_info_ebx; int hv_host_info_ecx; @@ -269,6 +270,8 @@ static void __init ms_hyperv_init_platform(void) ms_hyperv.misc_features = cpuid_edx(HYPERV_CPUID_FEATURES); ms_hyperv.hints = cpuid_eax(HYPERV_CPUID_ENLIGHTMENT_INFO); + hv_max_functions_eax = cpuid_eax(HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS); + pr_info("Hyper-V: privilege flags low 0x%x, high 0x%x, hints 0x%x, misc 0x%x\n", ms_hyperv.features, ms_hyperv.priv_high, ms_hyperv.hints, ms_hyperv.misc_features); @@ -298,8 +301,7 @@ static void __init ms_hyperv_init_platform(void) /* * Extract host information. */ - if (cpuid_eax(HYPERV_CPUID_VENDOR_AND_MAX_FUNCTIONS) >= - HYPERV_CPUID_VERSION) { + if (hv_max_functions_eax >= HYPERV_CPUID_VERSION) { hv_host_info_eax = cpuid_eax(HYPERV_CPUID_VERSION); hv_host_info_ebx = cpuid_ebx(HYPERV_CPUID_VERSION); hv_host_info_ecx = cpuid_ecx(HYPERV_CPUID_VERSION); @@ -325,9 +327,11 @@ static void __init ms_hyperv_init_platform(void) ms_hyperv.isolation_config_a, ms_hyperv.isolation_config_b); } - if (ms_hyperv.hints & HV_X64_ENLIGHTENED_VMCS_RECOMMENDED) { + if (hv_max_functions_eax >= HYPERV_CPUID_NESTED_FEATURES) { ms_hyperv.nested_features = cpuid_eax(HYPERV_CPUID_NESTED_FEATURES); + pr_info("Hyper-V: Nested features: 0x%x\n", + ms_hyperv.nested_features); } /* -- 2.25.1