diff options
author | Steve Reinhardt <steve.reinhardt@amd.com> | 2009-04-17 16:54:58 -0700 |
---|---|---|
committer | Steve Reinhardt <steve.reinhardt@amd.com> | 2009-04-17 16:54:58 -0700 |
commit | 14808ecac9de9fe04eb58a4ca9393e3b4f0a60ae (patch) | |
tree | 1f310d1ff055192e736addbdc9e9016923027c85 /src/cpu | |
parent | b146131d18c1567acdc9bbba5acd73ade086ded8 (diff) | |
download | gem5-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.cc | 14 | ||||
-rw-r--r-- | src/cpu/o3/cpu.cc | 13 |
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) |