diff options
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r-- | arch/x86/kvm/mmu.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index 106d4a029a8a..7a69cf053711 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -3974,19 +3974,19 @@ static inline bool is_last_gpte(struct kvm_mmu *mmu, | |||
3974 | unsigned level, unsigned gpte) | 3974 | unsigned level, unsigned gpte) |
3975 | { | 3975 | { |
3976 | /* | 3976 | /* |
3977 | * PT_PAGE_TABLE_LEVEL always terminates. The RHS has bit 7 set | ||
3978 | * iff level <= PT_PAGE_TABLE_LEVEL, which for our purpose means | ||
3979 | * level == PT_PAGE_TABLE_LEVEL; set PT_PAGE_SIZE_MASK in gpte then. | ||
3980 | */ | ||
3981 | gpte |= level - PT_PAGE_TABLE_LEVEL - 1; | ||
3982 | |||
3983 | /* | ||
3984 | * The RHS has bit 7 set iff level < mmu->last_nonleaf_level. | 3977 | * The RHS has bit 7 set iff level < mmu->last_nonleaf_level. |
3985 | * If it is clear, there are no large pages at this level, so clear | 3978 | * If it is clear, there are no large pages at this level, so clear |
3986 | * PT_PAGE_SIZE_MASK in gpte if that is the case. | 3979 | * PT_PAGE_SIZE_MASK in gpte if that is the case. |
3987 | */ | 3980 | */ |
3988 | gpte &= level - mmu->last_nonleaf_level; | 3981 | gpte &= level - mmu->last_nonleaf_level; |
3989 | 3982 | ||
3983 | /* | ||
3984 | * PT_PAGE_TABLE_LEVEL always terminates. The RHS has bit 7 set | ||
3985 | * iff level <= PT_PAGE_TABLE_LEVEL, which for our purpose means | ||
3986 | * level == PT_PAGE_TABLE_LEVEL; set PT_PAGE_SIZE_MASK in gpte then. | ||
3987 | */ | ||
3988 | gpte |= level - PT_PAGE_TABLE_LEVEL - 1; | ||
3989 | |||
3990 | return gpte & PT_PAGE_SIZE_MASK; | 3990 | return gpte & PT_PAGE_SIZE_MASK; |
3991 | } | 3991 | } |
3992 | 3992 | ||
@@ -4555,6 +4555,7 @@ void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly, | |||
4555 | 4555 | ||
4556 | update_permission_bitmask(vcpu, context, true); | 4556 | update_permission_bitmask(vcpu, context, true); |
4557 | update_pkru_bitmask(vcpu, context, true); | 4557 | update_pkru_bitmask(vcpu, context, true); |
4558 | update_last_nonleaf_level(vcpu, context); | ||
4558 | reset_rsvds_bits_mask_ept(vcpu, context, execonly); | 4559 | reset_rsvds_bits_mask_ept(vcpu, context, execonly); |
4559 | reset_ept_shadow_zero_bits_mask(vcpu, context, execonly); | 4560 | reset_ept_shadow_zero_bits_mask(vcpu, context, execonly); |
4560 | } | 4561 | } |