From nobody Mon Feb 9 10:58:31 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500317816274519.9442513976203; Mon, 17 Jul 2017 11:56:56 -0700 (PDT) Received: from localhost ([::1]:52043 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dXBCR-0008KR-14 for importer@patchew.org; Mon, 17 Jul 2017 14:56:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34502) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dXB6y-0003PO-0s for qemu-devel@nongnu.org; Mon, 17 Jul 2017 14:51:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dXB6x-0003pQ-1O for qemu-devel@nongnu.org; Mon, 17 Jul 2017 14:51:16 -0400 Received: from mx1.redhat.com ([209.132.183.28]:40628) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dXB6w-0003ns-OS for qemu-devel@nongnu.org; Mon, 17 Jul 2017 14:51:14 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A34112F86C3; Mon, 17 Jul 2017 18:51:13 +0000 (UTC) Received: from localhost (ovpn-116-61.gru2.redhat.com [10.97.116.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id 119206046A; Mon, 17 Jul 2017 18:51:12 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com A34112F86C3 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=ehabkost@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com A34112F86C3 From: Eduardo Habkost To: Peter Maydell Date: Mon, 17 Jul 2017 15:50:46 -0300 Message-Id: <20170717185051.18740-11-ehabkost@redhat.com> In-Reply-To: <20170717185051.18740-1-ehabkost@redhat.com> References: <20170717185051.18740-1-ehabkost@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Mon, 17 Jul 2017 18:51:13 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 10/15] i386: expose "TCGTCGTCGTCG" in the 0x40000000 CPUID leaf 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: qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Daniel P. Berrange" Currently when running KVM, we expose "KVMKVMKVM\0\0\0" in the 0x40000000 CPUID leaf. Other hypervisors (VMWare, HyperV, Xen, BHyve) all do the same thing, which leaves TCG as the odd one out. The CPUID signature is used by software to detect which virtual environment they are running in and (potentially) change behaviour in certain ways. For example, systemd supports a ConditionVirtualization=3D setting in unit files. The virt-what command can also report the virt type it is running on Currently both these apps have to resort to custom hacks like looking for 'fw-cfg' entry in the /proc/device-tree file to identify TCG. This change thus proposes a signature "TCGTCGTCGTCG" to be reported when running under TCG. To hide this, the -cpu option tcg-cpuid=3Doff can be used. Signed-off-by: Daniel P. Berrange Message-Id: <20170509132736.10071-3-berrange@redhat.com> Signed-off-by: Eduardo Habkost --- include/hw/i386/pc.h | 5 +++++ target/i386/cpu.h | 1 + target/i386/cpu.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index f48d167..d80859b 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -380,6 +380,11 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_= t *); #define PC_COMPAT_2_8 \ HW_COMPAT_2_8 \ {\ + .driver =3D TYPE_X86_CPU,\ + .property =3D "tcg-cpuid",\ + .value =3D "off",\ + },\ + {\ .driver =3D "kvmclock",\ .property =3D "x-mach-use-reliable-get-clock",\ .value =3D "off",\ diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 7a228af..0518673 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1218,6 +1218,7 @@ struct X86CPU { bool check_cpuid; bool enforce_cpuid; bool expose_kvm; + bool expose_tcg; bool migratable; bool max_features; /* Enable all supported features automatically */ uint32_t apic_id; diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 4de91d5..71983ef 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -2632,12 +2632,15 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index= , uint32_t count, CPUState *cs =3D CPU(cpu); uint32_t pkg_offset; uint32_t limit; + uint32_t signature[3]; =20 /* Calculate & apply limits for different index ranges */ if (index >=3D 0xC0000000) { limit =3D env->cpuid_xlevel2; } else if (index >=3D 0x80000000) { limit =3D env->cpuid_xlevel; + } else if (index >=3D 0x40000000) { + limit =3D 0x40000001; } else { limit =3D env->cpuid_level; } @@ -2872,6 +2875,30 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index,= uint32_t count, } break; } + case 0x40000000: + /* + * CPUID code in kvm_arch_init_vcpu() ignores stuff + * set here, but we restrict to TCG none the less. + */ + if (tcg_enabled() && cpu->expose_tcg) { + memcpy(signature, "TCGTCGTCGTCG", 12); + *eax =3D 0x40000001; + *ebx =3D signature[0]; + *ecx =3D signature[1]; + *edx =3D signature[2]; + } else { + *eax =3D 0; + *ebx =3D 0; + *ecx =3D 0; + *edx =3D 0; + } + break; + case 0x40000001: + *eax =3D 0; + *ebx =3D 0; + *ecx =3D 0; + *edx =3D 0; + break; case 0x80000000: *eax =3D env->cpuid_xlevel; *ebx =3D env->cpuid_vendor1; @@ -4018,6 +4045,7 @@ static Property x86_cpu_properties[] =3D { DEFINE_PROP_BOOL("kvm-no-smi-migration", X86CPU, kvm_no_smi_migration, false), DEFINE_PROP_BOOL("vmware-cpuid-freq", X86CPU, vmware_cpuid_freq, true), + DEFINE_PROP_BOOL("tcg-cpuid", X86CPU, expose_tcg, true), DEFINE_PROP_END_OF_LIST() }; =20 --=20 2.9.4