changeset 7bf78d12b359 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=7bf78d12b359
description:
        ARM: Add support for switching CPUs

diffstat:

 src/arch/arm/table_walker.cc |  16 ++++++++++++++--
 src/arch/arm/table_walker.hh |   1 +
 src/arch/arm/utility.cc      |  17 +++++++++++++++++
 src/arch/arm/utility.hh      |   6 +-----
 4 files changed, 33 insertions(+), 7 deletions(-)

diffs (94 lines):

diff -r 2b65eb281f5f -r 7bf78d12b359 src/arch/arm/table_walker.cc
--- a/src/arch/arm/table_walker.cc      Mon Nov 15 14:04:03 2010 -0600
+++ b/src/arch/arm/table_walker.cc      Mon Nov 15 14:04:03 2010 -0600
@@ -43,6 +43,7 @@
 #include "dev/io_device.hh"
 #include "cpu/base.hh"
 #include "cpu/thread_context.hh"
+#include "sim/system.hh"
 
 using namespace ArmISA;
 
@@ -59,9 +60,10 @@
 }
 
 
-unsigned int TableWalker::drain(Event *de)
+unsigned int
+TableWalker::drain(Event *de)
 {
-    if (stateQueueL1.size() != 0 || stateQueueL2.size() != 0)
+    if (stateQueueL1.size() || stateQueueL2.size() || pendingQueue.size())
     {
         changeState(Draining);
         DPRINTF(Checkpoint, "TableWalker busy, wait to drain\n");
@@ -75,6 +77,16 @@
     }
 }
 
+void
+TableWalker::resume()
+{
+    MemObject::resume();
+    if ((params()->sys->getMemoryMode() == Enums::timing) && currState) {
+            delete currState;
+            currState = NULL;
+    }
+}
+
 Port*
 TableWalker::getPort(const std::string &if_name, int idx)
 {
diff -r 2b65eb281f5f -r 7bf78d12b359 src/arch/arm/table_walker.hh
--- a/src/arch/arm/table_walker.hh      Mon Nov 15 14:04:03 2010 -0600
+++ b/src/arch/arm/table_walker.hh      Mon Nov 15 14:04:03 2010 -0600
@@ -351,6 +351,7 @@
     }
 
     virtual unsigned int drain(Event *de);
+    virtual void resume();
     virtual Port *getPort(const std::string &if_name, int idx = -1);
 
     Fault walk(RequestPtr req, ThreadContext *tc, uint8_t cid, TLB::Mode mode,
diff -r 2b65eb281f5f -r 7bf78d12b359 src/arch/arm/utility.cc
--- a/src/arch/arm/utility.cc   Mon Nov 15 14:04:03 2010 -0600
+++ b/src/arch/arm/utility.cc   Mon Nov 15 14:04:03 2010 -0600
@@ -133,5 +133,22 @@
     tc->pcState(newPC);
 }
 
+void
+copyRegs(ThreadContext *src, ThreadContext *dest)
+{
+    int i;
+    for(i = 0; i < TheISA::NumIntRegs; i++)
+        dest->setIntReg(i, src->readIntReg(i));
+    for(i = 0; i < TheISA::NumFloatRegs; i++)
+        dest->setFloatReg(i, src->readFloatReg(i));
+    for(i = 0; i < TheISA::NumMiscRegs; i++)
+        dest->setMiscRegNoEffect(i, src->readMiscRegNoEffect(i));
 
+    // setMiscReg "with effect" will set the misc register mapping correctly.
+    // e.g. updateRegMap(val)
+    dest->setMiscReg(MISCREG_CPSR, src->readMiscRegNoEffect(MISCREG_CPSR));
+
+    // Lastly copy PC/NPC
+    dest->pcState(src->pcState());
 }
+}
diff -r 2b65eb281f5f -r 7bf78d12b359 src/arch/arm/utility.hh
--- a/src/arch/arm/utility.hh   Mon Nov 15 14:04:03 2010 -0600
+++ b/src/arch/arm/utility.hh   Mon Nov 15 14:04:03 2010 -0600
@@ -102,11 +102,7 @@
         tc->activate(0);
     }
 
-    static inline void
-    copyRegs(ThreadContext *src, ThreadContext *dest)
-    {
-        panic("Copy Regs Not Implemented Yet\n");
-    }
+    void copyRegs(ThreadContext *src, ThreadContext *dest);
 
     static inline void
     copyMiscRegs(ThreadContext *src, ThreadContext *dest)
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to