summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
authorSteve Reinhardt <steve.reinhardt@amd.com>2009-04-15 13:18:24 -0700
committerSteve Reinhardt <steve.reinhardt@amd.com>2009-04-15 13:18:24 -0700
commit7617dcf736b5b96d44aedccd51550be037e7b937 (patch)
treec45e67e334b961f1e9df6aecfef0a2061c393162 /src/cpu
parent48d4ca522a2f771188d93a2d5ff54cf505a8ca41 (diff)
downloadgem5-7617dcf736b5b96d44aedccd51550be037e7b937.tar.xz
ThreadState: initialize status to Halted in constructor.
This provides a common initial status for all threads independent of CPU model (unlike the prior situation where CPUs initialized threads to inconsistent states). This mostly matters for SE mode; in FS mode, ISA-specific startupCPU() methods generally handle boot-time initialization of thread contexts (since the right thing to do is ISA-dependent).
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/checker/cpu.cc2
-rw-r--r--src/cpu/inorder/cpu.cc4
-rw-r--r--src/cpu/o3/cpu.cc3
-rw-r--r--src/cpu/ozone/cpu_impl.hh1
-rw-r--r--src/cpu/thread_state.cc16
-rw-r--r--src/cpu/thread_state.hh3
6 files changed, 9 insertions, 20 deletions
diff --git a/src/cpu/checker/cpu.cc b/src/cpu/checker/cpu.cc
index 14777bc12..1c36ad22d 100644
--- a/src/cpu/checker/cpu.cc
+++ b/src/cpu/checker/cpu.cc
@@ -75,7 +75,6 @@ CheckerCPU::CheckerCPU(Params *p)
thread = new SimpleThread(this, /* thread_num */ 0, process,
/* asid */ 0);
- thread->setStatus(ThreadContext::Suspended);
tc = thread->getTC();
threadContexts.push_back(tc);
#endif
@@ -95,7 +94,6 @@ CheckerCPU::setSystem(System *system)
thread = new SimpleThread(this, 0, systemPtr, itb, dtb, false);
- thread->setStatus(ThreadContext::Suspended);
tc = thread->getTC();
threadContexts.push_back(tc);
delete thread->kernelStats;
diff --git a/src/cpu/inorder/cpu.cc b/src/cpu/inorder/cpu.cc
index 70877aae4..9e3843e20 100644
--- a/src/cpu/inorder/cpu.cc
+++ b/src/cpu/inorder/cpu.cc
@@ -193,10 +193,6 @@ InOrderCPU::InOrderCPU(Params *params)
i, this->thread[i]);
this->thread[i] = new Thread(this, i, params->workload[i],
i);
-
- // Start thread's off in "Suspended" status
- this->thread[i]->setStatus(ThreadContext::Suspended);
-
} else {
//Allocate Empty thread so M5 can use later
//when scheduling threads to CPU
diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc
index 1d7fb97c0..6a39f07be 100644
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@ -356,7 +356,6 @@ FullO3CPU<Impl>::FullO3CPU(DerivO3CPUParams *params)
// SMT is not supported in FS mode yet.
assert(this->numThreads == 1);
this->thread[i] = new Thread(this, 0);
- this->thread[i]->setStatus(ThreadContext::Suspended);
#else
if (i < params->workload.size()) {
DPRINTF(O3CPU, "Workload[%i] process is %#x",
@@ -365,8 +364,6 @@ FullO3CPU<Impl>::FullO3CPU(DerivO3CPUParams *params)
(typename Impl::O3CPU *)(this),
i, params->workload[i], i);
- this->thread[i]->setStatus(ThreadContext::Suspended);
-
//usedTids[i] = true;
//threadMap[i] = i;
} else {
diff --git a/src/cpu/ozone/cpu_impl.hh b/src/cpu/ozone/cpu_impl.hh
index 060ea6d78..ba1205010 100644
--- a/src/cpu/ozone/cpu_impl.hh
+++ b/src/cpu/ozone/cpu_impl.hh
@@ -131,7 +131,6 @@ OzoneCPU<Impl>::OzoneCPU(Params *p)
thread.inSyscall = false;
- thread.setStatus(ThreadContext::Suspended);
itb = p->itb;
dtb = p->dtb;
#if FULL_SYSTEM
diff --git a/src/cpu/thread_state.cc b/src/cpu/thread_state.cc
index b0e719ddf..09af2725a 100644
--- a/src/cpu/thread_state.cc
+++ b/src/cpu/thread_state.cc
@@ -44,20 +44,20 @@
#if FULL_SYSTEM
ThreadState::ThreadState(BaseCPU *cpu, int _tid)
- : baseCpu(cpu), _threadId(_tid), lastActivate(0), lastSuspend(0),
+#else
+ThreadState::ThreadState(BaseCPU *cpu, int _tid,
+ Process *_process, short _asid)
+#endif
+ : numInst(0), numLoad(0), _status(ThreadContext::Halted),
+ baseCpu(cpu), _threadId(_tid), lastActivate(0), lastSuspend(0),
+#if FULL_SYSTEM
profile(NULL), profileNode(NULL), profilePC(0), quiesceEvent(NULL),
kernelStats(NULL), physPort(NULL), virtPort(NULL),
- microPC(0), nextMicroPC(1), funcExeInst(0), storeCondFailures(0)
#else
-ThreadState::ThreadState(BaseCPU *cpu, int _tid, Process *_process,
- short _asid)
- : baseCpu(cpu), _threadId(_tid), lastActivate(0), lastSuspend(0),
port(NULL), process(_process), asid(_asid),
- microPC(0), nextMicroPC(1), funcExeInst(0), storeCondFailures(0)
#endif
+ microPC(0), nextMicroPC(1), funcExeInst(0), storeCondFailures(0)
{
- numInst = 0;
- numLoad = 0;
}
ThreadState::~ThreadState()
diff --git a/src/cpu/thread_state.hh b/src/cpu/thread_state.hh
index 99f0c2a87..dbae85998 100644
--- a/src/cpu/thread_state.hh
+++ b/src/cpu/thread_state.hh
@@ -68,8 +68,7 @@ struct ThreadState {
#if FULL_SYSTEM
ThreadState(BaseCPU *cpu, int _tid);
#else
- ThreadState(BaseCPU *cpu, int _tid, Process *_process,
- short _asid);
+ ThreadState(BaseCPU *cpu, int _tid, Process *_process, short _asid);
#endif
~ThreadState();