From nobody Thu Dec 18 04:17:13 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=oracle.com ARC-Seal: i=1; a=rsa-sha256; t=1560794615; cv=none; d=zoho.com; s=zohoarc; b=XCgoFOKUVEo3OoarwRObojl/Ka/OajYxHLLCFtnQZzEqdMuubRQc9MweQ+k4jxVpFj4kD2GMlbzncPs6JWELkgbppvJFBNEp4fzPgVTcBN/I+jipsHNHt2bro2OVodcGUlANxRGch625E/E5mhwmZIZx2nW9bGE1K/EdO6rwzPo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1560794615; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Q6dVMQo7+PTAndQ8uOguG2f51evVBWGjsKLAeynozxw=; b=WFRD+cDJuP3w5t8lIOTTG3E/+QFiu2xGx+OnhN7JEZZQnbe0Vhc1vQhoiOYb3KZFwYF7AjBJQch5vmUAJ6FAMBLqTSmauNhdBuqRHR/IJ/KkaxzCR42u+BOcVehWe3n8eDGFwp/0g/oH80DDK8d7jl6H9zUEK3kTYbJjvRkQVOM= ARC-Authentication-Results: i=1; mx.zoho.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1560794615593212.7840255665011; Mon, 17 Jun 2019 11:03:35 -0700 (PDT) Received: from localhost ([::1]:50722 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hcvyd-00029i-HK for importer@patchew.org; Mon, 17 Jun 2019 14:03:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52063) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hcvsv-0005fF-VQ for qemu-devel@nongnu.org; Mon, 17 Jun 2019 13:57:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hcvsu-0003TN-PU for qemu-devel@nongnu.org; Mon, 17 Jun 2019 13:57:37 -0400 Received: from userp2120.oracle.com ([156.151.31.85]:40394) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hcvsu-0003Sm-Fw for qemu-devel@nongnu.org; Mon, 17 Jun 2019 13:57:36 -0400 Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x5HHrnVP147796; Mon, 17 Jun 2019 17:57:34 GMT Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by userp2120.oracle.com with ESMTP id 2t4saq7w47-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 17 Jun 2019 17:57:34 +0000 Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x5HHvWaY130537; Mon, 17 Jun 2019 17:57:33 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3030.oracle.com with ESMTP id 2t59gdc0j4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 17 Jun 2019 17:57:33 +0000 Received: from abhmp0012.oracle.com (abhmp0012.oracle.com [141.146.116.18]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id x5HHvWT5002623; Mon, 17 Jun 2019 17:57:32 GMT Received: from spark.ravello.local (/213.57.127.2) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 17 Jun 2019 10:57:32 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=corp-2018-07-02; bh=Q6dVMQo7+PTAndQ8uOguG2f51evVBWGjsKLAeynozxw=; b=oC7JTd6CLxDA7ypw5bglLbStGHdeWBUQkb8cOTevYCY7GrXcdzrwD1AnqaAtB3xdY4qn YnzveUr4wAHyNTch+7jcOjW9NoPYKLMjfWCRGYI6tN+ABUVk0IWxGOoJpZ1rGGsfpgb8 7ozhwacwTrFRjm2xFAipSMSECRmp1/4IgaWns+5e3UEOsvFwDuqhHAg2ebCUSESEhE88 NyaE0j5+BoYdTyrD1MB/lLsxQgvDwtMErAh/3U88OWJGE7jkIWLNqfnSMSyp/+GkXkZd +7WCGzRuKeNpeUFsTaWuiN6EHutqKWvxAExVRDtZGCysj2zfP/NqIbaoncyzF/pml6Aa pA== From: Liran Alon To: qemu-devel@nongnu.org Date: Mon, 17 Jun 2019 20:56:53 +0300 Message-Id: <20190617175658.135869-5-liran.alon@oracle.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190617175658.135869-1-liran.alon@oracle.com> References: <20190617175658.135869-1-liran.alon@oracle.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9291 signatures=668687 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=3 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1906170160 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9291 signatures=668687 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=3 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1810050000 definitions=main-1906170160 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 156.151.31.85 Subject: [Qemu-devel] [QEMU PATCH v3 4/9] KVM: i386: Block migration for vCPUs exposed with nested virtualization X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ehabkost@redhat.com, kvm@vger.kernel.org, maran.wilson@oracle.com, mtosatti@redhat.com, dgilbert@redhat.com, Liran Alon , pbonzini@redhat.com, rth@twiddle.net, jmattson@google.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" Commit d98f26073beb ("target/i386: kvm: add VMX migration blocker") added a migration blocker for vCPU exposed with Intel VMX. However, migration should also be blocked for vCPU exposed with AMD SVM. Both cases should be blocked because QEMU should extract additional vCPU state from KVM that should be migrated as part of vCPU VMState. E.g. Whether vCPU is running in guest-mode or host-mode. Fixes: d98f26073beb ("target/i386: kvm: add VMX migration blocker") Signed-off-by: Liran Alon Reviewed-by: Maran Wilson --- target/i386/cpu.c | 6 ------ target/i386/cpu.h | 24 ++++++++++++++++++++++++ target/i386/kvm.c | 12 ++++++------ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 536d7d152044..197201087e65 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -5170,12 +5170,6 @@ static int x86_cpu_filter_features(X86CPU *cpu) return rv; } =20 -#define IS_INTEL_CPU(env) ((env)->cpuid_vendor1 =3D=3D CPUID_VENDOR_INTEL_= 1 && \ - (env)->cpuid_vendor2 =3D=3D CPUID_VENDOR_INTEL_= 2 && \ - (env)->cpuid_vendor3 =3D=3D CPUID_VENDOR_INTEL_= 3) -#define IS_AMD_CPU(env) ((env)->cpuid_vendor1 =3D=3D CPUID_VENDOR_AMD_1 &&= \ - (env)->cpuid_vendor2 =3D=3D CPUID_VENDOR_AMD_2 &&= \ - (env)->cpuid_vendor3 =3D=3D CPUID_VENDOR_AMD_3) static void x86_cpu_realizefn(DeviceState *dev, Error **errp) { CPUState *cs =3D CPU(dev); diff --git a/target/i386/cpu.h b/target/i386/cpu.h index fce6660bac00..79d9495ceb0c 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -728,6 +728,13 @@ typedef uint32_t FeatureWordArray[FEATURE_WORDS]; =20 #define CPUID_VENDOR_HYGON "HygonGenuine" =20 +#define IS_INTEL_CPU(env) ((env)->cpuid_vendor1 =3D=3D CPUID_VENDOR_INTEL_= 1 && \ + (env)->cpuid_vendor2 =3D=3D CPUID_VENDOR_INTEL_= 2 && \ + (env)->cpuid_vendor3 =3D=3D CPUID_VENDOR_INTEL_= 3) +#define IS_AMD_CPU(env) ((env)->cpuid_vendor1 =3D=3D CPUID_VENDOR_AMD_1 &&= \ + (env)->cpuid_vendor2 =3D=3D CPUID_VENDOR_AMD_2 &&= \ + (env)->cpuid_vendor3 =3D=3D CPUID_VENDOR_AMD_3) + #define CPUID_MWAIT_IBE (1U << 1) /* Interrupts can exit capability */ #define CPUID_MWAIT_EMX (1U << 0) /* enumeration supported */ =20 @@ -1866,6 +1873,23 @@ static inline int32_t x86_get_a20_mask(CPUX86State *= env) } } =20 +static inline bool cpu_has_vmx(CPUX86State *env) +{ + return (IS_INTEL_CPU(env) && + (env->features[FEAT_1_ECX] & CPUID_EXT_VMX)); +} + +static inline bool cpu_has_svm(CPUX86State *env) +{ + return (IS_AMD_CPU(env) && + (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM)); +} + +static inline bool cpu_has_nested_virt(CPUX86State *env) +{ + return (cpu_has_vmx(env) || cpu_has_svm(env)); +} + /* fpu_helper.c */ void update_fp_status(CPUX86State *env); void update_mxcsr_status(CPUX86State *env); diff --git a/target/i386/kvm.c b/target/i386/kvm.c index c8fd53055d37..f43e2d69859e 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -906,7 +906,7 @@ static int hyperv_init_vcpu(X86CPU *cpu) } =20 static Error *invtsc_mig_blocker; -static Error *vmx_mig_blocker; +static Error *nested_virt_mig_blocker; =20 #define KVM_MAX_CPUID_ENTRIES 100 =20 @@ -1270,13 +1270,13 @@ int kvm_arch_init_vcpu(CPUState *cs) !!(c->ecx & CPUID_EXT_SMX); } =20 - if ((env->features[FEAT_1_ECX] & CPUID_EXT_VMX) && !vmx_mig_blocker) { - error_setg(&vmx_mig_blocker, - "Nested VMX virtualization does not support live migrat= ion yet"); - r =3D migrate_add_blocker(vmx_mig_blocker, &local_err); + if (cpu_has_nested_virt(env) && !nested_virt_mig_blocker) { + error_setg(&nested_virt_mig_blocker, + "Nested virtualization does not support live migration = yet"); + r =3D migrate_add_blocker(nested_virt_mig_blocker, &local_err); if (local_err) { error_report_err(local_err); - error_free(vmx_mig_blocker); + error_free(nested_virt_mig_blocker); return r; } } --=20 2.20.1