target-i386: unify reserved bits and NX bit check
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
e7e898a76a
commit
e2a32ebbfe
@ -549,6 +549,10 @@ int x86_cpu_handle_mmu_fault(CPUState *cs, vaddr addr,
|
|||||||
goto do_mapping;
|
goto do_mapping;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!(env->efer & MSR_EFER_NXE)) {
|
||||||
|
rsvd_mask |= PG_NX_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
if (env->cr[4] & CR4_PAE_MASK) {
|
if (env->cr[4] & CR4_PAE_MASK) {
|
||||||
uint64_t pde, pdpe;
|
uint64_t pde, pdpe;
|
||||||
target_ulong pdpe_addr;
|
target_ulong pdpe_addr;
|
||||||
@ -575,9 +579,6 @@ int x86_cpu_handle_mmu_fault(CPUState *cs, vaddr addr,
|
|||||||
if (pml4e & (rsvd_mask | PG_PSE_MASK)) {
|
if (pml4e & (rsvd_mask | PG_PSE_MASK)) {
|
||||||
goto do_fault_rsvd;
|
goto do_fault_rsvd;
|
||||||
}
|
}
|
||||||
if (!(env->efer & MSR_EFER_NXE) && (pml4e & PG_NX_MASK)) {
|
|
||||||
goto do_fault_rsvd;
|
|
||||||
}
|
|
||||||
if (!(pml4e & PG_ACCESSED_MASK)) {
|
if (!(pml4e & PG_ACCESSED_MASK)) {
|
||||||
pml4e |= PG_ACCESSED_MASK;
|
pml4e |= PG_ACCESSED_MASK;
|
||||||
stl_phys_notdirty(cs->as, pml4e_addr, pml4e);
|
stl_phys_notdirty(cs->as, pml4e_addr, pml4e);
|
||||||
@ -592,9 +593,6 @@ int x86_cpu_handle_mmu_fault(CPUState *cs, vaddr addr,
|
|||||||
if (pdpe & rsvd_mask) {
|
if (pdpe & rsvd_mask) {
|
||||||
goto do_fault_rsvd;
|
goto do_fault_rsvd;
|
||||||
}
|
}
|
||||||
if (!(env->efer & MSR_EFER_NXE) && (pdpe & PG_NX_MASK)) {
|
|
||||||
goto do_fault_rsvd;
|
|
||||||
}
|
|
||||||
ptep &= pdpe ^ PG_NX_MASK;
|
ptep &= pdpe ^ PG_NX_MASK;
|
||||||
if (!(pdpe & PG_ACCESSED_MASK)) {
|
if (!(pdpe & PG_ACCESSED_MASK)) {
|
||||||
pdpe |= PG_ACCESSED_MASK;
|
pdpe |= PG_ACCESSED_MASK;
|
||||||
@ -633,9 +631,6 @@ int x86_cpu_handle_mmu_fault(CPUState *cs, vaddr addr,
|
|||||||
if (pde & rsvd_mask) {
|
if (pde & rsvd_mask) {
|
||||||
goto do_fault_rsvd;
|
goto do_fault_rsvd;
|
||||||
}
|
}
|
||||||
if (!(env->efer & MSR_EFER_NXE) && (pde & PG_NX_MASK)) {
|
|
||||||
goto do_fault_rsvd;
|
|
||||||
}
|
|
||||||
ptep &= pde ^ PG_NX_MASK;
|
ptep &= pde ^ PG_NX_MASK;
|
||||||
if (pde & PG_PSE_MASK) {
|
if (pde & PG_PSE_MASK) {
|
||||||
/* 2 MB page */
|
/* 2 MB page */
|
||||||
@ -658,9 +653,6 @@ int x86_cpu_handle_mmu_fault(CPUState *cs, vaddr addr,
|
|||||||
if (pte & rsvd_mask) {
|
if (pte & rsvd_mask) {
|
||||||
goto do_fault_rsvd;
|
goto do_fault_rsvd;
|
||||||
}
|
}
|
||||||
if (!(env->efer & MSR_EFER_NXE) && (pte & PG_NX_MASK)) {
|
|
||||||
goto do_fault_rsvd;
|
|
||||||
}
|
|
||||||
/* combine pde and pte nx, user and rw protections */
|
/* combine pde and pte nx, user and rw protections */
|
||||||
ptep &= pte ^ PG_NX_MASK;
|
ptep &= pte ^ PG_NX_MASK;
|
||||||
page_size = 4096;
|
page_size = 4096;
|
||||||
|
Loading…
Reference in New Issue
Block a user