diff options
Diffstat (limited to 'src/cpu/o3/thread_state.hh')
-rw-r--r-- | src/cpu/o3/thread_state.hh | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/cpu/o3/thread_state.hh b/src/cpu/o3/thread_state.hh index 9273b00da..96ccfc95c 100644 --- a/src/cpu/o3/thread_state.hh +++ b/src/cpu/o3/thread_state.hh @@ -61,10 +61,15 @@ struct O3ThreadState : public ThreadState { /** Pointer to the CPU. */ O3CPU *cpu; public: - /** Whether or not the thread is currently in syscall mode, and - * thus able to be externally updated without squashing. + /* This variable controls if writes to a thread context should cause a all + * dynamic/speculative state to be thrown away. Nominally this is the + * desired behavior because the external thread context write has updated + * some state that could be used by an inflight instruction, however there + * are some cases like in a fault/trap handler where this behavior would + * lead to successive restarts and forward progress couldn't be made. This + * variable controls if the squashing will occur. */ - bool inSyscall; + bool noSquashFromTC; /** Whether or not the thread is currently waiting on a trap, and * thus able to be externally updated without squashing. @@ -73,7 +78,7 @@ struct O3ThreadState : public ThreadState { O3ThreadState(O3CPU *_cpu, int _thread_num, Process *_process) : ThreadState(_cpu, _thread_num, _process), - cpu(_cpu), inSyscall(0), trapPending(0) + cpu(_cpu), noSquashFromTC(false), trapPending(false) { if (!FullSystem) return; |