This is the MMU root role vs. CPU mode split. While not a requirement in absolute terms for further hacking, it makes it much clearer to reason on whether the previous root is still valid. Paolo Paolo Bonzini (25): KVM: x86/mmu: avoid indirect call for get_cr3 KVM: x86/mmu: nested EPT cannot be used in SMM KVM: x86/mmu: constify uses of struct kvm_mmu_role_regs KVM: x86/mmu: pull computation of kvm_mmu_role_regs to kvm_init_mmu KVM: x86/mmu: rephrase unclear comment KVM: nVMX/nSVM: do not monkey-patch inject_page_fault callback KVM: x86/mmu: remove "bool base_only" arguments KVM: x86/mmu: split cpu_mode from mmu_role KVM: x86/mmu: do not recompute root level from kvm_mmu_role_regs KVM: x86/mmu: remove ept_ad field KVM: x86/mmu: remove kvm_calc_shadow_root_page_role_common KVM: x86/mmu: cleanup computation of MMU roles for two-dimensional paging KVM: x86/mmu: cleanup computation of MMU roles for shadow paging KVM: x86/mmu: store shadow EFER.NX in the MMU role KVM: x86/mmu: remove extended bits from mmu_role, rename field KVM: x86/mmu: rename kvm_mmu_role union KVM: x86/mmu: remove redundant bits from extended role KVM: x86/mmu: remove valid from extended role KVM: x86/mmu: simplify and/or inline computation of shadow MMU roles KVM: x86/mmu: pull CPU mode computation to kvm_init_mmu KVM: x86/mmu: replace shadow_root_level with root_role.level KVM: x86/mmu: replace root_level with cpu_mode.base.level KVM: x86/mmu: replace direct_map with root_role.direct KVM: x86/mmu: initialize constant-value fields just once KVM: x86/mmu: extract initialization of the page walking data arch/x86/include/asm/kvm_host.h | 25 +- arch/x86/kvm/mmu.h | 12 +- arch/x86/kvm/mmu/mmu.c | 479 +++++++++++++------------------- arch/x86/kvm/mmu/paging_tmpl.h | 16 +- arch/x86/kvm/mmu/tdp_mmu.c | 4 +- arch/x86/kvm/svm/nested.c | 13 +- arch/x86/kvm/svm/svm.c | 2 +- arch/x86/kvm/vmx/nested.c | 9 +- arch/x86/kvm/vmx/vmx.c | 2 +- arch/x86/kvm/x86.c | 31 ++- 10 files changed, 260 insertions(+), 333 deletions(-) -- 2.31.1