Change everything to use the cached virtPort rather than created their own each time.
authorAli Saidi <saidi@eecs.umich.edu>
Tue, 1 Jul 2008 14:24:19 +0000 (10:24 -0400)
committerAli Saidi <saidi@eecs.umich.edu>
Tue, 1 Jul 2008 14:24:19 +0000 (10:24 -0400)
This appears to work, but I don't want to commit it until it gets tested a lot more.
I haven't deleted the functionality in this patch that will come later, but one question
is how to enforce encourage objects that call getVirtPort() to not cache the virtual port
since if the CPU changes out from under them it will be worse than useless. Perhaps a null
function like delVirtPort() is still useful in that case.

src/arch/alpha/utility.cc
src/arch/mips/utility.cc
src/arch/sparc/utility.cc
src/base/remote_gdb.cc
src/mem/vport.cc
src/sim/vptr.hh

index f1864203bc10a4b2beaf1209f0facf1f293305d8..94e82adf37197e92acef816e93b40137506165b6 100644 (file)
@@ -49,7 +49,7 @@ uint64_t getArgument(ThreadContext *tc, int number, bool fp)
             return tc->readIntReg(ArgumentReg[number]);
     } else {
         Addr sp = tc->readIntReg(StackPointerReg);
-        VirtualPort *vp = tc->getVirtPort(tc);
+        VirtualPort *vp = tc->getVirtPort();
         uint64_t arg = vp->read<uint64_t>(sp +
                            (number-NumArgumentRegs) * sizeof(uint64_t));
         tc->delVirtPort(vp);
index c254811fa7df4e8de8588e5a5288bf010b9c5340..52c52f8e75c2744df916538f4d7b57c311520bf6 100644 (file)
@@ -59,7 +59,7 @@ getArgument(ThreadContext *tc, int number, bool fp)
             return tc->readIntReg(ArgumentReg[number]);
     } else {
         Addr sp = tc->readIntReg(StackPointerReg);
-        VirtualPort *vp = tc->getVirtPort(tc);
+        VirtualPort *vp = tc->getVirtPort();
         uint64_t arg = vp->read<uint64_t>(sp +
                            (number-NumArgumentRegs) * sizeof(uint64_t));
         tc->delVirtPort(vp);
index 6d4358603dd425779fd9cc6ac1441c2b51d4cfb8..0677823afcc54d0c1899790fc45f2919f16ed45f 100644 (file)
@@ -50,7 +50,7 @@ uint64_t getArgument(ThreadContext *tc, int number, bool fp) {
         return tc->readIntReg(ArgumentReg[number]);
     } else {
         Addr sp = tc->readIntReg(StackPointerReg);
-        VirtualPort *vp = tc->getVirtPort(tc);
+        VirtualPort *vp = tc->getVirtPort();
         uint64_t arg = vp->read<uint64_t>(sp + 92 +
                             (number-NumArgumentRegs) * sizeof(uint64_t));
         tc->delVirtPort(vp);
index d5095e7f96f069dd8d5e90221d86df2dfb683294..1a858a3f3fb93453321709641fc6e744707d2dd5 100644 (file)
@@ -454,7 +454,7 @@ BaseRemoteGDB::read(Addr vaddr, size_t size, char *data)
     DPRINTF(GDBRead, "read:  addr=%#x, size=%d", vaddr, size);
 
 #if FULL_SYSTEM
-    VirtualPort *port = context->getVirtPort(context);
+    VirtualPort *port = context->getVirtPort();
 #else
     TranslatingPort *port = context->getMemPort();
 #endif
@@ -499,7 +499,7 @@ BaseRemoteGDB::write(Addr vaddr, size_t size, const char *data)
             DPRINTFNR("\n");
     }
 #if FULL_SYSTEM
-    VirtualPort *port = context->getVirtPort(context);
+    VirtualPort *port = context->getVirtPort();
 #else
     TranslatingPort *port = context->getMemPort();
 #endif
index 6cc4d9ca9edff80c51386a584b284aae54b48d2b..a2f8b1ecc7cd5285eece7ac9dcd38a6909517e1e 100644 (file)
@@ -75,7 +75,7 @@ void
 CopyOut(ThreadContext *tc, void *dest, Addr src, size_t cplen)
 {
     uint8_t *dst = (uint8_t *)dest;
-    VirtualPort *vp = tc->getVirtPort(tc);
+    VirtualPort *vp = tc->getVirtPort();
 
     vp->readBlob(src, dst, cplen);
 
@@ -87,7 +87,7 @@ void
 CopyIn(ThreadContext *tc, Addr dest, void *source, size_t cplen)
 {
     uint8_t *src = (uint8_t *)source;
-    VirtualPort *vp = tc->getVirtPort(tc);
+    VirtualPort *vp = tc->getVirtPort();
 
     vp->writeBlob(dest, src, cplen);
 
@@ -99,7 +99,7 @@ CopyStringOut(ThreadContext *tc, char *dst, Addr vaddr, size_t maxlen)
 {
     int len = 0;
     char *start = dst;
-    VirtualPort *vp = tc->getVirtPort(tc);
+    VirtualPort *vp = tc->getVirtPort();
 
     do {
         vp->readBlob(vaddr++, (uint8_t*)dst++, 1);
@@ -112,7 +112,7 @@ CopyStringOut(ThreadContext *tc, char *dst, Addr vaddr, size_t maxlen)
 void
 CopyStringIn(ThreadContext *tc, char *src, Addr vaddr)
 {
-    VirtualPort *vp = tc->getVirtPort(tc);
+    VirtualPort *vp = tc->getVirtPort();
     for (ChunkGenerator gen(vaddr, strlen(src), TheISA::PageBytes); !gen.done();
             gen.next())
     {
index 383f653519ff77aad1628a3b34743110ea5141f0..88b515c13be0758f04527bbddf70efed092a90ed 100644 (file)
@@ -71,7 +71,7 @@ class VPtr
         if (!ptr)
             return;
 
-        VirtualPort *port = tc->getVirtPort(tc);
+        VirtualPort *port = tc->getVirtPort();
         port->readBlob(ptr, buffer, sizeof(T));
         tc->delVirtPort(port);
     }