target-i386: introduce do_check_protect label

This will help adding 1GB page support in the next patch.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2014-04-04 08:11:48 +02:00
parent 870a706735
commit b052e4509b
1 changed files with 39 additions and 37 deletions

View File

@ -636,7 +636,8 @@ int x86_cpu_handle_mmu_fault(CPUState *cs, vaddr addr,
page_size = 2048 * 1024;
pte_addr = pde_addr;
pte = pde;
} else {
goto do_check_protect;
}
/* 4 KB page */
if (!(pde & PG_ACCESSED_MASK)) {
pde |= PG_ACCESSED_MASK;
@ -656,7 +657,6 @@ int x86_cpu_handle_mmu_fault(CPUState *cs, vaddr addr,
/* combine pde and pte nx, user and rw protections */
ptep &= pte ^ PG_NX_MASK;
page_size = 4096;
}
} else {
uint32_t pde;
@ -675,7 +675,9 @@ int x86_cpu_handle_mmu_fault(CPUState *cs, vaddr addr,
page_size = 4096 * 1024;
pte_addr = pde_addr;
pte = pde;
} else {
goto do_check_protect;
}
if (!(pde & PG_ACCESSED_MASK)) {
pde |= PG_ACCESSED_MASK;
stl_phys_notdirty(cs->as, pde_addr, pde);
@ -693,8 +695,8 @@ int x86_cpu_handle_mmu_fault(CPUState *cs, vaddr addr,
ptep &= pte | PG_NX_MASK;
page_size = 4096;
}
}
do_check_protect:
ptep ^= PG_NX_MASK;
if ((ptep & PG_NX_MASK) && is_write1 == 2) {
goto do_fault_protect;