Skip to content

Commit 32cad84

Browse files
Xiao Guangrongavikivity
Xiao Guangrong
authored andcommitted
KVM: do not release the error page
After commit a276632, the error page 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 <[email protected]> Signed-off-by: Avi Kivity <[email protected]>
1 parent cb9aaa3 commit 32cad84

File tree

8 files changed

+12
-19
lines changed

8 files changed

+12
-19
lines changed

arch/powerpc/kvm/44x_tlb.c

-1
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,6 @@ void kvmppc_mmu_map(struct kvm_vcpu *vcpu, u64 gvaddr, gpa_t gpaddr,
319319
if (is_error_page(new_page)) {
320320
printk(KERN_ERR "Couldn't get guest page for gfn %llx!\n",
321321
(unsigned long long)gfn);
322-
kvm_release_page_clean(new_page);
323322
return;
324323
}
325324
hpaddr = page_to_phys(new_page);

arch/powerpc/kvm/book3s_pr.c

+1-3
Original file line numberDiff line numberDiff line change
@@ -242,10 +242,8 @@ static void kvmppc_patch_dcbz(struct kvm_vcpu *vcpu, struct kvmppc_pte *pte)
242242
int i;
243243

244244
hpage = gfn_to_page(vcpu->kvm, pte->raddr >> PAGE_SHIFT);
245-
if (is_error_page(hpage)) {
246-
kvm_release_page_clean(hpage);
245+
if (is_error_page(hpage))
247246
return;
248-
}
249247

250248
hpage_offset = pte->raddr & ~PAGE_MASK;
251249
hpage_offset &= ~0xFFFULL;

arch/x86/kvm/svm.c

-1
Original file line numberDiff line numberDiff line change
@@ -2105,7 +2105,6 @@ static void *nested_svm_map(struct vcpu_svm *svm, u64 gpa, struct page **_page)
21052105
return kmap(page);
21062106

21072107
error:
2108-
kvm_release_page_clean(page);
21092108
kvm_inject_gp(&svm->vcpu, 0);
21102109

21112110
return NULL;

arch/x86/kvm/vmx.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -596,10 +596,9 @@ static inline struct vmcs12 *get_vmcs12(struct kvm_vcpu *vcpu)
596596
static struct page *nested_get_page(struct kvm_vcpu *vcpu, gpa_t addr)
597597
{
598598
struct page *page = gfn_to_page(vcpu->kvm, addr >> PAGE_SHIFT);
599-
if (is_error_page(page)) {
600-
kvm_release_page_clean(page);
599+
if (is_error_page(page))
601600
return NULL;
602-
}
601+
603602
return page;
604603
}
605604

arch/x86/kvm/x86.c

+3-6
Original file line numberDiff line numberDiff line change
@@ -1639,10 +1639,9 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data)
16391639
vcpu->arch.time_page =
16401640
gfn_to_page(vcpu->kvm, data >> PAGE_SHIFT);
16411641

1642-
if (is_error_page(vcpu->arch.time_page)) {
1643-
kvm_release_page_clean(vcpu->arch.time_page);
1642+
if (is_error_page(vcpu->arch.time_page))
16441643
vcpu->arch.time_page = NULL;
1645-
}
1644+
16461645
break;
16471646
}
16481647
case MSR_KVM_ASYNC_PF_EN:
@@ -3945,10 +3944,8 @@ static int emulator_cmpxchg_emulated(struct x86_emulate_ctxt *ctxt,
39453944
goto emul_write;
39463945

39473946
page = gfn_to_page(vcpu->kvm, gpa >> PAGE_SHIFT);
3948-
if (is_error_page(page)) {
3949-
kvm_release_page_clean(page);
3947+
if (is_error_page(page))
39503948
goto emul_write;
3951-
}
39523949

39533950
kaddr = kmap_atomic(page);
39543951
kaddr += offset_in_page(gpa);

include/linux/kvm_host.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -457,7 +457,7 @@ pfn_t gfn_to_pfn(struct kvm *kvm, gfn_t gfn);
457457
pfn_t gfn_to_pfn_prot(struct kvm *kvm, gfn_t gfn, bool write_fault,
458458
bool *writable);
459459
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);
461461
void kvm_release_pfn_clean(pfn_t pfn);
462462
void kvm_set_pfn_dirty(pfn_t pfn);
463463
void kvm_set_pfn_accessed(pfn_t pfn);

virt/kvm/async_pf.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ void kvm_clear_async_pf_completion_queue(struct kvm_vcpu *vcpu)
111111
list_entry(vcpu->async_pf.done.next,
112112
typeof(*work), link);
113113
list_del(&work->link);
114-
if (work->page)
114+
if (!is_error_page(work->page))
115115
kvm_release_page_clean(work->page);
116116
kmem_cache_free(async_pf_cache, work);
117117
}
@@ -138,7 +138,7 @@ void kvm_check_async_pf_completion(struct kvm_vcpu *vcpu)
138138

139139
list_del(&work->queue);
140140
vcpu->async_pf.queued--;
141-
if (work->page)
141+
if (!is_error_page(work->page))
142142
kvm_release_page_clean(work->page);
143143
kmem_cache_free(async_pf_cache, work);
144144
}

virt/kvm/kvm_main.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -1186,8 +1186,9 @@ EXPORT_SYMBOL_GPL(gfn_to_page);
11861186

11871187
void kvm_release_page_clean(struct page *page)
11881188
{
1189-
if (!is_error_page(page))
1190-
kvm_release_pfn_clean(page_to_pfn(page));
1189+
WARN_ON(is_error_page(page));
1190+
1191+
kvm_release_pfn_clean(page_to_pfn(page));
11911192
}
11921193
EXPORT_SYMBOL_GPL(kvm_release_page_clean);
11931194

0 commit comments

Comments
 (0)