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. > + kvm_mmu_free_memory_cache(&kvm->arch.split_caches.shadow_page_cache); > +} Regards Nikunj