peterdelevoryas / rpms / qemu

Forked from rpms/qemu 2 years ago
Clone

Blame qemu-avoid-harmless-msr-warnings.patch

Mark McLoughlin da7d23
From 3084ee6394248dd27946acb609c758d0778d7b9a Mon Sep 17 00:00:00 2001
Mark McLoughlin e37615
From: Marcelo Tosatti <mtosatti@redhat.com>
Mark McLoughlin da7d23
Date: Wed, 24 Jun 2009 14:38:34 +0100
Mark McLoughlin da7d23
Subject: [PATCH 6/7] Avoid harmless unhandled wrmsr 0xc0010117 messages
Mark McLoughlin e37615
Mark McLoughlin e37615
Olders kernel which don't contain kvm.git commit
Mark McLoughlin e37615
61a6bd672bda3b9468bf5895c1be085c4e481138 display the following message:
Mark McLoughlin e37615
Mark McLoughlin e37615
kvm: 32301: cpu0 unhandled wrmsr: 0xc0010117 data 0
Mark McLoughlin e37615
Mark McLoughlin e37615
When kvm_arch_load_regs is called. This is confusing in bug reports.
Mark McLoughlin e37615
Mark McLoughlin e37615
Avoid it by checking whether the host advertises the MSR, similarly to
Mark McLoughlin e37615
how MSR_STAR is handled.
Mark McLoughlin e37615
Mark McLoughlin e37615
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Mark McLoughlin e37615
Signed-off-by: Avi Kivity <avi@redhat.com>
Mark McLoughlin da7d23
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Mark McLoughlin e37615
---
Mark McLoughlin e37615
 qemu-kvm-x86.c |   15 +++++++++++----
Mark McLoughlin e37615
 1 files changed, 11 insertions(+), 4 deletions(-)
Mark McLoughlin e37615
Mark McLoughlin e37615
diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
Mark McLoughlin da7d23
index 856b70c..505cc4c 100644
Mark McLoughlin e37615
--- a/qemu-kvm-x86.c
Mark McLoughlin e37615
+++ b/qemu-kvm-x86.c
Mark McLoughlin e37615
@@ -25,6 +25,7 @@
Mark McLoughlin e37615
 static struct kvm_msr_list *kvm_msr_list;
Mark McLoughlin e37615
 extern unsigned int kvm_shadow_memory;
Mark McLoughlin e37615
 static int kvm_has_msr_star;
Mark McLoughlin e37615
+static int kvm_has_vm_hsave_pa;
Mark McLoughlin e37615
 
Mark McLoughlin e37615
 static int lm_capable_kernel;
Mark McLoughlin e37615
 
Mark McLoughlin e37615
@@ -54,10 +55,14 @@ int kvm_arch_qemu_create_context(void)
Mark McLoughlin e37615
     kvm_msr_list = kvm_get_msr_list(kvm_context);
Mark McLoughlin e37615
     if (!kvm_msr_list)
Mark McLoughlin e37615
 		return -1;
Mark McLoughlin e37615
-    for (i = 0; i < kvm_msr_list->nmsrs; ++i)
Mark McLoughlin e37615
+    for (i = 0; i < kvm_msr_list->nmsrs; ++i) {
Mark McLoughlin e37615
 	if (kvm_msr_list->indices[i] == MSR_STAR)
Mark McLoughlin e37615
 	    kvm_has_msr_star = 1;
Mark McLoughlin e37615
-	return 0;
Mark McLoughlin e37615
+        if (kvm_msr_list->indices[i] == MSR_VM_HSAVE_PA)
Mark McLoughlin e37615
+            kvm_has_vm_hsave_pa = 1;
Mark McLoughlin e37615
+    }
Mark McLoughlin e37615
+
Mark McLoughlin e37615
+    return 0;
Mark McLoughlin e37615
 }
Mark McLoughlin e37615
 
Mark McLoughlin e37615
 static void set_msr_entry(struct kvm_msr_entry *entry, uint32_t index,
Mark McLoughlin e37615
@@ -260,7 +265,8 @@ void kvm_arch_load_regs(CPUState *env)
Mark McLoughlin e37615
     set_msr_entry(&msrs[n++], MSR_IA32_SYSENTER_EIP, env->sysenter_eip);
Mark McLoughlin e37615
     if (kvm_has_msr_star)
Mark McLoughlin e37615
 	set_msr_entry(&msrs[n++], MSR_STAR,              env->star);
Mark McLoughlin e37615
-    set_msr_entry(&msrs[n++], MSR_VM_HSAVE_PA, env->vm_hsave);
Mark McLoughlin e37615
+    if (kvm_has_vm_hsave_pa)
Mark McLoughlin e37615
+        set_msr_entry(&msrs[n++], MSR_VM_HSAVE_PA, env->vm_hsave);
Mark McLoughlin e37615
 #ifdef TARGET_X86_64
Mark McLoughlin e37615
     if (lm_capable_kernel) {
Mark McLoughlin e37615
         set_msr_entry(&msrs[n++], MSR_CSTAR,             env->cstar);
Mark McLoughlin e37615
@@ -435,7 +441,8 @@ void kvm_arch_save_regs(CPUState *env)
Mark McLoughlin e37615
     if (kvm_has_msr_star)
Mark McLoughlin e37615
 	msrs[n++].index = MSR_STAR;
Mark McLoughlin e37615
     msrs[n++].index = MSR_IA32_TSC;
Mark McLoughlin e37615
-    msrs[n++].index = MSR_VM_HSAVE_PA;
Mark McLoughlin e37615
+    if (kvm_has_vm_hsave_pa)
Mark McLoughlin e37615
+        msrs[n++].index = MSR_VM_HSAVE_PA;
Mark McLoughlin e37615
 #ifdef TARGET_X86_64
Mark McLoughlin e37615
     if (lm_capable_kernel) {
Mark McLoughlin e37615
         msrs[n++].index = MSR_CSTAR;
Mark McLoughlin e37615
-- 
Mark McLoughlin da7d23
1.6.2.2
Mark McLoughlin e37615