mem: update stuff for changes to Packet and Request
[gem5.git] / src / arch / x86 / pagetable_walker.cc
index 0472dcd21a99c9b495e2f3a392f580400c5d2b86..564a04b381369a907ff6de4f6719112b9dfc0d68 100644 (file)
@@ -110,7 +110,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
             panic("NX violation!\n");
         entry.noExec = pte.nx;
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         nextState = LongPDP;
         break;
       case LongPDP:
@@ -122,7 +122,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
         if (badNX)
             panic("NX violation!\n");
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         nextState = LongPD;
         break;
       case LongPD:
@@ -133,7 +133,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
         if (badNX)
             panic("NX violation!\n");
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         if (!pte.ps) {
             // 4 KB page
             entry.size = 4 * (1 << 10);
@@ -164,7 +164,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
         if (badNX)
             panic("NX violation!\n");
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         entry.paddr = (uint64_t)pte & (mask(40) << 12);
         entry.uncacheable = uncacheable;
         entry.global = pte.g;
@@ -179,7 +179,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
       case PAEPDP:
         nextRead = ((uint64_t)pte & (mask(40) << 12)) + vaddr.pael2 * size;
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         nextState = PAEPD;
         break;
       case PAEPD:
@@ -190,7 +190,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
         if (badNX)
             panic("NX violation!\n");
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         if (!pte.ps) {
             // 4 KB page
             entry.size = 4 * (1 << 10);
@@ -220,7 +220,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
         if (badNX)
             panic("NX violation!\n");
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         entry.paddr = (uint64_t)pte & (mask(40) << 12);
         entry.uncacheable = uncacheable;
         entry.global = pte.g;
@@ -238,7 +238,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
         entry.writable = pte.w;
         entry.user = pte.u;
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         if (!pte.ps) {
             // 4 KB page
             entry.size = 4 * (1 << 10);
@@ -267,7 +267,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
         entry.writable = pte.w;
         entry.user = pte.u;
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         // 4 KB page
         entry.size = 4 * (1 << 10);
         nextRead = ((uint64_t)pte & (mask(20) << 12)) + vaddr.norml2 * size;
@@ -281,7 +281,7 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
         entry.writable = pte.w;
         entry.user = pte.u;
         if (!pte.p)
-            panic("Page not present!\n");
+            panic("Page at %#x not present!\n", entry.vaddr);
         entry.paddr = (uint64_t)pte & (mask(20) << 12);
         entry.uncacheable = uncacheable;
         entry.global = pte.g;
@@ -298,11 +298,8 @@ Walker::doNext(PacketPtr &read, PacketPtr &write)
     }
     PacketPtr oldRead = read;
     //If we didn't return, we're setting up another read.
-    uint32_t flags = oldRead->req->getFlags();
-    if (uncacheable)
-        flags |= UNCACHEABLE;
-    else
-        flags &= ~UNCACHEABLE;
+    Request::Flags flags = oldRead->req->getFlags();
+    flags.set(Request::UNCACHEABLE, uncacheable);
     RequestPtr request =
         new Request(nextRead, oldRead->getSize(), flags);
     read = new Packet(request, MemCmd::ReadExReq, Packet::Broadcast);
@@ -365,8 +362,10 @@ Walker::start(ThreadContext * _tc, Addr vaddr)
 
     enableNX = efer.nxe;
 
-    RequestPtr request =
-        new Request(top, size, PHYSICAL | cr3.pcd ? UNCACHEABLE : 0);
+    Request::Flags flags = Request::PHYSICAL;
+    if (cr3.pcd)
+        flags.set(Request::UNCACHEABLE);
+    RequestPtr request = new Request(top, size, flags);
     read = new Packet(request, MemCmd::ReadExReq, Packet::Broadcast);
     read->allocate();
     Enums::MemoryMode memMode = sys->getMemoryMode();