[PATCH] KVM: Move common msr handling to arch independent code
Signed-off-by: Avi Kivity <avi@qumranet.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
671d656479
commit
3bab1f5dda
@@ -344,8 +344,7 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *pdata)
|
||||
data = vmcs_readl(GUEST_GS_BASE);
|
||||
break;
|
||||
case MSR_EFER:
|
||||
data = vcpu->shadow_efer;
|
||||
break;
|
||||
return kvm_get_msr_common(vcpu, msr_index, pdata);
|
||||
#endif
|
||||
case MSR_IA32_TIME_STAMP_COUNTER:
|
||||
data = guest_read_tsc();
|
||||
@@ -359,36 +358,13 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *pdata)
|
||||
case MSR_IA32_SYSENTER_ESP:
|
||||
data = vmcs_read32(GUEST_SYSENTER_ESP);
|
||||
break;
|
||||
case 0xc0010010: /* SYSCFG */
|
||||
case 0xc0010015: /* HWCR */
|
||||
case MSR_IA32_PLATFORM_ID:
|
||||
case MSR_IA32_P5_MC_ADDR:
|
||||
case MSR_IA32_P5_MC_TYPE:
|
||||
case MSR_IA32_MC0_CTL:
|
||||
case MSR_IA32_MCG_STATUS:
|
||||
case MSR_IA32_MCG_CAP:
|
||||
case MSR_IA32_MC0_MISC:
|
||||
case MSR_IA32_MC0_MISC+4:
|
||||
case MSR_IA32_MC0_MISC+8:
|
||||
case MSR_IA32_MC0_MISC+12:
|
||||
case MSR_IA32_MC0_MISC+16:
|
||||
case MSR_IA32_UCODE_REV:
|
||||
/* MTRR registers */
|
||||
case 0xfe:
|
||||
case 0x200 ... 0x2ff:
|
||||
data = 0;
|
||||
break;
|
||||
case MSR_IA32_APICBASE:
|
||||
data = vcpu->apic_base;
|
||||
break;
|
||||
default:
|
||||
msr = find_msr_entry(vcpu, msr_index);
|
||||
if (!msr) {
|
||||
printk(KERN_ERR "kvm: unhandled rdmsr: %x\n", msr_index);
|
||||
return 1;
|
||||
if (msr) {
|
||||
data = msr->data;
|
||||
break;
|
||||
}
|
||||
data = msr->data;
|
||||
break;
|
||||
return kvm_get_msr_common(vcpu, msr_index, pdata);
|
||||
}
|
||||
|
||||
*pdata = data;
|
||||
@@ -405,6 +381,8 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data)
|
||||
struct vmx_msr_entry *msr;
|
||||
switch (msr_index) {
|
||||
#ifdef CONFIG_X86_64
|
||||
case MSR_EFER:
|
||||
return kvm_set_msr_common(vcpu, msr_index, data);
|
||||
case MSR_FS_BASE:
|
||||
vmcs_writel(GUEST_FS_BASE, data);
|
||||
break;
|
||||
@@ -421,32 +399,17 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data)
|
||||
case MSR_IA32_SYSENTER_ESP:
|
||||
vmcs_write32(GUEST_SYSENTER_ESP, data);
|
||||
break;
|
||||
#ifdef __x86_64
|
||||
case MSR_EFER:
|
||||
set_efer(vcpu, data);
|
||||
break;
|
||||
case MSR_IA32_MC0_STATUS:
|
||||
printk(KERN_WARNING "%s: MSR_IA32_MC0_STATUS 0x%llx, nop\n"
|
||||
, __FUNCTION__, data);
|
||||
break;
|
||||
#endif
|
||||
case MSR_IA32_TIME_STAMP_COUNTER: {
|
||||
guest_write_tsc(data);
|
||||
break;
|
||||
}
|
||||
case MSR_IA32_UCODE_REV:
|
||||
case MSR_IA32_UCODE_WRITE:
|
||||
case 0x200 ... 0x2ff: /* MTRRs */
|
||||
break;
|
||||
case MSR_IA32_APICBASE:
|
||||
vcpu->apic_base = data;
|
||||
break;
|
||||
default:
|
||||
msr = find_msr_entry(vcpu, msr_index);
|
||||
if (!msr) {
|
||||
printk(KERN_ERR "kvm: unhandled wrmsr: 0x%x\n", msr_index);
|
||||
return 1;
|
||||
if (msr) {
|
||||
msr->data = data;
|
||||
break;
|
||||
}
|
||||
return kvm_set_msr_common(vcpu, msr_index, data);
|
||||
msr->data = data;
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user