[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:
		
							parent
							
								
									bce66ca4a2
								
							
						
					
					
						commit
						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; | ||||
| 	} | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user