qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Don Slutz <Don@CloudSwitch.com>
To: qemu-devel@nongnu.org, mtosatti@redhat.com, ehabkost@redhat.com,
	imammedo@redhat.com, avi@redhat.com, afaerber@suse.de,
	peter.maydell@linaro.org, kvm@vger.kernel.org,
	anthony@codemonkey.ws
Cc: Don Slutz <Don@CloudSwitch.com>
Subject: [Qemu-devel] [PATCH v5 15/17] target-i386: Add setting of Hypervisor leaf extra for known vmare4.
Date: Fri, 21 Sep 2012 20:13:27 -0400	[thread overview]
Message-ID: <1348272809-27742-16-git-send-email-Don@CloudSwitch.com> (raw)
In-Reply-To: <1348272809-27742-1-git-send-email-Don@CloudSwitch.com>

This was taken from:
  http://article.gmane.org/gmane.comp.emulators.kvm.devel/22643

Signed-off-by: Don Slutz <Don@CloudSwitch.com>
---
 target-i386/cpu.c |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index 2423090..e8a21b5 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1135,6 +1135,36 @@ static void x86_cpuid_set_model_id(Object *obj, const char *model_id,
     }
 }
 
+static void x86_cpuid_set_vmware_extra(Object *obj)
+{
+    X86CPU *cpu = X86_CPU(obj);
+
+    if ((cpu->env.tsc_khz != 0) &&
+        (cpu->env.cpuid_hv_level == CPUID_HV_LEVEL_VMWARE_4) &&
+        (cpu->env.cpuid_hv_vendor1 == CPUID_HV_VENDOR_VMWARE_1) &&
+        (cpu->env.cpuid_hv_vendor2 == CPUID_HV_VENDOR_VMWARE_2) &&
+        (cpu->env.cpuid_hv_vendor3 == CPUID_HV_VENDOR_VMWARE_3)) {
+        const uint32_t apic_khz = 1000000L;
+
+        /*
+         * From article.gmane.org/gmane.comp.emulators.kvm.devel/22643
+         *
+         *    Leaf 0x40000010, Timing Information.
+         *
+         *    VMware has defined the first generic leaf to provide timing
+         *    information.  This leaf returns the current TSC frequency and
+         *    current Bus frequency in kHz.
+         *
+         *    # EAX: (Virtual) TSC frequency in kHz.
+         *    # EBX: (Virtual) Bus (local apic timer) frequency in kHz.
+         *    # ECX, EDX: RESERVED (Per above, reserved fields are set to zero).
+         */
+        cpu->env.cpuid_hv_extra = 0x40000010;
+        cpu->env.cpuid_hv_extra_a = (uint32_t)cpu->env.tsc_khz;
+        cpu->env.cpuid_hv_extra_b = apic_khz;
+    }
+}
+
 static void x86_cpuid_get_tsc_freq(Object *obj, Visitor *v, void *opaque,
                                    const char *name, Error **errp)
 {
@@ -1164,6 +1194,7 @@ static void x86_cpuid_set_tsc_freq(Object *obj, Visitor *v, void *opaque,
     }
 
     cpu->env.tsc_khz = value / 1000;
+    x86_cpuid_set_vmware_extra(obj);
 }
 
 static void x86_cpuid_get_hv_level(Object *obj, Visitor *v, void *opaque,
@@ -1277,6 +1308,7 @@ static void x86_cpuid_set_hv_vendor(Object *obj, const char *value,
         env->cpuid_hv_vendor3 |= ((uint8_t)adj_value[i + 8]) << (8 * i);
     }
     env->cpuid_hv_vendor_set = true;
+    x86_cpuid_set_vmware_extra(obj);
 }
 
 static void x86_cpuid_get_hv_extra(Object *obj, Visitor *v, void *opaque,
-- 
1.7.1

  parent reply	other threads:[~2012-09-22  0:14 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-22  0:13 [Qemu-devel] [PATCH v5 00/17] Allow changing of Hypervisor CPUIDs Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 01/17] target-i386: Allow tsc-frequency to be larger then 2.147G Don Slutz
2012-09-22 15:23   ` Stefan Hajnoczi
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 02/17] target-i386: Add missing kvm bits Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 03/17] target-i386: Add Hypervisor level Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 04/17] target-i386: Add cpu object access routines for " Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 05/17] " Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 06/17] target-i386: Use Hypervisor level in -machine pc, accel=kvm Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 07/17] target-i386: Use Hypervisor level in -machine pc, accel=tcg Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 08/17] target-i386: Add Hypervisor vendor Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 09/17] target-i386: Add cpu object access routines for " Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 10/17] target-i386: Use Hypervisor vendor in -machine pc, accel=kvm Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 11/17] target-i386: Use Hypervisor vendor in -machine pc, accel=tcg Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 12/17] target-i386: Add some known names to Hypervisor vendor Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 13/17] target-i386: Add optional Hypervisor leaf extra Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 14/17] target-i386: Add cpu object access routines for " Don Slutz
2012-09-22  0:13 ` Don Slutz [this message]
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 16/17] target-i386: Use Hypervisor leaf extra in -machine pc, accel=kvm Don Slutz
2012-09-22  0:13 ` [Qemu-devel] [PATCH v5 17/17] target-i386: Use Hypervisor leaf extra in -machine pc, accel=tcg Don Slutz
2012-09-22 13:18 ` [Qemu-devel] [PATCH v5 00/17] Allow changing of Hypervisor CPUIDs Blue Swirl
2012-09-24 13:15   ` Don Slutz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1348272809-27742-16-git-send-email-Don@CloudSwitch.com \
    --to=don@cloudswitch.com \
    --cc=afaerber@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=avi@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=imammedo@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).