KVM: x86: Emulate MSR_EBC_FREQUENCY_ID
authorJes Sorensen <Jes.Sorensen@redhat.com>
Thu, 9 Sep 2010 10:06:46 +0000 (12:06 +0200)
committerAvi Kivity <avi@redhat.com>
Sun, 24 Oct 2010 08:52:27 +0000 (10:52 +0200)
Some operating systems store data about the host processor at the
time of installation, and when booted on a more uptodate cpu tries
to read MSR_EBC_FREQUENCY_ID. This has been found with XP.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/kvm/x86.c

index f47db2588a416ce6a34e3a83de5d5786c35c06c7..9d434777154d1a4502ddcb5e937e986b85ab5448 100644 (file)
@@ -1651,6 +1651,20 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
        case 0xcd: /* fsb frequency */
                data = 3;
                break;
+               /*
+                * MSR_EBC_FREQUENCY_ID
+                * Conservative value valid for even the basic CPU models.
+                * Models 0,1: 000 in bits 23:21 indicating a bus speed of
+                * 100MHz, model 2 000 in bits 18:16 indicating 100MHz,
+                * and 266MHz for model 3, or 4. Set Core Clock
+                * Frequency to System Bus Frequency Ratio to 1 (bits
+                * 31:24) even though these are only valid for CPU
+                * models > 2, however guests may end up dividing or
+                * multiplying by zero otherwise.
+                */
+       case MSR_EBC_FREQUENCY_ID:
+               data = 1 << 24;
+               break;
        case MSR_IA32_APICBASE:
                data = kvm_get_apic_base(vcpu);
                break;