KVM: MMU: fix for calculating gpa in invlpg code
If the guest is 32-bit, we should use 'quadrant' to adjust gpa offset Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
329d20ba45
commit
22c9b2d166
|
@ -478,8 +478,13 @@ static void FNAME(invlpg)(struct kvm_vcpu *vcpu, gva_t gva)
|
|||
((level == PT_DIRECTORY_LEVEL && is_large_pte(*sptep))) ||
|
||||
((level == PT_PDPE_LEVEL && is_large_pte(*sptep)))) {
|
||||
struct kvm_mmu_page *sp = page_header(__pa(sptep));
|
||||
int offset, shift;
|
||||
|
||||
pte_gpa = (sp->gfn << PAGE_SHIFT);
|
||||
shift = PAGE_SHIFT -
|
||||
(PT_LEVEL_BITS - PT64_LEVEL_BITS) * level;
|
||||
offset = sp->role.quadrant << shift;
|
||||
|
||||
pte_gpa = (sp->gfn << PAGE_SHIFT) + offset;
|
||||
pte_gpa += (sptep - sp->spt) * sizeof(pt_element_t);
|
||||
|
||||
if (is_shadow_present_pte(*sptep)) {
|
||||
|
|
Loading…
Reference in New Issue