On Fri, Nov 19, 2021, David Matlack wrote: > When splitting large pages we need to update the pages stats to reflect > all of the new pages at the lower level. We do not need to change the > page stats for the large page that was removed as that is already > handled tdp_mmu_set_spte_atomic. > > Signed-off-by: David Matlack <dmatlack@xxxxxxxxxx> > --- > arch/x86/kvm/mmu/tdp_mmu.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/mmu/tdp_mmu.c b/arch/x86/kvm/mmu/tdp_mmu.c > index 8f60d942c789..4c313613a939 100644 > --- a/arch/x86/kvm/mmu/tdp_mmu.c > +++ b/arch/x86/kvm/mmu/tdp_mmu.c > @@ -1299,7 +1299,12 @@ static bool tdp_mmu_split_large_page_atomic(struct kvm *kvm, struct tdp_iter *it > child_sp->spt[i] = child_spte; > } > > - return tdp_mmu_install_sp_atomic(kvm, iter, child_sp, false); > + if (!tdp_mmu_install_sp_atomic(kvm, iter, child_sp, false)) > + return false; > + > + kvm_update_page_stats(kvm, level - 1, PT64_ENT_PER_PAGE); This should be done when tdp_mmu_split_large_page_atomic() is introduced, otherwise this series is effectively introducing a bug and then fixing it. At a very quick glance, I don't see anything that would prevent squashing this in. > + > + return true; > } > > static void tdp_mmu_split_large_pages_root(struct kvm *kvm, struct kvm_mmu_page *root, > -- > 2.34.0.rc2.393.gf8c9666880-goog >