Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp7958094ybl; Thu, 16 Jan 2020 08:20:46 -0800 (PST) X-Google-Smtp-Source: APXvYqwg9zDFBxkerphbq8DVS3tcmyHAK/BQnAIfVj5kEtbrwIhj/Fv79kJv7LovpqBf1OePE7Hf X-Received: by 2002:a05:6830:22e2:: with SMTP id t2mr2737561otc.129.1579191645970; Thu, 16 Jan 2020 08:20:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579191645; cv=none; d=google.com; s=arc-20160816; b=hAdfEOsl0+wWtN2+iVwq1SFzw2pQNEGw3H9/DGec2neNLuxpuVwg+iR+nKLLwN9wGl yB2YR/07xlkBhjjR/mtmMYXVfdzkUAo9hrs1OqHlqwARQTI0KbXGN0GHoq7AJIJAE1Jz b8DShdL8W8ZAL6qTkwqJRpAGBHyeFAGlq8y+Zpnjb+acsg32xzGr8xLmQhWCPM8CXlLS QrqjuyKviDkjn6EWwef9L8itxZhnOQrKu9kHWgh9qbo024UZKQKiDYa6a82tN2SMNCp3 m4hWWRbhADuRVmRKH++UCyeP0W4r7GlqPw0jBYFlhWkrqUUlpGrW8v6lzQjZXLPMMgeW BrGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=fhTNP3hZbImlop4Ax57j5RLKW0pLSfcNYvpJHtFEsSc=; b=UvIldKfmssmUlJS/1idwWLEhD/bHBhQfaRdgi5QF4K+VQYnIsOw+V/DuBkGW2DVNLY 5FBpgv3B2bkEnIV0+kyo+R7FE8/Gkwe+BGL9i2VGYOecSQ3iJpcRBbj6PQXdtj5PpTiH x33Dmn84+jtxaMQXyX378tIhyPKNi4J8Mj3AlYaGFuJYSmF170Gmrks/BddskjX8NPdJ v75/CYgaojQuBd0N7k2NTMytNLE1lgvgtVHhiyypkoiInvW1EiA4RRU3jjrduYTcseZW evInwMDPPUikaJ9+MWqHkca0w4gXsaQKCl2ZWmAgtttCkF9q31Y31z3ISJ/HYg3FpA1v 0xVQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x22si12518305otp.107.2020.01.16.08.20.32; Thu, 16 Jan 2020 08:20:45 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726933AbgAPQTa (ORCPT + 99 others); Thu, 16 Jan 2020 11:19:30 -0500 Received: from mga03.intel.com ([134.134.136.65]:2489 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726151AbgAPQTa (ORCPT ); Thu, 16 Jan 2020 11:19:30 -0500 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Jan 2020 08:19:29 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,326,1574150400"; d="scan'208";a="219731566" Received: from sjchrist-coffee.jf.intel.com (HELO linux.intel.com) ([10.54.74.202]) by fmsmga007.fm.intel.com with ESMTP; 16 Jan 2020 08:19:28 -0800 Date: Thu, 16 Jan 2020 08:19:28 -0800 From: Sean Christopherson To: Vitaly Kuznetsov Cc: Liran Alon , kvm@vger.kernel.org, Paolo Bonzini , Jim Mattson , linux-kernel@vger.kernel.org, Roman Kagan Subject: Re: [PATCH RFC 2/3] x86/kvm/hyper-v: move VMX controls sanitization out of nested_enable_evmcs() Message-ID: <20200116161928.GC20561@linux.intel.com> References: <20200115171014.56405-1-vkuznets@redhat.com> <20200115171014.56405-3-vkuznets@redhat.com> <20200115232738.GB18268@linux.intel.com> <877e1riy1o.fsf@vitty.brq.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <877e1riy1o.fsf@vitty.brq.redhat.com> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Jan 16, 2020 at 09:51:47AM +0100, Vitaly Kuznetsov wrote: > Liran Alon writes: > > >> On 16 Jan 2020, at 1:27, Sean Christopherson wrote: > >> > >> On Wed, Jan 15, 2020 at 06:10:13PM +0100, Vitaly Kuznetsov wrote: > >>> With fine grained VMX feature enablement QEMU>=4.2 tries to do KVM_SET_MSRS > >>> with default (matching CPU model) values and in case eVMCS is also enabled, > >>> fails. > >> > >> As in, Qemu is blindly throwing values at KVM and complains on failure? > >> That seems like a Qemu bug, especially since Qemu needs to explicitly do > >> KVM_CAP_HYPERV_ENLIGHTENED_VMCS to enable eVMCS. > > > > See: https://patchwork.kernel.org/patch/11316021/ > > For more context. > > Ya, > > while it would certainly be possible to require that userspace takes > into account KVM_CAP_HYPERV_ENLIGHTENED_VMCS (which is an opt-in) when > doing KVM_SET_MSRS there doesn't seem to be an existing (easy) way to > figure out which VMX controls were filtered out after enabling > KVM_CAP_HYPERV_ENLIGHTENED_VMCS: KVM_GET_MSRS returns global > &vmcs_config.nested values for VMX MSRs (vmx_get_msr_feature()). Ah, I was looking at the call to vmx_get_vmx_msr(&vmx->nested.msrs, ...) in vmx_get_msr(). Why not just do this in Qemu? IMO that's not a major ask, e.g. Qemu is doing a decent amount of manual adjustment anyways. And Qemu isn't even using the result of KVM_GET_MSRS so I don't think it's fair to say this is solely KVM's fault. diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 1d10046a6c..6545bb323e 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -2623,6 +2623,23 @@ static void kvm_msr_entry_add_vmx(X86CPU *cpu, FeatureWordArray f) MSR_VMX_EPT_UC | MSR_VMX_EPT_WB : 0); uint64_t fixed_vmx_ept_vpid = kvm_vmx_ept_vpid & fixed_vmx_ept_mask; + /* Hyper-V's eVMCS does't support certain features, adjust accordingly. */ + if (cpu->hyperv_evmcs) { + f[FEAT_VMX_PINBASED_CTLS] &= ~(VMX_PIN_BASED_VMX_PREEMPTION_TIMER | + VMX_PIN_BASED_POSTED_INTR); + f[FEAT_VMX_EXIT_CTLS] &= ~VMX_VM_EXIT_LOAD_IA32_PERF_GLOBAL_CTRL; + f[FEAT_VMX_ENTRY_CTLS] &= ~VMX_VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL; + f[FEAT_VMX_SECONDARY_CTLS] &= ~(VMX_SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | + VMX_SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES | + VMX_SECONDARY_EXEC_APIC_REGISTER_VIRT | + VMX_SECONDARY_EXEC_ENABLE_PML | + VMX_SECONDARY_EXEC_ENABLE_VMFUNC | + VMX_SECONDARY_EXEC_SHADOW_VMCS | + /* VMX_SECONDARY_EXEC_TSC_SCALING | */ + VMX_SECONDARY_EXEC_PAUSE_LOOP_EXITING); + f[FEAT_VMX_VMFUNC] &= ~MSR_VMX_VMFUNC_EPT_SWITCHING; + } + kvm_msr_entry_add(cpu, MSR_IA32_VMX_TRUE_PROCBASED_CTLS, make_vmx_msr_value(MSR_IA32_VMX_TRUE_PROCBASED_CTLS, f[FEAT_VMX_PROCBASED_CTLS]));