[PATCH] KVM: Emulate IA32_MISC_ENABLE msr
This allows netbsd 3.1 i386 to get further along installing. Signed-off-by: Avi Kivity <avi@qumranet.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
bce66ca4a2
Коммит
6f00e68f21
|
@ -242,6 +242,7 @@ struct kvm_vcpu {
|
|||
u64 pdptrs[4]; /* pae */
|
||||
u64 shadow_efer;
|
||||
u64 apic_base;
|
||||
u64 ia32_misc_enable_msr;
|
||||
int nmsrs;
|
||||
struct vmx_msr_entry *guest_msrs;
|
||||
struct vmx_msr_entry *host_msrs;
|
||||
|
|
|
@ -1226,6 +1226,9 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
|
|||
case MSR_IA32_APICBASE:
|
||||
data = vcpu->apic_base;
|
||||
break;
|
||||
case MSR_IA32_MISC_ENABLE:
|
||||
data = vcpu->ia32_misc_enable_msr;
|
||||
break;
|
||||
#ifdef CONFIG_X86_64
|
||||
case MSR_EFER:
|
||||
data = vcpu->shadow_efer;
|
||||
|
@ -1297,6 +1300,9 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data)
|
|||
case MSR_IA32_APICBASE:
|
||||
vcpu->apic_base = data;
|
||||
break;
|
||||
case MSR_IA32_MISC_ENABLE:
|
||||
vcpu->ia32_misc_enable_msr = data;
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "kvm: unhandled wrmsr: 0x%x\n", msr);
|
||||
return 1;
|
||||
|
@ -1600,6 +1606,10 @@ static u32 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)
|
||||
{
|
||||
u32 dummy[2];
|
||||
|
@ -1925,7 +1935,7 @@ static long kvm_dev_ioctl(struct file *filp,
|
|||
if (copy_from_user(&msr_list, user_msr_list, sizeof msr_list))
|
||||
goto out;
|
||||
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))
|
||||
goto out;
|
||||
r = -E2BIG;
|
||||
|
@ -1935,6 +1945,11 @@ static long kvm_dev_ioctl(struct file *filp,
|
|||
if (copy_to_user(user_msr_list->indices, &msrs_to_save,
|
||||
num_msrs_to_save * sizeof(u32)))
|
||||
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;
|
||||
break;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче