#include "base/trace.hh"
#include "config/the_isa.hh"
#include "cpu/base.hh"
-#include "cpu/quiesce_event.hh"
#include "debug/Context.hh"
#include "debug/Quiesce.hh"
-#include "kern/kernel_stats.hh"
#include "params/BaseCPU.hh"
#include "sim/full_system.hh"
void
ThreadContext::quiesce()
{
- DPRINTF(Quiesce, "%s: quiesce()\n", getCpuPtr()->name());
-
- suspend();
- if (getKernelStats())
- getKernelStats()->quiesce();
+ getSystemPtr()->threads.quiesce(contextId());
}
void
ThreadContext::quiesceTick(Tick resume)
{
- BaseCPU *cpu = getCpuPtr();
-
- EndQuiesceEvent *quiesceEvent = getQuiesceEvent();
-
- cpu->reschedule(quiesceEvent, resume, true);
-
- DPRINTF(Quiesce, "%s: quiesceTick until %lu\n", cpu->name(), resume);
-
- suspend();
- if (getKernelStats())
- getKernelStats()->quiesce();
+ getSystemPtr()->threads.quiesceTick(contextId(), resume);
}
void
ntc.setContextId(otc.contextId());
ntc.setThreadId(otc.threadId());
- if (FullSystem) {
+ if (FullSystem)
assert(ntc.getSystemPtr() == otc.getSystemPtr());
- BaseCPU *ncpu(ntc.getCpuPtr());
- assert(ncpu);
- EndQuiesceEvent *oqe(otc.getQuiesceEvent());
- assert(oqe);
- assert(oqe->tc == &otc);
-
- BaseCPU *ocpu(otc.getCpuPtr());
- assert(ocpu);
- EndQuiesceEvent *nqe(ntc.getQuiesceEvent());
- assert(nqe);
- assert(nqe->tc == &ntc);
-
- if (oqe->scheduled()) {
- ncpu->schedule(nqe, oqe->when());
- ocpu->deschedule(oqe);
- }
- }
-
otc.setStatus(ThreadContext::Halted);
}