summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2010-01-31 18:28:12 -0500
committerKorey Sewell <ksewell@umich.edu>2010-01-31 18:28:12 -0500
commitb4e0ef78379dd5bab0ee6ec824bca3f51dd484c6 (patch)
treecffa5e792f60039a4a2289fadb2d057d5084478d
parent5e0b8337ed9c8aa975cd44df5565c2c3dde0c267 (diff)
downloadgem5-b4e0ef78379dd5bab0ee6ec824bca3f51dd484c6.tar.xz
inorder: set thread status'
set Active/Suspended/Halted status for threads. useful for system when determining if/when to exit simulation
-rw-r--r--src/cpu/inorder/cpu.cc12
-rw-r--r--src/cpu/inorder/thread_context.hh1
2 files changed, 10 insertions, 3 deletions
diff --git a/src/cpu/inorder/cpu.cc b/src/cpu/inorder/cpu.cc
index 5db86b258..d8fea79d9 100644
--- a/src/cpu/inorder/cpu.cc
+++ b/src/cpu/inorder/cpu.cc
@@ -711,6 +711,8 @@ InOrderCPU::activateThread(ThreadID tid)
thread[tid]->lastActivate = curTick;
+ tcBase(tid)->setStatus(ThreadContext::Active);
+
wakeCPU();
}
}
@@ -750,9 +752,11 @@ InOrderCPU::deactivateThread(ThreadID tid)
removePipelineStalls(*thread_it);
- //@TODO: change stage status' to Idle?
-
activeThreads.erase(thread_it);
+
+ // Ideally, this should be triggered from the
+ // suspendContext/Thread functions
+ tcBase(tid)->setStatus(ThreadContext::Suspended);
}
assert(!isThreadActive(tid));
@@ -854,6 +858,8 @@ InOrderCPU::haltThread(ThreadID tid)
squashThreadInPipeline(tid);
haltedThreads.push_back(tid);
+ tcBase(tid)->setStatus(ThreadContext::Halted);
+
if (threadModel == SwitchOnCacheMiss) {
activateNextReadyContext();
}
@@ -872,6 +878,8 @@ InOrderCPU::suspendThread(ThreadID tid)
deactivateThread(tid);
suspendedThreads.push_back(tid);
thread[tid]->lastSuspend = curTick;
+
+ tcBase(tid)->setStatus(ThreadContext::Suspended);
}
void
diff --git a/src/cpu/inorder/thread_context.hh b/src/cpu/inorder/thread_context.hh
index 820f3077f..6dd5f192f 100644
--- a/src/cpu/inorder/thread_context.hh
+++ b/src/cpu/inorder/thread_context.hh
@@ -64,7 +64,6 @@ class InOrderThreadContext : public ThreadContext
/** Pointer to the thread state that this TC corrseponds to. */
InOrderThreadState *thread;
-
/** Returns a pointer to the ITB. */
/** @TODO: PERF: Should we bind this to a pointer in constructor? */
TheISA::TLB *getITBPtr() { return cpu->getITBPtr(); }