KVM: ignore AMDs HWCR register access to set the FFDIS bit
authorAndre Przywara <andre.przywara@amd.com>
Wed, 24 Jun 2009 10:44:33 +0000 (12:44 +0200)
committerAvi Kivity <avi@redhat.com>
Thu, 10 Sep 2009 05:33:02 +0000 (08:33 +0300)
Linux tries to disable the flush filter on all AMD K8 CPUs. Since KVM
does not handle the needed MSR, the injected #GP will panic the Linux
kernel. Ignore setting of the HWCR.FFDIS bit in this MSR to let Linux
boot with an AMD K8 family guest CPU.

Signed-off-by: Andre Przywara <andre.przywara@amd.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/svm.c
arch/x86/kvm/x86.c

index b1c4462..8728e51 100644 (file)
@@ -2137,7 +2137,6 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, unsigned ecx, u64 data)
                break;
        case MSR_VM_CR:
        case MSR_VM_IGNNE:
-       case MSR_K7_HWCR:
                pr_unimpl(vcpu, "unimplemented wrmsr: 0x%x data 0x%llx\n", ecx, data);
                break;
        default:
index e9b0982..cae5b12 100644 (file)
@@ -833,6 +833,14 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data)
        case MSR_EFER:
                set_efer(vcpu, data);
                break;
+       case MSR_K7_HWCR:
+               data &= ~(u64)0x40;     /* ignore flush filter disable */
+               if (data != 0) {
+                       pr_unimpl(vcpu, "unimplemented HWCR wrmsr: 0x%llx\n",
+                               data);
+                       return 1;
+               }
+               break;
        case MSR_IA32_DEBUGCTLMSR:
                if (!data) {
                        /* We support the non-activated case already */