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

Reply via email to