Message ID | 20220422210546.458943-2-dmatlack@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | KVM: Extend Eager Page Splitting to the shadow MMU | expand |
On 2022/4/23 05:05, David Matlack wrote: > Commit fb58a9c345f6 ("KVM: x86/mmu: Optimize MMU page cache lookup for > fully direct MMUs") skipped the unsync checks and write flood clearing > for full direct MMUs. We can extend this further to skip the checks for > all direct shadow pages. Direct shadow pages in indirect MMUs (i.e. > shadow paging) are used when shadowing a guest huge page with smaller > pages. Such direct shadow pages, like their counterparts in fully direct > MMUs, are never marked unsynced or have a non-zero write-flooding count. > > Checking sp->role.direct also generates better code than checking > direct_map because, due to register pressure, direct_map has to get > shoved onto the stack and then pulled back off. > > No functional change intended. > > Reviewed-by: Sean Christopherson <seanjc@google.com> > Reviewed-by: Peter Xu <peterx@redhat.com> > Signed-off-by: David Matlack <dmatlack@google.com> Reviewed-by: Lai Jiangshan <jiangshanlai@gmail.com>
diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c index 69a30d6d1e2b..3de4cce317e4 100644 --- a/arch/x86/kvm/mmu/mmu.c +++ b/arch/x86/kvm/mmu/mmu.c @@ -2028,7 +2028,6 @@ static struct kvm_mmu_page *kvm_mmu_get_page(struct kvm_vcpu *vcpu, int direct, unsigned int access) { - bool direct_mmu = vcpu->arch.mmu->root_role.direct; union kvm_mmu_page_role role; struct hlist_head *sp_list; unsigned quadrant; @@ -2070,7 +2069,8 @@ static struct kvm_mmu_page *kvm_mmu_get_page(struct kvm_vcpu *vcpu, continue; } - if (direct_mmu) + /* unsync and write-flooding only apply to indirect SPs. */ + if (sp->role.direct) goto trace_get_page; if (sp->unsync) {