KVM: make kvm_mmu_zap_page() return the number of pages it actually freed.
PATCH 1/1 KVM: make kvm_mmu_zap_page() return the number of pages it actually freed.
Currently, kvm_mmu_zap_page() returning the number of freed children sp. This might confuse the caller, because caller don't know the actual freed number. Let's make kvm_mmu_zap_page() return the number of pages it actually freed.
--- arch/x86/kvm/mmu.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
arch/x86/kvm/mmu.c +3 -2
@@ -1503,6 +1503,8 @@ static int kvm_mmu_zap_page(struct kvm *kvm, struct kvm_mmu_page *sp)if (sp->unsync)kvm_unlink_unsync_page (kvm, sp);if (!sp->root_count) { +/* Count self */ + ret++;hlist_del (&sp->hash_link);kvm_mmu_free_page (kvm, sp); }else {
@@ -1539,7 +1541,6 @@ void kvm_mmu_change_mmu_pages(struct kvm *kvm, unsigned int kvm_nr_mmu_pages) page =container_of (kvm->arch.active_mmu_pages.prev, struct kvm_mmu_page, link); used_pages -=kvm_mmu_zap_page (kvm, page); - used_pages--; } kvm_nr_mmu_pages = used_pages; kvm->arch.n_free_mmu_pages =0 ;
@@ -2908,7 +2909,7 @@ static int kvm_mmu_remove_some_alloc_mmu_pages(struct kvm *kvm) page =container_of (kvm->arch.active_mmu_pages.prev, struct kvm_mmu_page, link); -return kvm_mmu_zap_page (kvm, page) +1 ; +return kvm_mmu_zap_page (kvm, page); }static int mmu_shrink (int nr_to_scan,gfp_t gfp_mask)
Signature · 1 line
1.6.5.2
Quoted 6 lines · Gui Jianfeng
Currently,
kvm_mmu_zap_page()returning the number of freed children sp. This might confuse the caller, because caller don't know the actual freed number. Let's makekvm_mmu_zap_page()return the number of pages it actually freed.
if (kvm_mmu_zap_page(kvm, sp))
goto restart;Needs to be updated.
Signature · 1 line
error compiling committee.c: too many arguments to function
Quoted 9 lines · Avi Kivity
Quoted 7 lines · Gui Jianfeng
Currently,
kvm_mmu_zap_page()returning the number of freed children sp. This might confuse the caller, because caller don't know the actual freed number. Let's makekvm_mmu_zap_page()return the number of pages it actually
freed.
Quoted 4 lines
if (kvm_mmu_zap_page(kvm, sp)) goto restart;Needs to be updated.
Hi Avi,
if kvm_mmu_zap_page() returns 1, we don't know whether the freed sp is the one we passes into or the child. So here just restart hash walk as long as kvm_mmu_zap_page() returning a positive number, although sometimes un-needed hash walk will happen. This fix gets code simpler, the idea comes from Marcelo.
Thanks,
Gui
Quoted 1 line
Quoted 15 lines · Gui Jianfeng
Quoted 13 lines · Avi Kivity
Quoted 8 lines · Gui Jianfeng
Currently,
kvm_mmu_zap_page()returning the number of freed children sp. This might confuse the caller, because caller don't know the actual freed number. Let's makekvm_mmu_zap_page()return the number of pages it actually
freed.if (kvm_mmu_zap_page(kvm, sp)) goto restart;
Quoted 9 lines
Quoted 2 lines
Needs to be updated.
Hi Avi,
if
kvm_mmu_zap_page()returns 1, we don't know whether the freed sp is the one we passes into or the child. So here just restart hash walk as long askvm_mmu_zap_page()returning a positive number, although sometimes un-needed hash walk will happen. This fix gets code simpler, the idea comes from Marcelo.
I see. Note this can invoke quadratic behaviour. I'll apply the patch, but we need to improve this area.
Signature · 1 line
error compiling committee.c: too many arguments to function