CPU: Make physPort and getPhysPort available in SE mode.
authorGabe Black <gblack@eecs.umich.edu>
Sun, 16 Oct 2011 09:59:53 +0000 (02:59 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sun, 16 Oct 2011 09:59:53 +0000 (02:59 -0700)
src/cpu/checker/thread_context.hh
src/cpu/inorder/thread_context.hh
src/cpu/o3/thread_context.hh
src/cpu/ozone/cpu.hh
src/cpu/simple_thread.cc
src/cpu/simple_thread.hh
src/cpu/thread_context.hh
src/cpu/thread_state.cc
src/cpu/thread_state.hh

index 5bd3ed734cd686c1114d4106c6ffc83f5ed90410..197bab0b5ad7e6da4850683dc2e0cd7438ba8af9 100644 (file)
@@ -97,8 +97,6 @@ class CheckerThreadContext : public ThreadContext
     TheISA::Kernel::Statistics *getKernelStats()
     { return actualTC->getKernelStats(); }
 
-    FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
-
     VirtualPort *getVirtPort()
     { return actualTC->getVirtPort(); }
 #else
@@ -107,6 +105,8 @@ class CheckerThreadContext : public ThreadContext
     Process *getProcessPtr() { return actualTC->getProcessPtr(); }
 #endif
 
+    FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
+
     Status status() const { return actualTC->status(); }
 
     void setStatus(Status new_status)
index 7ec17cb770f6883348322d28fbd3dc53e51b8a39..2d8d8ba03eceaa2113a2bf4e5f236e3a4453fcb3 100644 (file)
@@ -118,8 +118,6 @@ class InOrderThreadContext : public ThreadContext
     TheISA::Kernel::Statistics *getKernelStats()
     { return thread->kernelStats; }
 
-    FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
-
     VirtualPort *getVirtPort();
 
     void connectMemPorts(ThreadContext *tc)
@@ -153,6 +151,8 @@ class InOrderThreadContext : public ThreadContext
     Process *getProcessPtr() { return thread->getProcessPtr(); }
 #endif
 
+    FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
+
     /** Returns this thread's status. */
     Status status() const { return thread->status(); }
 
index 38c94439a7e5ae0b12e3e0ee6318353799102637..05b86556904c42cc27fd56f595c40be527c6f6fc 100755 (executable)
@@ -97,8 +97,6 @@ class O3ThreadContext : public ThreadContext
     virtual TheISA::Kernel::Statistics *getKernelStats()
     { return thread->kernelStats; }
 
-    virtual FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
-
     virtual VirtualPort *getVirtPort();
 
     virtual void connectMemPorts(ThreadContext *tc) { thread->connectMemPorts(tc); }
@@ -108,6 +106,9 @@ class O3ThreadContext : public ThreadContext
     /** Returns a pointer to this thread's process. */
     virtual Process *getProcessPtr() { return thread->getProcessPtr(); }
 #endif
+
+    virtual FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
+
     /** Returns this thread's status. */
     virtual Status status() const { return thread->status(); }
 
index 1867a4c51252b6ba53583db657267539aa00cbc4..98d236b74c604daf725d0b32d8d0c70f59117149 100644 (file)
@@ -124,8 +124,6 @@ class OzoneCPU : public BaseCPU
         TheISA::Kernel::Statistics *getKernelStats()
         { return thread->getKernelStats(); }
 
-        FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
-
         VirtualPort *getVirtPort()
         { return thread->getVirtPort(); }
 #else
@@ -134,6 +132,8 @@ class OzoneCPU : public BaseCPU
         Process *getProcessPtr() { return thread->getProcessPtr(); }
 #endif
 
+        FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
+
         Status status() const { return thread->status(); }
 
         void setStatus(Status new_status);
index 61174dd4e6cc1224d4a64fbf709ddebd7669349c..d9a2005a9d1a811ae861e15502eb97fdf57c82d3 100644 (file)
@@ -117,8 +117,8 @@ SimpleThread::SimpleThread()
 
 SimpleThread::~SimpleThread()
 {
-#if FULL_SYSTEM
     delete physPort;
+#if FULL_SYSTEM
     delete virtPort;
 #endif
     delete tc;
index 2b7b89030b41b2f14dd02fe3c038c915cd804c08..30dca83692940f30953d5c4b957ee0951b9d8fb6 100644 (file)
@@ -208,8 +208,6 @@ class SimpleThread : public ThreadState
     System *getSystemPtr() { return system; }
 
 #if FULL_SYSTEM
-    FunctionalPort *getPhysPort() { return physPort; }
-
     /** Return a virtual port. This port cannot be cached locally in an object.
      * After a CPU switch it may point to the wrong memory object which could
      * mean stale data.
@@ -217,6 +215,8 @@ class SimpleThread : public ThreadState
     VirtualPort *getVirtPort() { return virtPort; }
 #endif
 
+    FunctionalPort *getPhysPort() { return physPort; }
+
     Status status() const { return _status; }
 
     void setStatus(Status newStatus) { _status = newStatus; }
index 3b7f8b3c320f855781aeaead42c38c2b14d95d16..7d98a4049e644b38517b3357f85f4f0968b3512f 100644 (file)
@@ -128,8 +128,6 @@ class ThreadContext
 #if FULL_SYSTEM
     virtual TheISA::Kernel::Statistics *getKernelStats() = 0;
 
-    virtual FunctionalPort *getPhysPort() = 0;
-
     virtual VirtualPort *getVirtPort() = 0;
 
     virtual void connectMemPorts(ThreadContext *tc) = 0;
@@ -139,6 +137,8 @@ class ThreadContext
     virtual Process *getProcessPtr() = 0;
 #endif
 
+    virtual FunctionalPort *getPhysPort() = 0;
+
     virtual Status status() const = 0;
 
     virtual void setStatus(Status new_status) = 0;
@@ -298,8 +298,6 @@ class ProxyThreadContext : public ThreadContext
     TheISA::Kernel::Statistics *getKernelStats()
     { return actualTC->getKernelStats(); }
 
-    FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
-
     VirtualPort *getVirtPort() { return actualTC->getVirtPort(); }
 
     void connectMemPorts(ThreadContext *tc) { actualTC->connectMemPorts(tc); }
@@ -309,6 +307,8 @@ class ProxyThreadContext : public ThreadContext
     Process *getProcessPtr() { return actualTC->getProcessPtr(); }
 #endif
 
+    FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
+
     Status status() const { return actualTC->status(); }
 
     void setStatus(Status new_status) { actualTC->setStatus(new_status); }
index dedeccb3e8304cf1e40251ff90b3bc8a92493b88..0abe2bf81659a6becbd598eae2ee3187daab552e 100644 (file)
@@ -51,11 +51,11 @@ ThreadState::ThreadState(BaseCPU *cpu, ThreadID _tid, Process *_process)
       baseCpu(cpu), _threadId(_tid), lastActivate(0), lastSuspend(0),
 #if FULL_SYSTEM
       profile(NULL), profileNode(NULL), profilePC(0), quiesceEvent(NULL),
-      kernelStats(NULL), physPort(NULL), virtPort(NULL),
+      kernelStats(NULL), virtPort(NULL),
 #else
       port(NULL), process(_process),
 #endif
-      funcExeInst(0), storeCondFailures(0)
+      physPort(NULL), funcExeInst(0), storeCondFailures(0)
 {
 }
 
@@ -104,14 +104,6 @@ ThreadState::unserialize(Checkpoint *cp, const std::string &section)
 #endif
 }
 
-#if FULL_SYSTEM
-void
-ThreadState::connectMemPorts(ThreadContext *tc)
-{
-    connectPhysPort();
-    connectVirtPort(tc);
-}
-
 void
 ThreadState::connectPhysPort()
 {
@@ -126,6 +118,14 @@ ThreadState::connectPhysPort()
     connectToMemFunc(physPort);
 }
 
+#if FULL_SYSTEM
+void
+ThreadState::connectMemPorts(ThreadContext *tc)
+{
+    connectPhysPort();
+    connectVirtPort(tc);
+}
+
 void
 ThreadState::connectVirtPort(ThreadContext *tc)
 {
index 8245798521539bdf9687c4f703018905c04d9e88..b7727f4eee7473bc6ed69046e92df53fe20e774d 100644 (file)
@@ -92,11 +92,11 @@ struct ThreadState {
 
     Tick readLastSuspend() { return lastSuspend; }
 
+    void connectPhysPort();
+
 #if FULL_SYSTEM
     void connectMemPorts(ThreadContext *tc);
 
-    void connectPhysPort();
-
     void connectVirtPort(ThreadContext *tc);
 
     void dumpFuncProfile();
@@ -109,10 +109,6 @@ struct ThreadState {
 
     TheISA::Kernel::Statistics *getKernelStats() { return kernelStats; }
 
-    FunctionalPort *getPhysPort() { return physPort; }
-
-    void setPhysPort(FunctionalPort *port) { physPort = port; }
-
     VirtualPort *getVirtPort() { return virtPort; }
 #else
     Process *getProcessPtr() { return process; }
@@ -122,6 +118,10 @@ struct ThreadState {
     void setMemPort(TranslatingPort *_port) { port = _port; }
 #endif
 
+    FunctionalPort *getPhysPort() { return physPort; }
+
+    void setPhysPort(FunctionalPort *port) { physPort = port; }
+
     /** Reads the number of instructions functionally executed and
      * committed.
      */
@@ -186,10 +186,6 @@ struct ThreadState {
 
     TheISA::Kernel::Statistics *kernelStats;
   protected:
-    /** A functional port outgoing only for functional accesses to physical
-     * addresses.*/
-    FunctionalPort *physPort;
-
     /** A functional port, outgoing only, for functional accesse to virtual
      * addresses. */
     VirtualPort *virtPort;
@@ -199,6 +195,10 @@ struct ThreadState {
     Process *process;
 #endif
 
+    /** A functional port outgoing only for functional accesses to physical
+     * addresses.*/
+    FunctionalPort *physPort;
+
   public:
     /*
      * number of executed instructions, for matching with syscall trace