Commit cb9aaa30b133574b646d9d4766ef08a843211393

Authored by Xiao Guangrong
Committed by Avi Kivity
1 parent 6cede2e679

KVM: do not release the error pfn

After commit a2766325cf9f9, the error pfn is replaced by the
error code, it need not be released anymore

[ The patch has been compiling tested for powerpc ]

Signed-off-by: Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>
Signed-off-by: Avi Kivity <avi@redhat.com>

Showing 6 changed files with 14 additions and 21 deletions Side-by-side Diff

arch/powerpc/kvm/e500_tlb.c
... ... @@ -524,7 +524,6 @@
524 524 if (is_error_pfn(pfn)) {
525 525 printk(KERN_ERR "Couldn't get real page for gfn %lx!\n",
526 526 (long)gfn);
527   - kvm_release_pfn_clean(pfn);
528 527 return;
529 528 }
530 529  
... ... @@ -2496,7 +2496,9 @@
2496 2496 rmap_recycle(vcpu, sptep, gfn);
2497 2497 }
2498 2498 }
2499   - kvm_release_pfn_clean(pfn);
  2499 +
  2500 + if (!is_error_pfn(pfn))
  2501 + kvm_release_pfn_clean(pfn);
2500 2502 }
2501 2503  
2502 2504 static void nonpaging_new_cr3(struct kvm_vcpu *vcpu)
... ... @@ -2648,7 +2650,6 @@
2648 2650  
2649 2651 static int kvm_handle_bad_page(struct kvm_vcpu *vcpu, gfn_t gfn, pfn_t pfn)
2650 2652 {
2651   - kvm_release_pfn_clean(pfn);
2652 2653 if (pfn == KVM_PFN_ERR_HWPOISON) {
2653 2654 kvm_send_hwpoison_signal(gfn_to_hva(vcpu->kvm, gfn), current);
2654 2655 return 0;
... ... @@ -3272,8 +3273,6 @@
3272 3273  
3273 3274 if (!async)
3274 3275 return false; /* *pfn has correct page already */
3275   -
3276   - kvm_release_pfn_clean(*pfn);
3277 3276  
3278 3277 if (!prefault && can_do_async_pf(vcpu)) {
3279 3278 trace_kvm_try_async_get_page(gva, gfn);
arch/x86/kvm/mmu_audit.c
... ... @@ -116,10 +116,8 @@
116 116 gfn = kvm_mmu_page_get_gfn(sp, sptep - sp->spt);
117 117 pfn = gfn_to_pfn_atomic(vcpu->kvm, gfn);
118 118  
119   - if (is_error_pfn(pfn)) {
120   - kvm_release_pfn_clean(pfn);
  119 + if (is_error_pfn(pfn))
121 120 return;
122   - }
123 121  
124 122 hpa = pfn << PAGE_SHIFT;
125 123 if ((*sptep & PT64_BASE_ADDR_MASK) != hpa)
arch/x86/kvm/paging_tmpl.h
... ... @@ -370,10 +370,8 @@
370 370 pgprintk("%s: gpte %llx spte %p\n", __func__, (u64)gpte, spte);
371 371 pte_access = sp->role.access & FNAME(gpte_access)(vcpu, gpte, true);
372 372 pfn = gfn_to_pfn_atomic(vcpu->kvm, gpte_to_gfn(gpte));
373   - if (mmu_invalid_pfn(pfn)) {
374   - kvm_release_pfn_clean(pfn);
  373 + if (mmu_invalid_pfn(pfn))
375 374 return;
376   - }
377 375  
378 376 /*
379 377 * we call mmu_set_spte() with host_writable = true because that
380 378  
... ... @@ -448,10 +446,8 @@
448 446 gfn = gpte_to_gfn(gpte);
449 447 pfn = pte_prefetch_gfn_to_pfn(vcpu, gfn,
450 448 pte_access & ACC_WRITE_MASK);
451   - if (mmu_invalid_pfn(pfn)) {
452   - kvm_release_pfn_clean(pfn);
  449 + if (mmu_invalid_pfn(pfn))
453 450 break;
454   - }
455 451  
456 452 mmu_set_spte(vcpu, spte, sp->role.access, pte_access, 0, 0,
457 453 NULL, PT_PAGE_TABLE_LEVEL, gfn,
... ... @@ -107,7 +107,6 @@
107 107 */
108 108 pfn = kvm_pin_pages(slot, gfn, page_size);
109 109 if (is_error_pfn(pfn)) {
110   - kvm_release_pfn_clean(pfn);
111 110 gfn += 1;
112 111 continue;
113 112 }
... ... @@ -102,9 +102,6 @@
102 102  
103 103 bool kvm_is_mmio_pfn(pfn_t pfn)
104 104 {
105   - if (is_error_pfn(pfn))
106   - return false;
107   -
108 105 if (pfn_valid(pfn)) {
109 106 int reserved;
110 107 struct page *tail = pfn_to_page(pfn);
111 108  
112 109  
... ... @@ -1165,10 +1162,13 @@
1165 1162  
1166 1163 static struct page *kvm_pfn_to_page(pfn_t pfn)
1167 1164 {
1168   - WARN_ON(kvm_is_mmio_pfn(pfn));
  1165 + if (is_error_pfn(pfn))
  1166 + return KVM_ERR_PTR_BAD_PAGE;
1169 1167  
1170   - if (is_error_pfn(pfn) || kvm_is_mmio_pfn(pfn))
  1168 + if (kvm_is_mmio_pfn(pfn)) {
  1169 + WARN_ON(1);
1171 1170 return KVM_ERR_PTR_BAD_PAGE;
  1171 + }
1172 1172  
1173 1173 return pfn_to_page(pfn);
1174 1174 }
... ... @@ -1193,7 +1193,9 @@
1193 1193  
1194 1194 void kvm_release_pfn_clean(pfn_t pfn)
1195 1195 {
1196   - if (!is_error_pfn(pfn) && !kvm_is_mmio_pfn(pfn))
  1196 + WARN_ON(is_error_pfn(pfn));
  1197 +
  1198 + if (!kvm_is_mmio_pfn(pfn))
1197 1199 put_page(pfn_to_page(pfn));
1198 1200 }
1199 1201 EXPORT_SYMBOL_GPL(kvm_release_pfn_clean);