46 #include "arch/kernel_stats.hh"
49 #include "config/the_isa.hh"
52 #include "debug/Context.hh"
53 #include "debug/Quiesce.hh"
54 #include "params/BaseCPU.hh"
60 DPRINTF(Context,
"Comparing thread contexts\n");
67 panic(
"Int reg idx %d doesn't match, one: %#x, two: %#x",
76 panic(
"Float reg idx %d doesn't match, one: %#x, two: %#x",
83 panic(
"Misc reg idx %d doesn't match, one: %#x, two: %#x",
92 panic(
"CC reg idx %d doesn't match, one: %#x, two: %#x",
96 panic(
"PC state doesn't match.");
97 int id1 = one->
cpuId();
98 int id2 = two->
cpuId();
100 panic(
"CPU ids don't match, one: %d, two: %d", id1, id2);
105 panic(
"Context ids don't match, one: %d, two: %d", id1, id2);
129 if (!cpu->params()->do_quiesce)
134 cpu->reschedule(quiesceEvent, resume,
true);
136 DPRINTF(Quiesce,
"%s: quiesceTick until %lu\n", cpu->name(), resume);
146 using namespace TheISA;
160 #ifdef ISA_HAS_CC_REGS
175 using namespace TheISA;
189 #ifdef ISA_HAS_CC_REGS
197 pcState.unserialize(cp);
220 assert(oqe->tc == &otc);
226 assert(nqe->tc == &ntc);
228 if (oqe->scheduled()) {
229 ncpu->schedule(nqe, oqe->when());
230 ocpu->deschedule(oqe);
virtual System * getSystemPtr()=0
const std::string & name()
virtual CCReg readCCReg(int reg_idx)=0
virtual void setFloatRegBitsFlat(int idx, FloatRegBits val)=0
virtual void setStatus(Status new_status)=0
virtual uint64_t readIntRegFlat(int idx)=0
Flat register interfaces.
virtual MiscReg readMiscRegNoEffect(int misc_reg) const =0
virtual FloatRegBits readFloatRegBitsFlat(int idx)=0
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
virtual Process * getProcessPtr()=0
virtual void setIntRegFlat(int idx, uint64_t val)=0
virtual BaseCPU * getCpuPtr()=0
virtual FloatRegBits readFloatRegBits(int reg_idx)=0
virtual TheISA::PCState pcState()=0
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Event for timing out quiesce instruction.
void quiesce()
Quiesce thread context.
void serialize(ThreadContext &tc, CheckpointOut &cp)
Thread context serialization helpers.
virtual CCReg readCCRegFlat(int idx)=0
virtual EndQuiesceEvent * getQuiesceEvent()=0
virtual uint64_t readIntReg(int reg_idx)=0
virtual int cpuId() const =0
void takeOverFrom(ThreadContext &ntc, ThreadContext &otc)
Copy state between thread contexts in preparation for CPU handover.
uint64_t Tick
Tick count type.
#define SERIALIZE_ARRAY(member, size)
virtual void suspend()=0
Set the status to Suspended.
virtual void setThreadId(int id)=0
void arrayParamOut(CheckpointOut &cp, const std::string &name, const CircleBuf< T > ¶m)
virtual void setCCRegFlat(int idx, CCReg val)=0
#define UNSERIALIZE_ARRAY(member, size)
virtual void setContextId(int id)=0
std::ostream CheckpointOut
static void compare(ThreadContext *one, ThreadContext *two)
function to compare two thread contexts (for debugging)
virtual void copyArchRegs(ThreadContext *tc)=0
GenericISA::SimplePCState< MachInst > PCState
virtual int threadId() const =0
virtual int contextId() const =0
virtual Status status() const =0
void arrayParamIn(CheckpointIn &cp, const std::string &name, CircleBuf< T > ¶m)
void quiesceTick(Tick resume)
Quiesce, suspend, and schedule activate at resume.
void unserialize(ThreadContext &tc, CheckpointIn &cp)
int ContextID
Globally unique thread context ID.
virtual TheISA::Kernel::Statistics * getKernelStats()=0