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:
parent
9e62fd7f26
commit
c8135d9af6
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue