diff options
Diffstat (limited to 'drivers/kvm/kvm_main.c')
-rw-r--r-- | drivers/kvm/kvm_main.c | 32 |
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 | } |
603 | EXPORT_SYMBOL_GPL(set_cr8); | 603 | EXPORT_SYMBOL_GPL(set_cr8); |
604 | 604 | ||
605 | unsigned long get_cr8(struct kvm_vcpu *vcpu) | ||
606 | { | ||
607 | return vcpu->cr8; | ||
608 | } | ||
609 | EXPORT_SYMBOL_GPL(get_cr8); | ||
610 | |||
611 | u64 kvm_get_apic_base(struct kvm_vcpu *vcpu) | ||
612 | { | ||
613 | return vcpu->apic_base; | ||
614 | } | ||
615 | EXPORT_SYMBOL_GPL(kvm_get_apic_base); | ||
616 | |||
617 | void kvm_set_apic_base(struct kvm_vcpu *vcpu, u64 data) | ||
618 | { | ||
619 | vcpu->apic_base = data; | ||
620 | } | ||
621 | EXPORT_SYMBOL_GPL(kvm_set_apic_base); | ||
622 | |||
605 | void fx_init(struct kvm_vcpu *vcpu) | 623 | void 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 | ||