changeset afe8476ee9e9 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=afe8476ee9e9
description:
pseudoinst: get rid of mainEventQueue references.
Avoid direct references to mainEventQueue in pseudo-insts
by indirecting through associated CPU object.
Made exitSimLoop() more flexible to enable some of these.
diffstat:
src/sim/pseudo_inst.cc | 24 +++++++++++++-----------
src/sim/sim_events.cc | 6 +++---
src/sim/sim_exit.hh | 4 +++-
3 files changed, 19 insertions(+), 15 deletions(-)
diffs (107 lines):
diff -r 5d3dad7a1b36 -r afe8476ee9e9 src/sim/pseudo_inst.cc
--- a/src/sim/pseudo_inst.cc Fri Jan 07 21:50:29 2011 -0800
+++ b/src/sim/pseudo_inst.cc Fri Jan 07 21:50:29 2011 -0800
@@ -88,17 +88,19 @@
void
quiesceNs(ThreadContext *tc, uint64_t ns)
{
- if (!tc->getCpuPtr()->params()->do_quiesce || ns == 0)
+ BaseCPU *cpu = tc->getCpuPtr();
+
+ if (!cpu->params()->do_quiesce || ns == 0)
return;
EndQuiesceEvent *quiesceEvent = tc->getQuiesceEvent();
Tick resume = curTick + SimClock::Int::ns * ns;
- mainEventQueue.reschedule(quiesceEvent, resume, true);
+ cpu->reschedule(quiesceEvent, resume, true);
DPRINTF(Quiesce, "%s: quiesceNs(%d) until %d\n",
- tc->getCpuPtr()->name(), ns, resume);
+ cpu->name(), ns, resume);
tc->suspend();
if (tc->getKernelStats())
@@ -108,17 +110,19 @@
void
quiesceCycles(ThreadContext *tc, uint64_t cycles)
{
- if (!tc->getCpuPtr()->params()->do_quiesce || cycles == 0)
+ BaseCPU *cpu = tc->getCpuPtr();
+
+ if (!cpu->params()->do_quiesce || cycles == 0)
return;
EndQuiesceEvent *quiesceEvent = tc->getQuiesceEvent();
- Tick resume = curTick + tc->getCpuPtr()->ticks(cycles);
+ Tick resume = curTick + cpu->ticks(cycles);
- mainEventQueue.reschedule(quiesceEvent, resume, true);
+ cpu->reschedule(quiesceEvent, resume, true);
DPRINTF(Quiesce, "%s: quiesceCycles(%d) until %d\n",
- tc->getCpuPtr()->name(), cycles, resume);
+ cpu->name(), cycles, resume);
tc->suspend();
if (tc->getKernelStats())
@@ -153,8 +157,7 @@
m5exit(ThreadContext *tc, Tick delay)
{
Tick when = curTick + delay * SimClock::Int::ns;
- Event *event = new SimLoopExitEvent("m5_exit instruction encountered", 0);
- mainEventQueue.schedule(event, when);
+ exitSimLoop("m5_exit instruction encountered", 0, when);
}
#if FULL_SYSTEM
@@ -271,8 +274,7 @@
Tick when = curTick + delay * SimClock::Int::ns;
Tick repeat = period * SimClock::Int::ns;
- Event *event = new SimLoopExitEvent("checkpoint", 0, repeat);
- mainEventQueue.schedule(event, when);
+ exitSimLoop("checkpoint", 0, when, repeat);
}
#if FULL_SYSTEM
diff -r 5d3dad7a1b36 -r afe8476ee9e9 src/sim/sim_events.cc
--- a/src/sim/sim_events.cc Fri Jan 07 21:50:29 2011 -0800
+++ b/src/sim/sim_events.cc Fri Jan 07 21:50:29 2011 -0800
@@ -78,10 +78,10 @@
}
void
-exitSimLoop(const std::string &message, int exit_code)
+exitSimLoop(const std::string &message, int exit_code, Tick when, Tick repeat)
{
- Event *event = new SimLoopExitEvent(message, exit_code);
- mainEventQueue.schedule(event, curTick);
+ Event *event = new SimLoopExitEvent(message, exit_code, repeat);
+ mainEventQueue.schedule(event, when);
}
CountedDrainEvent::CountedDrainEvent()
diff -r 5d3dad7a1b36 -r afe8476ee9e9 src/sim/sim_exit.hh
--- a/src/sim/sim_exit.hh Fri Jan 07 21:50:29 2011 -0800
+++ b/src/sim/sim_exit.hh Fri Jan 07 21:50:29 2011 -0800
@@ -35,6 +35,7 @@
#include <string>
#include "base/types.hh"
+#include "sim/core.hh"
// forward declaration
class Callback;
@@ -49,6 +50,7 @@
/// Python) at the end of the current cycle (curTick). The message
/// and exit_code parameters are saved in the SimLoopExitEvent to
/// indicate why the exit occurred.
-void exitSimLoop(const std::string &message, int exit_code = 0);
+void exitSimLoop(const std::string &message, int exit_code = 0,
+ Tick when = curTick, Tick repeat = 0);
#endif // __SIM_EXIT_HH__
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev