Commit 6f00e68f authored by Avi Kivity's avatar Avi Kivity Committed by Linus Torvalds

[PATCH] KVM: Emulate IA32_MISC_ENABLE msr

This allows netbsd 3.1 i386 to get further along installing.
Signed-off-by: default avatarAvi Kivity <avi@qumranet.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent bce66ca4
...@@ -242,6 +242,7 @@ struct kvm_vcpu { ...@@ -242,6 +242,7 @@ struct kvm_vcpu {
u64 pdptrs[4]; /* pae */ u64 pdptrs[4]; /* pae */
u64 shadow_efer; u64 shadow_efer;
u64 apic_base; u64 apic_base;
u64 ia32_misc_enable_msr;
int nmsrs; int nmsrs;
struct vmx_msr_entry *guest_msrs; struct vmx_msr_entry *guest_msrs;
struct vmx_msr_entry *host_msrs; struct vmx_msr_entry *host_msrs;
......
...@@ -1226,6 +1226,9 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata) ...@@ -1226,6 +1226,9 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
case MSR_IA32_APICBASE: case MSR_IA32_APICBASE:
data = vcpu->apic_base; data = vcpu->apic_base;
break; break;
case MSR_IA32_MISC_ENABLE:
data = vcpu->ia32_misc_enable_msr;
break;
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
case MSR_EFER: case MSR_EFER:
data = vcpu->shadow_efer; data = vcpu->shadow_efer;
...@@ -1297,6 +1300,9 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) ...@@ -1297,6 +1300,9 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data)
case MSR_IA32_APICBASE: case MSR_IA32_APICBASE:
vcpu->apic_base = data; vcpu->apic_base = data;
break; break;
case MSR_IA32_MISC_ENABLE:
vcpu->ia32_misc_enable_msr = data;
break;
default: default:
printk(KERN_ERR "kvm: unhandled wrmsr: 0x%x\n", msr); printk(KERN_ERR "kvm: unhandled wrmsr: 0x%x\n", msr);
return 1; return 1;
...@@ -1600,6 +1606,10 @@ static u32 msrs_to_save[] = { ...@@ -1600,6 +1606,10 @@ static u32 msrs_to_save[] = {
static unsigned num_msrs_to_save; static unsigned num_msrs_to_save;
static u32 emulated_msrs[] = {
MSR_IA32_MISC_ENABLE,
};
static __init void kvm_init_msr_list(void) static __init void kvm_init_msr_list(void)
{ {
u32 dummy[2]; u32 dummy[2];
...@@ -1925,7 +1935,7 @@ static long kvm_dev_ioctl(struct file *filp, ...@@ -1925,7 +1935,7 @@ static long kvm_dev_ioctl(struct file *filp,
if (copy_from_user(&msr_list, user_msr_list, sizeof msr_list)) if (copy_from_user(&msr_list, user_msr_list, sizeof msr_list))
goto out; goto out;
n = msr_list.nmsrs; n = msr_list.nmsrs;
msr_list.nmsrs = num_msrs_to_save; msr_list.nmsrs = num_msrs_to_save + ARRAY_SIZE(emulated_msrs);
if (copy_to_user(user_msr_list, &msr_list, sizeof msr_list)) if (copy_to_user(user_msr_list, &msr_list, sizeof msr_list))
goto out; goto out;
r = -E2BIG; r = -E2BIG;
...@@ -1935,6 +1945,11 @@ static long kvm_dev_ioctl(struct file *filp, ...@@ -1935,6 +1945,11 @@ static long kvm_dev_ioctl(struct file *filp,
if (copy_to_user(user_msr_list->indices, &msrs_to_save, if (copy_to_user(user_msr_list->indices, &msrs_to_save,
num_msrs_to_save * sizeof(u32))) num_msrs_to_save * sizeof(u32)))
goto out; goto out;
if (copy_to_user(user_msr_list->indices
+ num_msrs_to_save * sizeof(u32),
&emulated_msrs,
ARRAY_SIZE(emulated_msrs) * sizeof(u32)))
goto out;
r = 0; r = 0;
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment