On Sun, Nov 21, 2021 at 9:05 PM Nikunj A. Dadhania <nikunj@xxxxxxx> wrote: > > > > On 11/20/2021 5:27 AM, David Matlack wrote: > > When dirty logging is enabled without initially-all-set, attempt to > > split all large pages in the memslot down to 4KB pages so that vCPUs > > do not have to take expensive write-protection faults to split large > > pages. > > > > Large page splitting is best-effort only. This commit only adds the > > support for the TDP MMU, and even there splitting may fail due to out > > of memory conditions. Failures to split a large page is fine from a > > correctness standpoint because we still always follow it up by write- > > protecting any remaining large pages. > > > > Signed-off-by: David Matlack <dmatlack@xxxxxxxxxx> > > > +int mmu_topup_split_caches(struct kvm *kvm) > > +{ > > + struct kvm_mmu_memory_caches *split_caches = &kvm->arch.split_caches; > > + int r; > > + > > + assert_split_caches_invariants(kvm); > > + > > + r = kvm_mmu_topup_memory_cache(&split_caches->page_header_cache, 1); > > + if (r) > > + goto out; > > + > > + r = kvm_mmu_topup_memory_cache(&split_caches->shadow_page_cache, 1); > > + if (r) > > + goto out; > > + > > + return 0; > > + > > +out: > > + pr_warn("Failed to top-up split caches. Will not split large pages.\n"); > > + return r; > > +} > > + > > +static void mmu_free_split_caches(struct kvm *kvm) > > +{ > > + assert_split_caches_invariants(kvm); > > + > > + kvm_mmu_free_memory_cache(&kvm->arch.split_caches.pte_list_desc_cache); > ^^^^^^^^^^^^^^ > I believe this should be page_header_cache. Oh wow, thanks for catching that. You are correct. Will fix in v1. > > > + kvm_mmu_free_memory_cache(&kvm->arch.split_caches.shadow_page_cache); > > +} > > Regards > Nikunj >