diff options
-rw-r--r-- | arch/powerpc/kvm/44x_tlb.c | 1 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_pr.c | 4 | ||||
-rw-r--r-- | arch/x86/kvm/svm.c | 1 | ||||
-rw-r--r-- | arch/x86/kvm/vmx.c | 5 | ||||
-rw-r--r-- | arch/x86/kvm/x86.c | 9 | ||||
-rw-r--r-- | include/linux/kvm_host.h | 2 | ||||
-rw-r--r-- | virt/kvm/async_pf.c | 4 | ||||
-rw-r--r-- | virt/kvm/kvm_main.c | 5 |
8 files changed, 12 insertions, 19 deletions
diff --git a/arch/powerpc/kvm/44x_tlb.c b/arch/powerpc/kvm/44x_tlb.c index 33aa715dab28..5dd3ab469976 100644 --- a/arch/powerpc/kvm/44x_tlb.c +++ b/arch/powerpc/kvm/44x_tlb.c | |||
@@ -319,7 +319,6 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gpa_t gpaddr, | |||
319 | if (is_error_page(new_page)) { | 319 | if (is_error_page(new_page)) { |
320 | printk(KERN_ERR "Couldn't get guest page for gfn %llx!\n", | 320 | printk(KERN_ERR "Couldn't get guest page for gfn %llx!\n", |
321 | (unsigned long long)gfn); | 321 | (unsigned long long)gfn); |
322 | kvm_release_page_clean(new_page); | ||
323 | return; | 322 | return; |
324 | } | 323 | } |
325 | hpaddr = page_to_phys(new_page); | 324 | hpaddr = page_to_phys(new_page); |
diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c index a1baec340f7e..05c28f59f77f 100644 --- a/arch/powerpc/kvm/book3s_pr.c +++ b/arch/powerpc/kvm/book3s_pr.c | |||
@@ -242,10 +242,8 @@ static void kvmppc_patch_dcbz(struct kvm_vcpu *vcpu, struct kvmppc_pte *pte) | |||
242 | int i; | 242 | int i; |
243 | 243 | ||
244 | hpage = gfn_to_page(vcpu->kvm, pte->raddr >> PAGE_SHIFT); | 244 | hpage = gfn_to_page(vcpu->kvm, pte->raddr >> PAGE_SHIFT); |
245 | if (is_error_page(hpage)) { | 245 | if (is_error_page(hpage)) |
246 | kvm_release_page_clean(hpage); | ||
247 | return; | 246 | return; |
248 | } | ||
249 | 247 | ||
250 | hpage_offset = pte->raddr & ~PAGE_MASK; | 248 | hpage_offset = pte->raddr & ~PAGE_MASK; |
251 | hpage_offset &= ~0xFFFULL; | 249 | hpage_offset &= ~0xFFFULL; |
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 687d0c30e559..31be4a557447 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
@@ -2105,7 +2105,6 @@ static void *nested_svm_map(struct vcpu_svm *svm, u64 gpa, struct page **_page) | |||
2105 | return kmap(page); | 2105 | return kmap(page); |
2106 | 2106 | ||
2107 | error: | 2107 | error: |
2108 | kvm_release_page_clean(page); | ||
2109 | kvm_inject_gp(&svm->vcpu, 0); | 2108 | kvm_inject_gp(&svm->vcpu, 0); |
2110 | 2109 | ||
2111 | return NULL; | 2110 | return NULL; |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index d6e4cbc42b8e..cc8ad9836927 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -596,10 +596,9 @@ static inline struct vmcs12 *get_vmcs12(struct kvm_vcpu *vcpu) | |||
596 | static struct page *nested_get_page(struct kvm_vcpu *vcpu, gpa_t addr) | 596 | static struct page *nested_get_page(struct kvm_vcpu *vcpu, gpa_t addr) |
597 | { | 597 | { |
598 | struct page *page = gfn_to_page(vcpu->kvm, addr >> PAGE_SHIFT); | 598 | struct page *page = gfn_to_page(vcpu->kvm, addr >> PAGE_SHIFT); |
599 | if (is_error_page(page)) { | 599 | if (is_error_page(page)) |
600 | kvm_release_page_clean(page); | ||
601 | return NULL; | 600 | return NULL; |
602 | } | 601 | |
603 | return page; | 602 | return page; |
604 | } | 603 | } |
605 | 604 | ||
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index ebf2109318e0..7953a9e7cb17 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -1639,10 +1639,9 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data) | |||
1639 | vcpu->arch.time_page = | 1639 | vcpu->arch.time_page = |
1640 | gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT); | 1640 | gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT); |
1641 | 1641 | ||
1642 | if (is_error_page(vcpu->arch.time_page)) { | 1642 | if (is_error_page(vcpu->arch.time_page)) |
1643 | kvm_release_page_clean(vcpu->arch.time_page); | ||
1644 | vcpu->arch.time_page = NULL; | 1643 | vcpu->arch.time_page = NULL; |
1645 | } | 1644 | |
1646 | break; | 1645 | break; |
1647 | } | 1646 | } |
1648 | case MSR_KVM_ASYNC_PF_EN: | 1647 | case MSR_KVM_ASYNC_PF_EN: |
@@ -3945,10 +3944,8 @@ static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt, | |||
3945 | goto emul_write; | 3944 | goto emul_write; |
3946 | 3945 | ||
3947 | page = gfn_to_page(vcpu->kvm, gpa >> PAGE_SHIFT); | 3946 | page = gfn_to_page(vcpu->kvm, gpa >> PAGE_SHIFT); |
3948 | if (is_error_page(page)) { | 3947 | if (is_error_page(page)) |
3949 | kvm_release_page_clean(page); | ||
3950 | goto emul_write; | 3948 | goto emul_write; |
3951 | } | ||
3952 | 3949 | ||
3953 | kaddr = kmap_atomic(page); | 3950 | kaddr = kmap_atomic(page); |
3954 | kaddr += offset_in_page(gpa); | 3951 | kaddr += offset_in_page(gpa); |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index ce7c32950f4e..07226f820e6c 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
@@ -457,7 +457,7 @@ pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn); | |||
457 | pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault, | 457 | pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault, |
458 | bool *writable); | 458 | bool *writable); |
459 | pfn_t gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn); | 459 | pfn_t gfn_to_pfn_memslot(struct kvm_memory_slot *slot, gfn_t gfn); |
460 | void kvm_release_pfn_dirty(pfn_t); | 460 | void kvm_release_pfn_dirty(pfn_t pfn); |
461 | void kvm_release_pfn_clean(pfn_t pfn); | 461 | void kvm_release_pfn_clean(pfn_t pfn); |
462 | void kvm_set_pfn_dirty(pfn_t pfn); | 462 | void kvm_set_pfn_dirty(pfn_t pfn); |
463 | void kvm_set_pfn_accessed(pfn_t pfn); | 463 | void kvm_set_pfn_accessed(pfn_t pfn); |
diff --git a/virt/kvm/async_pf.c b/virt/kvm/async_pf.c index 56f553391896..ea475cd03511 100644 --- a/virt/kvm/async_pf.c +++ b/virt/kvm/async_pf.c | |||
@@ -111,7 +111,7 @@ void kvm_clear_async_pf_completion_queue(struct kvm_vcpu *vcpu) | |||
111 | list_entry(vcpu->async_pf.done.next, | 111 | list_entry(vcpu->async_pf.done.next, |
112 | typeof(*work), link); | 112 | typeof(*work), link); |
113 | list_del(&work->link); | 113 | list_del(&work->link); |
114 | if (work->page) | 114 | if (!is_error_page(work->page)) |
115 | kvm_release_page_clean(work->page); | 115 | kvm_release_page_clean(work->page); |
116 | kmem_cache_free(async_pf_cache, work); | 116 | kmem_cache_free(async_pf_cache, work); |
117 | } | 117 | } |
@@ -138,7 +138,7 @@ void kvm_check_async_pf_completion(struct kvm_vcpu *vcpu) | |||
138 | 138 | ||
139 | list_del(&work->queue); | 139 | list_del(&work->queue); |
140 | vcpu->async_pf.queued--; | 140 | vcpu->async_pf.queued--; |
141 | if (work->page) | 141 | if (!is_error_page(work->page)) |
142 | kvm_release_page_clean(work->page); | 142 | kvm_release_page_clean(work->page); |
143 | kmem_cache_free(async_pf_cache, work); | 143 | kmem_cache_free(async_pf_cache, work); |
144 | } | 144 | } |
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index eafba99d1070..a2e85af847c1 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c | |||
@@ -1186,8 +1186,9 @@ EXPORT_SYMBOL_GPL(gfn_to_page); | |||
1186 | 1186 | ||
1187 | void kvm_release_page_clean(struct page *page) | 1187 | void kvm_release_page_clean(struct page *page) |
1188 | { | 1188 | { |
1189 | if (!is_error_page(page)) | 1189 | WARN_ON(is_error_page(page)); |
1190 | kvm_release_pfn_clean(page_to_pfn(page)); | 1190 | |
1191 | kvm_release_pfn_clean(page_to_pfn(page)); | ||
1191 | } | 1192 | } |
1192 | EXPORT_SYMBOL_GPL(kvm_release_page_clean); | 1193 | EXPORT_SYMBOL_GPL(kvm_release_page_clean); |
1193 | 1194 | ||