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:
parent
926d1024d0
commit
f0422c6f9f
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user