SE/FS: Build/expose vport in SE mode.
authorGabe Black <gblack@eecs.umich.edu>
Sun, 16 Oct 2011 12:06:39 +0000 (05:06 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sun, 16 Oct 2011 12:06:39 +0000 (05:06 -0700)
12 files changed:
src/cpu/checker/thread_context.hh
src/cpu/inorder/thread_context.cc
src/cpu/inorder/thread_context.hh
src/cpu/o3/thread_context.hh
src/cpu/o3/thread_context_impl.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
src/mem/SConscript

index 197bab0b5ad7e6da4850683dc2e0cd7438ba8af9..52ca97e5f9d66b2999e9168389b0e53684bf892c 100644 (file)
@@ -96,15 +96,15 @@ class CheckerThreadContext : public ThreadContext
 
     TheISA::Kernel::Statistics *getKernelStats()
     { return actualTC->getKernelStats(); }
-
-    VirtualPort *getVirtPort()
-    { return actualTC->getVirtPort(); }
 #else
     TranslatingPort *getMemPort() { return actualTC->getMemPort(); }
 
     Process *getProcessPtr() { return actualTC->getProcessPtr(); }
 #endif
 
+    VirtualPort *getVirtPort()
+    { return actualTC->getVirtPort(); }
+
     FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
 
     Status status() const { return actualTC->status(); }
index af6e18291ae04d93850cafec765f56f8df0857ad..f5e55627c40a8e675231416bfa94567158cf62b8 100644 (file)
 
 using namespace TheISA;
 
-#if FULL_SYSTEM
-
 VirtualPort *
 InOrderThreadContext::getVirtPort()
 {
     return thread->getVirtPort();
 }
 
+#if FULL_SYSTEM
 
 void
 InOrderThreadContext::dumpFuncProfile()
index 2d8d8ba03eceaa2113a2bf4e5f236e3a4453fcb3..2586d9372c1a6493e1a536c3b156f12d84bcf881 100644 (file)
@@ -118,8 +118,6 @@ class InOrderThreadContext : public ThreadContext
     TheISA::Kernel::Statistics *getKernelStats()
     { return thread->kernelStats; }
 
-    VirtualPort *getVirtPort();
-
     void connectMemPorts(ThreadContext *tc)
     { thread->connectMemPorts(tc); }
 
@@ -151,6 +149,7 @@ class InOrderThreadContext : public ThreadContext
     Process *getProcessPtr() { return thread->getProcessPtr(); }
 #endif
 
+    VirtualPort *getVirtPort();
     FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
 
     /** Returns this thread's status. */
index 05b86556904c42cc27fd56f595c40be527c6f6fc..afc0d72700135528e64b80893b579b278971da6a 100755 (executable)
@@ -97,8 +97,6 @@ class O3ThreadContext : public ThreadContext
     virtual TheISA::Kernel::Statistics *getKernelStats()
     { return thread->kernelStats; }
 
-    virtual VirtualPort *getVirtPort();
-
     virtual void connectMemPorts(ThreadContext *tc) { thread->connectMemPorts(tc); }
 #else
     virtual TranslatingPort *getMemPort() { return thread->getMemPort(); }
@@ -107,6 +105,8 @@ class O3ThreadContext : public ThreadContext
     virtual Process *getProcessPtr() { return thread->getProcessPtr(); }
 #endif
 
+    virtual VirtualPort *getVirtPort();
+
     virtual FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
 
     /** Returns this thread's status. */
index 4888cf92e4d94a224849bb3c2a8a6be49089c955..515fa5a507af4465a3e320852523cd65fc6e0060 100755 (executable)
@@ -47,7 +47,6 @@
 #include "cpu/quiesce_event.hh"
 #include "debug/O3CPU.hh"
 
-#if FULL_SYSTEM
 template <class Impl>
 VirtualPort *
 O3ThreadContext<Impl>::getVirtPort()
@@ -55,6 +54,7 @@ O3ThreadContext<Impl>::getVirtPort()
     return thread->getVirtPort();
 }
 
+#if FULL_SYSTEM
 template <class Impl>
 void
 O3ThreadContext<Impl>::dumpFuncProfile()
index 98d236b74c604daf725d0b32d8d0c70f59117149..63452d20279222afc9ec55eb24f70358a1140000 100644 (file)
@@ -123,15 +123,15 @@ class OzoneCPU : public BaseCPU
 
         TheISA::Kernel::Statistics *getKernelStats()
         { return thread->getKernelStats(); }
-
-        VirtualPort *getVirtPort()
-        { return thread->getVirtPort(); }
 #else
         TranslatingPort *getMemPort() { return thread->getMemPort(); }
 
         Process *getProcessPtr() { return thread->getProcessPtr(); }
 #endif
 
+        VirtualPort *getVirtPort()
+        { return thread->getVirtPort(); }
+
         FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
 
         Status status() const { return thread->status(); }
index d9a2005a9d1a811ae861e15502eb97fdf57c82d3..2f629c2e1a4ce5fdf3110828dede7abab037dae5 100644 (file)
@@ -39,6 +39,7 @@
 #include "cpu/base.hh"
 #include "cpu/simple_thread.hh"
 #include "cpu/thread_context.hh"
+#include "mem/vport.hh"
 #include "params/BaseCPU.hh"
 
 #if FULL_SYSTEM
@@ -50,7 +51,6 @@
 #include "base/trace.hh"
 #include "cpu/profile.hh"
 #include "cpu/quiesce_event.hh"
-#include "mem/vport.hh"
 #include "sim/serialize.hh"
 #include "sim/sim_exit.hh"
 #else
@@ -118,9 +118,7 @@ SimpleThread::SimpleThread()
 SimpleThread::~SimpleThread()
 {
     delete physPort;
-#if FULL_SYSTEM
     delete virtPort;
-#endif
     delete tc;
 }
 
index 30dca83692940f30953d5c4b957ee0951b9d8fb6..4baf832f6420e067a5370421959f2ea12ca420f5 100644 (file)
@@ -207,15 +207,13 @@ 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.
      */
     VirtualPort *getVirtPort() { return virtPort; }
-#endif
-
-    FunctionalPort *getPhysPort() { return physPort; }
 
     Status status() const { return _status; }
 
index 7d98a4049e644b38517b3357f85f4f0968b3512f..eac214f77158768343dff8f0a919950ada68f139 100644 (file)
@@ -128,8 +128,6 @@ class ThreadContext
 #if FULL_SYSTEM
     virtual TheISA::Kernel::Statistics *getKernelStats() = 0;
 
-    virtual VirtualPort *getVirtPort() = 0;
-
     virtual void connectMemPorts(ThreadContext *tc) = 0;
 #else
     virtual TranslatingPort *getMemPort() = 0;
@@ -137,6 +135,8 @@ class ThreadContext
     virtual Process *getProcessPtr() = 0;
 #endif
 
+    virtual VirtualPort *getVirtPort() = 0;
+
     virtual FunctionalPort *getPhysPort() = 0;
 
     virtual Status status() const = 0;
@@ -298,8 +298,6 @@ class ProxyThreadContext : public ThreadContext
     TheISA::Kernel::Statistics *getKernelStats()
     { return actualTC->getKernelStats(); }
 
-    VirtualPort *getVirtPort() { return actualTC->getVirtPort(); }
-
     void connectMemPorts(ThreadContext *tc) { actualTC->connectMemPorts(tc); }
 #else
     TranslatingPort *getMemPort() { return actualTC->getMemPort(); }
@@ -307,6 +305,8 @@ class ProxyThreadContext : public ThreadContext
     Process *getProcessPtr() { return actualTC->getProcessPtr(); }
 #endif
 
+    VirtualPort *getVirtPort() { return actualTC->getVirtPort(); }
+
     FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
 
     Status status() const { return actualTC->status(); }
index 0abe2bf81659a6becbd598eae2ee3187daab552e..a0fd5d7a1378bc8e52c595104ad12aeae095c3f2 100644 (file)
 #include "cpu/thread_state.hh"
 #include "mem/port.hh"
 #include "mem/translating_port.hh"
+#include "mem/vport.hh"
 #include "sim/serialize.hh"
 
 #if FULL_SYSTEM
 #include "arch/kernel_stats.hh"
 #include "cpu/quiesce_event.hh"
-#include "mem/vport.hh"
 #endif
 
 #if FULL_SYSTEM
@@ -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), virtPort(NULL),
+      kernelStats(NULL),
 #else
       port(NULL), process(_process),
 #endif
-      physPort(NULL), funcExeInst(0), storeCondFailures(0)
+      virtPort(NULL), physPort(NULL), funcExeInst(0), storeCondFailures(0)
 {
 }
 
@@ -118,14 +118,6 @@ ThreadState::connectPhysPort()
     connectToMemFunc(physPort);
 }
 
-#if FULL_SYSTEM
-void
-ThreadState::connectMemPorts(ThreadContext *tc)
-{
-    connectPhysPort();
-    connectVirtPort(tc);
-}
-
 void
 ThreadState::connectVirtPort(ThreadContext *tc)
 {
@@ -140,6 +132,14 @@ ThreadState::connectVirtPort(ThreadContext *tc)
     connectToMemFunc(virtPort);
 }
 
+#if FULL_SYSTEM
+void
+ThreadState::connectMemPorts(ThreadContext *tc)
+{
+    connectPhysPort();
+    connectVirtPort(tc);
+}
+
 void
 ThreadState::profileClear()
 {
index b7727f4eee7473bc6ed69046e92df53fe20e774d..8fd99f7cfe5cc637012853d53725b11651768ae1 100644 (file)
@@ -94,11 +94,11 @@ struct ThreadState {
 
     void connectPhysPort();
 
+    void connectVirtPort(ThreadContext *tc);
+
 #if FULL_SYSTEM
     void connectMemPorts(ThreadContext *tc);
 
-    void connectVirtPort(ThreadContext *tc);
-
     void dumpFuncProfile();
 
     EndQuiesceEvent *getQuiesceEvent() { return quiesceEvent; }
@@ -108,8 +108,6 @@ struct ThreadState {
     void profileSample();
 
     TheISA::Kernel::Statistics *getKernelStats() { return kernelStats; }
-
-    VirtualPort *getVirtPort() { return virtPort; }
 #else
     Process *getProcessPtr() { return process; }
 
@@ -118,6 +116,8 @@ struct ThreadState {
     void setMemPort(TranslatingPort *_port) { port = _port; }
 #endif
 
+    VirtualPort *getVirtPort() { return virtPort; }
+
     FunctionalPort *getPhysPort() { return physPort; }
 
     void setPhysPort(FunctionalPort *port) { physPort = port; }
@@ -186,15 +186,16 @@ struct ThreadState {
 
     TheISA::Kernel::Statistics *kernelStats;
   protected:
-    /** A functional port, outgoing only, for functional accesse to virtual
-     * addresses. */
-    VirtualPort *virtPort;
 #else
     TranslatingPort *port;
 
     Process *process;
 #endif
 
+    /** A functional port, outgoing only, for functional accesse to virtual
+     * addresses. */
+    VirtualPort *virtPort;
+
     /** A functional port outgoing only for functional accesses to physical
      * addresses.*/
     FunctionalPort *physPort;
index 298e1e09fba758e6fcf650560a0c2bcb18f23ab8..c446772d863f3bc744cdd060487739220bb9cd6b 100644 (file)
@@ -37,19 +37,18 @@ SimObject('MemObject.py')
 Source('bridge.cc')
 Source('bus.cc')
 Source('mem_object.cc')
+Source('mport.cc')
 Source('packet.cc')
 Source('port.cc')
 Source('tport.cc')
-Source('mport.cc')
+Source('vport.cc')
 
 if env['TARGET_ISA'] != 'no':
     SimObject('PhysicalMemory.py')
     Source('dram.cc')
     Source('physical.cc')
 
-if env['FULL_SYSTEM']:
-    Source('vport.cc')
-elif env['TARGET_ISA'] != 'no':
+if not env['FULL_SYSTEM'] and env['TARGET_ISA'] != 'no':
     Source('page_table.cc')
     Source('translating_port.cc')