|
Mark McLoughlin |
e37615 |
From d283d5a65a2bdcc570065267be21848bd6fe3d78 Mon Sep 17 00:00:00 2001
|
|
Mark McLoughlin |
e37615 |
From: Marcelo Tosatti <mtosatti@redhat.com>
|
|
Mark McLoughlin |
e37615 |
Date: Thu, 7 May 2009 15:48:48 -0300
|
|
Mark McLoughlin |
e37615 |
Subject: [PATCH 1/1] 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 |
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 |
e37615 |
index 98aa530..1096e65 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 |
e37615 |
1.6.0.6
|
|
Mark McLoughlin |
e37615 |
|