On Tue, Mar 15, 2022 at 6:45 PM Hou Wenlong <houwenlong.hwl@xxxxxxxxxxxx> wrote: > > Before Commit c3e5e415bc1e6 ("KVM: X86: Change kvm_sync_page() > to return true when remote flush is needed"), the return value > of kvm_sync_page() indicates whether the page is synced, and > kvm_mmu_get_page() would rebuild page when the sync fails. > But now, kvm_sync_page() returns false when the page is > synced and no tlb flushing is required, which leads to > rebuild page in kvm_mmu_get_page(). So return the return > value of mmu->sync_page() directly and check it in > kvm_mmu_get_page(). If the sync fails, the page will be > zapped and the invalid_list is not empty, so set flush as > true is accepted in mmu_sync_children(). > Good catch. Acked-by: Lai Jiangshan <jiangshanlai@xxxxxxxxx> > Fixes: c3e5e415bc1e6 ("KVM: X86: Change kvm_sync_page() to return true when remote flush is needed") > Signed-off-by: Hou Wenlong <houwenlong.hwl@xxxxxxxxxxxx> > --- > arch/x86/kvm/mmu/mmu.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > index 3b8da8b0745e..8efd165ee27c 100644 > --- a/arch/x86/kvm/mmu/mmu.c > +++ b/arch/x86/kvm/mmu/mmu.c > @@ -1866,17 +1866,14 @@ static void kvm_mmu_commit_zap_page(struct kvm *kvm, > &(_kvm)->arch.mmu_page_hash[kvm_page_table_hashfn(_gfn)]) \ > if ((_sp)->gfn != (_gfn) || (_sp)->role.direct) {} else > > -static bool kvm_sync_page(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, > +static int kvm_sync_page(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp, > struct list_head *invalid_list) The comments for FNAME(sync_page) can be copied here.