changeset 3a17e8c018b4 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=3a17e8c018b4
description:
mem: Multi Level Page Table bug fix
The multi level page table was giving false positives for already mapped
translations. This patch fixes the bogus behavior.
diffstat:
src/mem/multi_level_page_table_impl.hh | 11 +++++------
1 files changed, 5 insertions(+), 6 deletions(-)
diffs (23 lines):
diff -r 1e3b3c7a0cba -r 3a17e8c018b4 src/mem/multi_level_page_table_impl.hh
--- a/src/mem/multi_level_page_table_impl.hh Sun Nov 23 18:01:09 2014 -0800
+++ b/src/mem/multi_level_page_table_impl.hh Sun Nov 23 18:01:09 2014 -0800
@@ -151,14 +151,13 @@
if (walk(vaddr, true, PTE_addr)) {
PageTableEntry PTE = p.read<PageTableEntry>(PTE_addr);
Addr entry_paddr = pTableISAOps.getPnum(PTE);
- if (!clobber && entry_paddr == 0) {
- pTableISAOps.setPnum(PTE, paddr >> PageShift);
- pTableISAOps.setPTEFields(PTE);
- p.write<PageTableEntry>(PTE_addr, PTE);
- DPRINTF(MMU, "New mapping: %#x-%#x\n", vaddr, paddr);
- } else {
+ if (!clobber && entry_paddr != 0) {
fatal("addr 0x%x already mapped to %x", vaddr, entry_paddr);
}
+ pTableISAOps.setPnum(PTE, paddr >> PageShift);
+ pTableISAOps.setPTEFields(PTE);
+ p.write<PageTableEntry>(PTE_addr, PTE);
+ DPRINTF(MMU, "New mapping: %#x-%#x\n", vaddr, paddr);
eraseCacheEntry(vaddr);
updateCache(vaddr, TlbEntry(pid, vaddr, paddr));
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev