aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kvm/x86.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 0fa9c84e36cb..dc11b4f98577 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1869,19 +1869,21 @@ static int set_msr_hyperv(struct kvm_vcpu *vcpu, u32 msr, u64 data)
1869{ 1869{
1870 switch (msr) { 1870 switch (msr) {
1871 case HV_X64_MSR_APIC_ASSIST_PAGE: { 1871 case HV_X64_MSR_APIC_ASSIST_PAGE: {
1872 u64 gfn;
1872 unsigned long addr; 1873 unsigned long addr;
1873 1874
1874 if (!(data & HV_X64_MSR_APIC_ASSIST_PAGE_ENABLE)) { 1875 if (!(data & HV_X64_MSR_APIC_ASSIST_PAGE_ENABLE)) {
1875 vcpu->arch.hv_vapic = data; 1876 vcpu->arch.hv_vapic = data;
1876 break; 1877 break;
1877 } 1878 }
1878 addr = gfn_to_hva(vcpu->kvm, data >> 1879 gfn = data >> HV_X64_MSR_APIC_ASSIST_PAGE_ADDRESS_SHIFT;
1879 HV_X64_MSR_APIC_ASSIST_PAGE_ADDRESS_SHIFT); 1880 addr = gfn_to_hva(vcpu->kvm, gfn);
1880 if (kvm_is_error_hva(addr)) 1881 if (kvm_is_error_hva(addr))
1881 return 1; 1882 return 1;
1882 if (__clear_user((void __user *)addr, PAGE_SIZE)) 1883 if (__clear_user((void __user *)addr, PAGE_SIZE))
1883 return 1; 1884 return 1;
1884 vcpu->arch.hv_vapic = data; 1885 vcpu->arch.hv_vapic = data;
1886 mark_page_dirty(vcpu->kvm, gfn);
1885 break; 1887 break;
1886 } 1888 }
1887 case HV_X64_MSR_EOI: 1889 case HV_X64_MSR_EOI: