summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
authorSteve Reinhardt <steve.reinhardt@amd.com>2009-04-17 16:54:58 -0700
committerSteve Reinhardt <steve.reinhardt@amd.com>2009-04-17 16:54:58 -0700
commit14808ecac9de9fe04eb58a4ca9393e3b4f0a60ae (patch)
tree1f310d1ff055192e736addbdc9e9016923027c85 /src/cpu
parentb146131d18c1567acdc9bbba5acd73ade086ded8 (diff)
downloadgem5-14808ecac9de9fe04eb58a4ca9393e3b4f0a60ae.tar.xz
o3, inorder: fix FS bug due to initializing ThreadState to Halted.
For some reason o3 FS init() only called initCPU if the thread state was Suspended, which was no longer the case. There's no apparent reason to check, so I whacked the test completely rather than changing the check to Halted. The inorder init() was also updated to be symmetric, though the previous code was just a fancy no-op.
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/inorder/cpu.cc14
-rw-r--r--src/cpu/o3/cpu.cc13
2 files changed, 8 insertions, 19 deletions
diff --git a/src/cpu/inorder/cpu.cc b/src/cpu/inorder/cpu.cc
index 9e3843e20..0b38f39bc 100644
--- a/src/cpu/inorder/cpu.cc
+++ b/src/cpu/inorder/cpu.cc
@@ -29,6 +29,8 @@
*
*/
+#include "config/full_system.hh"
+
#include "arch/utility.hh"
#include "cpu/exetrace.hh"
#include "cpu/activity.hh"
@@ -420,16 +422,12 @@ InOrderCPU::init()
for (int i = 0; i < number_of_threads; ++i)
thread[i]->inSyscall = true;
+#if FULL_SYSTEM
for (int tid=0; tid < number_of_threads; tid++) {
-
- ThreadContext *src_tc = thread[tid]->getTC();
-
- // Threads start in the Suspended State
- if (src_tc->status() != ThreadContext::Suspended) {
- continue;
- }
-
+ ThreadContext *src_tc = threadContexts[tid];
+ TheISA::initCPU(src_tc, src_tc->contextId());
}
+#endif
// Clear inSyscall.
for (int i = 0; i < number_of_threads; ++i)
diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc
index 83a012164..038e5daaa 100644
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@ -568,21 +568,12 @@ FullO3CPU<Impl>::init()
for (int i = 0; i < number_of_threads; ++i)
thread[i]->inSyscall = true;
- for (int tid=0; tid < number_of_threads; tid++) {
#if FULL_SYSTEM
+ for (int tid=0; tid < number_of_threads; tid++) {
ThreadContext *src_tc = threadContexts[tid];
-#else
- ThreadContext *src_tc = thread[tid]->getTC();
-#endif
- // Threads start in the Suspended State
- if (src_tc->status() != ThreadContext::Suspended) {
- continue;
- }
-
-#if FULL_SYSTEM
TheISA::initCPU(src_tc, src_tc->contextId());
-#endif
}
+#endif
// Clear inSyscall.
for (int i = 0; i < number_of_threads; ++i)