From nobody Fri Nov 7 15:27:25 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; 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=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548454258219468.0818209768622; Fri, 25 Jan 2019 14:10:58 -0800 (PST) Received: from localhost ([127.0.0.1]:51384 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gn9gf-0008Dp-6d for importer@patchew.org; Fri, 25 Jan 2019 17:10:57 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59539) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gn9cA-0004vt-Sp for qemu-devel@nongnu.org; Fri, 25 Jan 2019 17:06:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gn9cA-0006Ex-0m for qemu-devel@nongnu.org; Fri, 25 Jan 2019 17:06:18 -0500 Received: from mx1.redhat.com ([209.132.183.28]:36414) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gn9c7-0006B6-NH for qemu-devel@nongnu.org; Fri, 25 Jan 2019 17:06:17 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 885438BA01; Fri, 25 Jan 2019 22:06:11 +0000 (UTC) Received: from localhost (ovpn-116-63.gru2.redhat.com [10.97.116.63]) by smtp.corp.redhat.com (Postfix) with ESMTP id AFB6060FDF; Fri, 25 Jan 2019 22:06:10 +0000 (UTC) From: Eduardo Habkost To: qemu-devel@nongnu.org Date: Fri, 25 Jan 2019 20:06:05 -0200 Message-Id: <20190125220606.4864-2-ehabkost@redhat.com> In-Reply-To: <20190125220606.4864-1-ehabkost@redhat.com> References: <20190125220606.4864-1-ehabkost@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 25 Jan 2019 22:06:11 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 1/2] i386: kvm: Disable arch_capabilities if MSR can't be set X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eduardo Habkost , kvm@vger.kernel.org, =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , KarimAllah Ahmed , Marcelo Tosatti , Robert Hoo , Darren Kenny , Tao Xu , Paolo Bonzini , Konrad Rzeszutek Wilk , Jim Mattson , David Woodhouse , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" KVM has two bugs in the handling of MSR_IA32_ARCH_CAPABILITIES: 1) Linux commit commit 1eaafe91a0df ("kvm: x86: IA32_ARCH_CAPABILITIES is always supported") makes GET_SUPPORTED_CPUID return arch_capabilities even if running on SVM. This makes "-cpu host,migratable=3Doff" incorrectly expose arch_capabilities on CPUID on AMD hosts (where the MSR is not emulated by KVM). 2) KVM_GET_MSR_INDEX_LIST does not return MSR_IA32_ARCH_CAPABILITIES if the MSR is not supported by the host CPU. This makes QEMU not initialize the MSR properly at kvm_put_msrs() on those hosts. Work around both bugs on the QEMU side, by checking if the MSR was returned by KVM_GET_MSR_INDEX_LIST before returning the feature flag on kvm_arch_get_supported_cpuid(). This has the unfortunate side effect of making arch_capabilities unavailable on hosts without hardware support for the MSR until bug #2 is fixed on KVM, but I can't see another way to work around bug #1 without that side effect. Signed-off-by: Eduardo Habkost --- Cc: Konrad Rzeszutek Wilk Cc: Jim Mattson Cc: KarimAllah Ahmed Cc: David Woodhouse Cc: Darren Kenny --- target/i386/kvm.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 9af4542fb8..4fa3e3806a 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -389,6 +389,15 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uin= t32_t function, if (host_tsx_blacklisted()) { ret &=3D ~(CPUID_7_0_EBX_RTM | CPUID_7_0_EBX_HLE); } + } else if (function =3D=3D 7 && index =3D=3D 0 && reg =3D=3D R_EDX) { + /* + * Linux incorrectly v4.17-v4.20 return ARCH_CAPABILITIES on SVM. + * We can detect the bug by checking if MSR_IA32_ARCH_CAPABILITIES= is + * returned by KVM_GET_MSR_INDEX_LIST. + */ + if (!has_msr_arch_capabs) { + ret &=3D ~CPUID_7_0_EDX_ARCH_CAPABILITIES; + } } else if (function =3D=3D 0x80000001 && reg =3D=3D R_ECX) { /* * It's safe to enable TOPOEXT even if it's not returned by --=20 2.18.0.rc1.1.g3f1ff2140 From nobody Fri Nov 7 15:27:25 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; 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=redhat.com Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548454103145309.62517649494566; Fri, 25 Jan 2019 14:08:23 -0800 (PST) Received: from localhost ([127.0.0.1]:51332 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gn9e4-0005ov-Tu for importer@patchew.org; Fri, 25 Jan 2019 17:08:16 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59534) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gn9cA-0004vq-Os for qemu-devel@nongnu.org; Fri, 25 Jan 2019 17:06:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gn9cA-0006F5-1q for qemu-devel@nongnu.org; Fri, 25 Jan 2019 17:06:18 -0500 Received: from mx1.redhat.com ([209.132.183.28]:56671) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gn9c9-0006CY-EG for qemu-devel@nongnu.org; Fri, 25 Jan 2019 17:06:17 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B93B17BDA7; Fri, 25 Jan 2019 22:06:13 +0000 (UTC) Received: from localhost (ovpn-116-63.gru2.redhat.com [10.97.116.63]) by smtp.corp.redhat.com (Postfix) with ESMTP id 242FF608C3; Fri, 25 Jan 2019 22:06:12 +0000 (UTC) From: Eduardo Habkost To: qemu-devel@nongnu.org Date: Fri, 25 Jan 2019 20:06:06 -0200 Message-Id: <20190125220606.4864-3-ehabkost@redhat.com> In-Reply-To: <20190125220606.4864-1-ehabkost@redhat.com> References: <20190125220606.4864-1-ehabkost@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 25 Jan 2019 22:06:13 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 2/2] i386: Make arch_capabilities migratable X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Eduardo Habkost , kvm@vger.kernel.org, =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Marcelo Tosatti , Robert Hoo , Tao Xu , Paolo Bonzini , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Now that kvm_arch_get_supported_cpuid() will only return arch_capabilities if QEMU is able to initialize the MSR properly, we know that the feature is safely migratable. Signed-off-by: Eduardo Habkost --- target/i386/cpu.c | 1 - 1 file changed, 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 2f5412592d..3ff91d794d 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1088,7 +1088,6 @@ static FeatureWordInfo feature_word_info[FEATURE_WORD= S] =3D { .reg =3D R_EDX, }, .tcg_features =3D TCG_7_0_EDX_FEATURES, - .unmigratable_flags =3D CPUID_7_0_EDX_ARCH_CAPABILITIES, }, [FEAT_8000_0007_EDX] =3D { .type =3D CPUID_FEATURE_WORD, --=20 2.18.0.rc1.1.g3f1ff2140