On Mon, Aug 23, 2010 at 07:11:11PM +0800, Xiaotian Feng wrote: > On Mon, Aug 23, 2010 at 6:27 PM, Avi Kivity <avi@xxxxxxxxxx> wrote: > > On 08/23/2010 01:22 PM, Avi Kivity wrote: > >> > >> > >> I see a lot of soft lockups with this patchset: > > > > This is running the emulator.flat test case, with shadow paging. This test > > triggers a lot (millions) of mmu mode switches. > > > > Does following patch fix your issue? > > Latest kvm mmu_shrink code rework makes kernel changes > kvm->arch.n_used_mmu_pages/ > kvm->arch.n_max_mmu_pages at kvm_mmu_free_page/kvm_mmu_alloc_page, > which is called > by kvm_mmu_commit_zap_page. So the kvm->arch.n_used_mmu_pages or > kvm_mmu_available_pages(vcpu->kvm) is unchanged after kvm_mmu_commit_zap_page(), > This caused kvm_mmu_change_mmu_pages/__kvm_mmu_free_some_pages looping forever. > Moving kvm_mmu_commit_zap_page would make the while loop performs as normal. > > --- > diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c > index f52a965..7e09a21 100644 > --- a/arch/x86/kvm/mmu.c > +++ b/arch/x86/kvm/mmu.c > @@ -1726,8 +1726,8 @@ void kvm_mmu_change_mmu_pages(struct kvm *kvm, > unsigned int goal_nr_mmu_pages) > struct kvm_mmu_page, link); > kvm_mmu_prepare_zap_page(kvm, page, > &invalid_list); > + kvm_mmu_commit_zap_page(kvm, &invalid_list); > } > - kvm_mmu_commit_zap_page(kvm, &invalid_list); > goal_nr_mmu_pages = kvm->arch.n_used_mmu_pages; > } > > @@ -2976,9 +2976,9 @@ void __kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu) > sp = container_of(vcpu->kvm->arch.active_mmu_pages.prev, > struct kvm_mmu_page, link); > kvm_mmu_prepare_zap_page(vcpu->kvm, sp, &invalid_list); > + kvm_mmu_commit_zap_page(vcpu->kvm, &invalid_list); > ++vcpu->kvm->stat.mmu_recycled; > } > - kvm_mmu_commit_zap_page(vcpu->kvm, &invalid_list); > } > > int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t cr2, u32 error_code) Please resend with a signed-off-by, and proper subject for the patch. Thanks -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html