target-i386: mmu: use pg_mode instead of HF_LMA_MASK
Correctly look up the paging mode of the hypervisor when it is using 64-bit mode but the guest is not. Fixes: 68746930ae ("target/i386: use mmu_translate for NPT walk", 2021-05-11) Cc: qemu-stable@nongnu.org Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> (cherry picked from commit 93eae3583256896dd91a4c2ca38dcbb8d4051cff) Signed-off-by: Michael Roth <michael.roth@amd.com>
This commit is contained in:
parent
43a457841f
commit
cddfaf96ab
@ -90,7 +90,7 @@ static int mmu_translate(CPUState *cs, hwaddr addr, MMUTranslateFunc get_hphys_f
|
|||||||
target_ulong pdpe_addr;
|
target_ulong pdpe_addr;
|
||||||
|
|
||||||
#ifdef TARGET_X86_64
|
#ifdef TARGET_X86_64
|
||||||
if (env->hflags & HF_LMA_MASK) {
|
if (pg_mode & PG_MODE_LMA) {
|
||||||
bool la57 = pg_mode & PG_MODE_LA57;
|
bool la57 = pg_mode & PG_MODE_LA57;
|
||||||
uint64_t pml5e_addr, pml5e;
|
uint64_t pml5e_addr, pml5e;
|
||||||
uint64_t pml4e_addr, pml4e;
|
uint64_t pml4e_addr, pml4e;
|
||||||
@ -287,7 +287,7 @@ do_check_protect_pse36:
|
|||||||
*prot |= PAGE_EXEC;
|
*prot |= PAGE_EXEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(env->hflags & HF_LMA_MASK)) {
|
if (!(pg_mode & PG_MODE_LMA)) {
|
||||||
pkr = 0;
|
pkr = 0;
|
||||||
} else if (ptep & PG_USER_MASK) {
|
} else if (ptep & PG_USER_MASK) {
|
||||||
pkr = pg_mode & PG_MODE_PKE ? env->pkru : 0;
|
pkr = pg_mode & PG_MODE_PKE ? env->pkru : 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user