Commit cb9aaa30b133574b646d9d4766ef08a843211393
Committed by
Avi Kivity
1 parent
6cede2e679
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
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
arch/x86/kvm/mmu.c
... | ... | @@ -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, |
virt/kvm/iommu.c
virt/kvm/kvm_main.c
... | ... | @@ -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); |