v2: Based on Paolo's suggestion, kept the common code as much as possible by introducing memslot_valid_for_gpte(). Note: instead of joining all checks by boolean operators, splitted the no_dirty_log case off to be a separate if-check because it is checking clearly different thing than the rest. See patch 4 for details. In page fault handlers, both mapping_level_dirty_bitmap() and mapping_level() do a memory slot search, binary search, through kvm_vcpu_gfn_to_memslot(), which may not be negligible especially for virtual machines with many memory slots. With a bit of cleanup effort, the patch set reduces this overhead. Takuya Takuya Yoshikawa (5): KVM: x86: MMU: Make force_pt_level bool KVM: x86: MMU: Simplify force_pt_level calculation code in FNAME(page_fault)() KVM: x86: MMU: Merge mapping_level_dirty_bitmap() into mapping_level() KVM: x86: MMU: Remove mapping_level_dirty_bitmap() KVM: x86: MMU: Eliminate an extra memory slot search in mapping_level() arch/x86/kvm/mmu.c | 70 +++++++++++++++++++++++++++------------------- arch/x86/kvm/paging_tmpl.h | 19 ++++++------- 2 files changed, 50 insertions(+), 39 deletions(-) -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html