diff options
author | Ali Saidi <Ali.Saidi@ARM.com> | 2013-01-07 13:05:33 -0500 |
---|---|---|
committer | Ali Saidi <Ali.Saidi@ARM.com> | 2013-01-07 13:05:33 -0500 |
commit | 5146a69835bc9ba37fba7d3b0ff72ecaf9b98b74 (patch) | |
tree | 694786d4ffd6384a3736d48e1fd20e29408bf56d /src/cpu/ozone | |
parent | 90bd20aae2bc940397628a4598b5b25f2c8549b5 (diff) | |
download | gem5-5146a69835bc9ba37fba7d3b0ff72ecaf9b98b74.tar.xz |
cpu: rename the misleading inSyscall to noSquashFromTC
isSyscall was originally created because during handling of a syscall in SE
mode the threadcontext had to be updated. However, in many places this is used
in FS mode (e.g. fault handlers) and the name doesn't make much sense. The
boolean actually stops gem5 from squashing speculative and non-committed state
when a write to a threadcontext happens, so re-name the variable to something
more appropriate
Diffstat (limited to 'src/cpu/ozone')
-rw-r--r-- | src/cpu/ozone/back_end_impl.hh | 8 | ||||
-rw-r--r-- | src/cpu/ozone/cpu_impl.hh | 26 | ||||
-rw-r--r-- | src/cpu/ozone/dyn_inst_impl.hh | 12 | ||||
-rw-r--r-- | src/cpu/ozone/inorder_back_end_impl.hh | 24 | ||||
-rw-r--r-- | src/cpu/ozone/lw_back_end_impl.hh | 18 | ||||
-rw-r--r-- | src/cpu/ozone/thread_state.hh | 6 |
6 files changed, 47 insertions, 47 deletions
diff --git a/src/cpu/ozone/back_end_impl.hh b/src/cpu/ozone/back_end_impl.hh index 9c9ca311e..bcc897369 100644 --- a/src/cpu/ozone/back_end_impl.hh +++ b/src/cpu/ozone/back_end_impl.hh @@ -1513,16 +1513,16 @@ BackEnd<Impl>::commitInst(int inst_num) DPRINTF(BE, "Inst [sn:%lli] PC %#x has a fault\n", inst->seqNum, inst->readPC()); -// assert(!thread->inSyscall); +// assert(!thread->noSquashFromTC); -// thread->inSyscall = true; +// thread->noSquashFromTC = true; // Consider holding onto the trap and waiting until the trap event // happens for this to be executed. inst_fault->invoke(thread->getXCProxy()); // Exit state update mode to avoid accidental updating. -// thread->inSyscall = false; +// thread->noSquashFromTC = false; // commitStatus = TrapPending; @@ -1571,7 +1571,7 @@ BackEnd<Impl>::commitInst(int inst_num) Addr oldpc; do { if (count == 0) - assert(!thread->inSyscall && !thread->trapPending); + assert(!thread->noSquashFromTC && !thread->trapPending); oldpc = thread->readPC(); cpu->system->pcEventQueue.service( thread->getXCProxy()); diff --git a/src/cpu/ozone/cpu_impl.hh b/src/cpu/ozone/cpu_impl.hh index 3a32c07c6..fe8ae2551 100644 --- a/src/cpu/ozone/cpu_impl.hh +++ b/src/cpu/ozone/cpu_impl.hh @@ -110,7 +110,7 @@ OzoneCPU<Impl>::OzoneCPU(Params *p) ozoneTC.cpu = this; ozoneTC.thread = &thread; - thread.inSyscall = false; + thread.noSquashFromTC = false; itb = p->itb; dtb = p->dtb; @@ -236,7 +236,7 @@ OzoneCPU<Impl>::takeOverFrom(BaseCPU *oldCPU) BaseCPU::takeOverFrom(oldCPU); thread.trapPending = false; - thread.inSyscall = false; + thread.noSquashFromTC = false; backEnd->takeOverFrom(); frontEnd->takeOverFrom(); @@ -375,7 +375,7 @@ OzoneCPU<Impl>::init() BaseCPU::init(); // Mark this as in syscall so it won't need to squash - thread.inSyscall = true; + thread.noSquashFromTC = true; if (FullSystem) { for (int i = 0; i < threadContexts.size(); ++i) { ThreadContext *tc = threadContexts[i]; @@ -387,7 +387,7 @@ OzoneCPU<Impl>::init() frontEnd->renameTable.copyFrom(thread.renameTable); backEnd->renameTable.copyFrom(thread.renameTable); - thread.inSyscall = false; + thread.noSquashFromTC = false; } template <class Impl> @@ -476,7 +476,7 @@ template <class Impl> void OzoneCPU<Impl>::squashFromTC() { - thread.inSyscall = true; + thread.noSquashFromTC = true; backEnd->generateTCEvent(); } @@ -487,7 +487,7 @@ OzoneCPU<Impl>::syscall(uint64_t &callnum) // Not sure this copy is needed, depending on how the TC proxy is made. thread.renameTable.copyFrom(backEnd->renameTable); - thread.inSyscall = true; + thread.noSquashFromTC = true; thread.funcExeInst++; @@ -497,7 +497,7 @@ OzoneCPU<Impl>::syscall(uint64_t &callnum) thread.funcExeInst--; - thread.inSyscall = false; + thread.noSquashFromTC = false; frontEnd->renameTable.copyFrom(thread.renameTable); backEnd->renameTable.copyFrom(thread.renameTable); @@ -774,7 +774,7 @@ OzoneCPU<Impl>::OzoneTC::setIntReg(int reg_idx, uint64_t val) { thread->renameTable[reg_idx]->setIntResult(val); - if (!thread->inSyscall) { + if (!thread->noSquashFromTC) { cpu->squashFromTC(); } } @@ -787,7 +787,7 @@ OzoneCPU<Impl>::OzoneTC::setFloatReg(int reg_idx, FloatReg val) thread->renameTable[idx]->setDoubleResult(val); - if (!thread->inSyscall) { + if (!thread->noSquashFromTC) { cpu->squashFromTC(); } } @@ -806,7 +806,7 @@ OzoneCPU<Impl>::OzoneTC::setPC(Addr val) thread->PC = val; cpu->frontEnd->setPC(val); - if (!thread->inSyscall) { + if (!thread->noSquashFromTC) { cpu->squashFromTC(); } } @@ -818,7 +818,7 @@ OzoneCPU<Impl>::OzoneTC::setNextPC(Addr val) thread->nextPC = val; cpu->frontEnd->setNextPC(val); - if (!thread->inSyscall) { + if (!thread->noSquashFromTC) { cpu->squashFromTC(); } } @@ -844,7 +844,7 @@ OzoneCPU<Impl>::OzoneTC::setMiscRegNoEffect(int misc_reg, const MiscReg &val) // Needs to setup a squash event unless we're in syscall mode thread->miscRegFile.setRegNoEffect(misc_reg, val); - if (!thread->inSyscall) { + if (!thread->noSquashFromTC) { cpu->squashFromTC(); } } @@ -856,7 +856,7 @@ OzoneCPU<Impl>::OzoneTC::setMiscReg(int misc_reg, const MiscReg &val) // Needs to setup a squash event unless we're in syscall mode thread->miscRegFile.setReg(misc_reg, val, this); - if (!thread->inSyscall) { + if (!thread->noSquashFromTC) { cpu->squashFromTC(); } } diff --git a/src/cpu/ozone/dyn_inst_impl.hh b/src/cpu/ozone/dyn_inst_impl.hh index 96d326ffc..2066c58d7 100644 --- a/src/cpu/ozone/dyn_inst_impl.hh +++ b/src/cpu/ozone/dyn_inst_impl.hh @@ -71,12 +71,12 @@ OzoneDynInst<Impl>::execute() // @todo: Pretty convoluted way to avoid squashing from happening when using // the XC during an instruction's execution (specifically for instructions // that have sideeffects that use the XC). Fix this. - bool in_syscall = this->thread->inSyscall; - this->thread->inSyscall = true; + bool no_squash_from_TC = this->thread->noSquashFromTC; + this->thread->noSquashFromTC = true; this->fault = this->staticInst->execute(this, this->traceData); - this->thread->inSyscall = in_syscall; + this->thread->noSquashFromTC = no_squash_from_TC; return this->fault; } @@ -88,12 +88,12 @@ OzoneDynInst<Impl>::initiateAcc() // @todo: Pretty convoluted way to avoid squashing from happening when using // the XC during an instruction's execution (specifically for instructions // that have sideeffects that use the XC). Fix this. - bool in_syscall = this->thread->inSyscall; - this->thread->inSyscall = true; + bool no_squash_from_TC = this->thread->noSquashFromTC; + this->thread->noSquashFromTC = true; this->fault = this->staticInst->initiateAcc(this, this->traceData); - this->thread->inSyscall = in_syscall; + this->thread->noSquashFromTC = no_squash_from_TC; return this->fault; } diff --git a/src/cpu/ozone/inorder_back_end_impl.hh b/src/cpu/ozone/inorder_back_end_impl.hh index 59d1dab0d..7bb876e4a 100644 --- a/src/cpu/ozone/inorder_back_end_impl.hh +++ b/src/cpu/ozone/inorder_back_end_impl.hh @@ -117,7 +117,7 @@ InorderBackEnd<Impl>::checkInterrupts() } if (ipl && ipl > thread->readMiscRegNoEffect(IPR_IPLR)) { - thread->inSyscall = true; + thread->noSquashFromTC = true; thread->setMiscRegNoEffect(IPR_ISR, summary); thread->setMiscRegNoEffect(IPR_INTID, ipl); @@ -128,7 +128,7 @@ InorderBackEnd<Impl>::checkInterrupts() // May need to go 1 inst prior squashPending = true; - thread->inSyscall = false; + thread->noSquashFromTC = false; setSquashInfoFromXC(); } @@ -206,7 +206,7 @@ InorderBackEnd<Impl>::executeInsts() Addr oldpc; do { if (count == 0) - assert(!thread->inSyscall && !thread->trapPending); + assert(!thread->noSquashFromTC && !thread->trapPending); oldpc = thread->readPC(); cpu->system->pcEventQueue.service( thread->getXCProxy()); @@ -291,16 +291,16 @@ InorderBackEnd<Impl>::executeInsts() DPRINTF(IBE, "Inst [sn:%lli] PC %#x has a fault\n", inst->seqNum, inst->readPC()); - assert(!thread->inSyscall); + assert(!thread->noSquashFromTC); - thread->inSyscall = true; + thread->noSquashFromTC = true; // Consider holding onto the trap and waiting until the trap event // happens for this to be executed. inst_fault->invoke(xc); // Exit state update mode to avoid accidental updating. - thread->inSyscall = false; + thread->noSquashFromTC = false; squashPending = true; @@ -365,16 +365,16 @@ InorderBackEnd<Impl>::handleFault() { DPRINTF(Commit, "Handling fault from fetch\n"); - assert(!thread->inSyscall); + assert(!thread->noSquashFromTC); - thread->inSyscall = true; + thread->noSquashFromTC = true; // Consider holding onto the trap and waiting until the trap event // happens for this to be executed. faultFromFetch->invoke(xc); // Exit state update mode to avoid accidental updating. - thread->inSyscall = false; + thread->noSquashFromTC = false; squashPending = true; @@ -415,8 +415,8 @@ InorderBackEnd<Impl>::squash(const InstSeqNum &squash_num, const Addr &next_PC) squashPending = false; // Probably want to make sure that this squash is the one that set the - // thread into inSyscall mode. - thread->inSyscall = false; + // thread into noSquashFromTC mode. + thread->noSquashFromTC = false; // Tell front end to squash, reset PC to new one. frontEnd->squash(squash_num, next_PC); @@ -431,7 +431,7 @@ InorderBackEnd<Impl>::squashFromXC() // Record that I need to squash squashPending = true; - thread->inSyscall = true; + thread->noSquashFromTC = true; } template <class Impl> diff --git a/src/cpu/ozone/lw_back_end_impl.hh b/src/cpu/ozone/lw_back_end_impl.hh index cd23293b4..79ae43465 100644 --- a/src/cpu/ozone/lw_back_end_impl.hh +++ b/src/cpu/ozone/lw_back_end_impl.hh @@ -531,8 +531,8 @@ LWBackEnd<Impl>::checkInterrupts() // Not sure which thread should be the one to interrupt. For now // always do thread 0. - assert(!thread->inSyscall); - thread->inSyscall = true; + assert(!thread->noSquashFromTC); + thread->noSquashFromTC = true; // CPU will handle implementation of the interrupt. cpu->processInterrupts(); @@ -541,7 +541,7 @@ LWBackEnd<Impl>::checkInterrupts() commitStatus = TrapPending; // Exit state update mode to avoid accidental updating. - thread->inSyscall = false; + thread->noSquashFromTC = false; // Generate trap squash event. generateTrapEvent(); @@ -559,16 +559,16 @@ LWBackEnd<Impl>::handleFault(Fault &fault, Tick latency) { DPRINTF(BE, "Handling fault!\n"); - assert(!thread->inSyscall); + assert(!thread->noSquashFromTC); - thread->inSyscall = true; + thread->noSquashFromTC = true; // Consider holding onto the trap and waiting until the trap event // happens for this to be executed. fault->invoke(thread->getTC()); // Exit state update mode to avoid accidental updating. - thread->inSyscall = false; + thread->noSquashFromTC = false; commitStatus = TrapPending; @@ -1205,7 +1205,7 @@ LWBackEnd<Impl>::commitInst(int inst_num) Addr oldpc; do { if (count == 0) - assert(!thread->inSyscall && !thread->trapPending); + assert(!thread->noSquashFromTC && !thread->trapPending); oldpc = thread->readPC(); cpu->system->pcEventQueue.service( thread->getTC()); @@ -1357,7 +1357,7 @@ LWBackEnd<Impl>::squashFromTC() frontEnd->interruptPending = false; thread->trapPending = false; - thread->inSyscall = false; + thread->noSquashFromTC = false; tcSquash = false; commitStatus = Running; } @@ -1373,7 +1373,7 @@ LWBackEnd<Impl>::squashFromTrap() frontEnd->interruptPending = false; thread->trapPending = false; - thread->inSyscall = false; + thread->noSquashFromTC = false; trapSquash = false; commitStatus = Running; } diff --git a/src/cpu/ozone/thread_state.hh b/src/cpu/ozone/thread_state.hh index 98ecd850c..0c03155b8 100644 --- a/src/cpu/ozone/thread_state.hh +++ b/src/cpu/ozone/thread_state.hh @@ -65,7 +65,7 @@ struct OzoneThreadState : public ThreadState { OzoneThreadState(CPUType *_cpu, int _thread_num) : ThreadState(_cpu, -1, _thread_num), - intrflag(0), cpu(_cpu), inSyscall(0), trapPending(0) + intrflag(0), cpu(_cpu), noSquashFromTC(false), trapPending(false) { if (cpu->params->profile) { profile = new FunctionProfile(cpu->params->system->kernelSymtab); @@ -85,7 +85,7 @@ struct OzoneThreadState : public ThreadState { OzoneThreadState(CPUType *_cpu, int _thread_num, Process *_process) : ThreadState(_cpu, -1, _thread_num, _process), - cpu(_cpu), inSyscall(0), trapPending(0) + cpu(_cpu), noSquashFromTC(false), trapPending(false) { miscRegFile.clear(); } @@ -102,7 +102,7 @@ struct OzoneThreadState : public ThreadState { typename Impl::CPUType *cpu; - bool inSyscall; + bool noSquashFromTC; bool trapPending; |