Only set the physical address if the entry is mapped.

Otherwise, even when the address was 0, we would possibly set the
physical address to != 0 as we always applied the page offset.
This commit is contained in:
Michael Lotz 2012-12-04 00:29:41 +01:00
parent 926d1024d0
commit f0422c6f9f

View File

@ -574,7 +574,8 @@ ARMVMTranslationMap32Bit::Query(addr_t va, phys_addr_t *_physical,
pd[index] & ARM_PDE_ADDRESS_MASK);
page_table_entry entry = pt[VADDR_TO_PTENT(va)];
*_physical = (entry & ARM_PTE_ADDRESS_MASK) | VADDR_TO_PGOFF(va);
if ((entry & ARM_PTE_TYPE_MASK) != 0)
*_physical = (entry & ARM_PTE_ADDRESS_MASK) | VADDR_TO_PGOFF(va);
#if 0 //IRA
// read in the page state flags
@ -621,7 +622,8 @@ ARMVMTranslationMap32Bit::QueryInterrupt(addr_t va, phys_addr_t *_physical,
pd[index] & ARM_PDE_ADDRESS_MASK);
page_table_entry entry = pt[VADDR_TO_PTENT(va)];
*_physical = (entry & ARM_PTE_ADDRESS_MASK) | VADDR_TO_PGOFF(va);
if ((entry & ARM_PTE_TYPE_MASK) != 0)
*_physical = (entry & ARM_PTE_ADDRESS_MASK) | VADDR_TO_PGOFF(va);
#if 0
// read in the page state flags
@ -636,7 +638,9 @@ ARMVMTranslationMap32Bit::QueryInterrupt(addr_t va, phys_addr_t *_physical,
| ((entry & ARM_PTE_ACCESSED) != 0 ? PAGE_ACCESSED : 0)
| ((entry & ARM_PTE_PRESENT) != 0 ? PAGE_PRESENT : 0);
#else
*_flags = B_KERNEL_WRITE_AREA | B_KERNEL_READ_AREA | PAGE_PRESENT;
*_flags = B_KERNEL_WRITE_AREA | B_KERNEL_READ_AREA;
if (*_physical != 0)
*_flags |= PAGE_PRESENT;
#endif
return B_OK;
}