fixed subtle bug: in some cases PG_DIRTY was not set correctly

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@547 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2004-01-13 00:00:25 +00:00
parent 9e62fd7f26
commit c8135d9af6

View file

@ -348,8 +348,12 @@ int cpu_x86_handle_mmu_fault(CPUX86State *env, uint32_t addr,
page_size = 4096;
virt_addr = addr & ~0xfff;
}
/* the page can be put in the TLB */
prot = PROT_READ;
if (pte & PG_DIRTY_MASK) {
/* only set write access if already dirty... otherwise wait
for dirty access */
if (is_user) {
if (pte & PG_RW_MASK)
prot |= PROT_WRITE;
@ -358,6 +362,7 @@ int cpu_x86_handle_mmu_fault(CPUX86State *env, uint32_t addr,
(pte & PG_RW_MASK))
prot |= PROT_WRITE;
}
}
do_mapping:
pte = pte & a20_mask;