aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/kvm/kvm_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/kvm/kvm_main.c')
-rw-r--r--drivers/kvm/kvm_main.c32
1 files changed, 25 insertions, 7 deletions
diff --git a/drivers/kvm/kvm_main.c b/drivers/kvm/kvm_main.c
index 09a04bc9541d..f879efbefcdf 100644
--- a/drivers/kvm/kvm_main.c
+++ b/drivers/kvm/kvm_main.c
@@ -602,6 +602,24 @@ void set_cr8(struct kvm_vcpu *vcpu, unsigned long cr8)
602} 602}
603EXPORT_SYMBOL_GPL(set_cr8); 603EXPORT_SYMBOL_GPL(set_cr8);
604 604
605unsigned long get_cr8(struct kvm_vcpu *vcpu)
606{
607 return vcpu->cr8;
608}
609EXPORT_SYMBOL_GPL(get_cr8);
610
611u64 kvm_get_apic_base(struct kvm_vcpu *vcpu)
612{
613 return vcpu->apic_base;
614}
615EXPORT_SYMBOL_GPL(kvm_get_apic_base);
616
617void kvm_set_apic_base(struct kvm_vcpu *vcpu, u64 data)
618{
619 vcpu->apic_base = data;
620}
621EXPORT_SYMBOL_GPL(kvm_set_apic_base);
622
605void fx_init(struct kvm_vcpu *vcpu) 623void fx_init(struct kvm_vcpu *vcpu)
606{ 624{
607 unsigned after_mxcsr_mask; 625 unsigned after_mxcsr_mask;
@@ -1481,7 +1499,7 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata)
1481 data = 3; 1499 data = 3;
1482 break; 1500 break;
1483 case MSR_IA32_APICBASE: 1501 case MSR_IA32_APICBASE:
1484 data = vcpu->apic_base; 1502 data = kvm_get_apic_base(vcpu);
1485 break; 1503 break;
1486 case MSR_IA32_MISC_ENABLE: 1504 case MSR_IA32_MISC_ENABLE:
1487 data = vcpu->ia32_misc_enable_msr; 1505 data = vcpu->ia32_misc_enable_msr;
@@ -1559,7 +1577,7 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data)
1559 case 0x200 ... 0x2ff: /* MTRRs */ 1577 case 0x200 ... 0x2ff: /* MTRRs */
1560 break; 1578 break;
1561 case MSR_IA32_APICBASE: 1579 case MSR_IA32_APICBASE:
1562 vcpu->apic_base = data; 1580 kvm_set_apic_base(vcpu, data);
1563 break; 1581 break;
1564 case MSR_IA32_MISC_ENABLE: 1582 case MSR_IA32_MISC_ENABLE:
1565 vcpu->ia32_misc_enable_msr = data; 1583 vcpu->ia32_misc_enable_msr = data;
@@ -1865,7 +1883,7 @@ static int kvm_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
1865 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved); 1883 sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
1866 1884
1867 /* re-sync apic's tpr */ 1885 /* re-sync apic's tpr */
1868 vcpu->cr8 = kvm_run->cr8; 1886 set_cr8(vcpu, kvm_run->cr8);
1869 1887
1870 if (vcpu->pio.cur_count) { 1888 if (vcpu->pio.cur_count) {
1871 r = complete_pio(vcpu); 1889 r = complete_pio(vcpu);
@@ -2013,9 +2031,9 @@ static int kvm_vcpu_ioctl_get_sregs(struct kvm_vcpu *vcpu,
2013 sregs->cr2 = vcpu->cr2; 2031 sregs->cr2 = vcpu->cr2;
2014 sregs->cr3 = vcpu->cr3; 2032 sregs->cr3 = vcpu->cr3;
2015 sregs->cr4 = vcpu->cr4; 2033 sregs->cr4 = vcpu->cr4;
2016 sregs->cr8 = vcpu->cr8; 2034 sregs->cr8 = get_cr8(vcpu);
2017 sregs->efer = vcpu->shadow_efer; 2035 sregs->efer = vcpu->shadow_efer;
2018 sregs->apic_base = vcpu->apic_base; 2036 sregs->apic_base = kvm_get_apic_base(vcpu);
2019 2037
2020 memcpy(sregs->interrupt_bitmap, vcpu->irq_pending, 2038 memcpy(sregs->interrupt_bitmap, vcpu->irq_pending,
2021 sizeof sregs->interrupt_bitmap); 2039 sizeof sregs->interrupt_bitmap);
@@ -2051,13 +2069,13 @@ static int kvm_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
2051 mmu_reset_needed |= vcpu->cr3 != sregs->cr3; 2069 mmu_reset_needed |= vcpu->cr3 != sregs->cr3;
2052 vcpu->cr3 = sregs->cr3; 2070 vcpu->cr3 = sregs->cr3;
2053 2071
2054 vcpu->cr8 = sregs->cr8; 2072 set_cr8(vcpu, sregs->cr8);
2055 2073
2056 mmu_reset_needed |= vcpu->shadow_efer != sregs->efer; 2074 mmu_reset_needed |= vcpu->shadow_efer != sregs->efer;
2057#ifdef CONFIG_X86_64 2075#ifdef CONFIG_X86_64
2058 kvm_arch_ops->set_efer(vcpu, sregs->efer); 2076 kvm_arch_ops->set_efer(vcpu, sregs->efer);
2059#endif 2077#endif
2060 vcpu->apic_base = sregs->apic_base; 2078 kvm_set_apic_base(vcpu, sregs->apic_base);
2061 2079
2062 kvm_arch_ops->decache_cr4_guest_bits(vcpu); 2080 kvm_arch_ops->decache_cr4_guest_bits(vcpu);
2063 2081