summaryrefslogtreecommitdiff
path: root/src/cpu/minor
diff options
context:
space:
mode:
authorTuan Ta <qtt2@cornell.edu>2018-04-02 16:22:01 -0400
committerTuan Ta <qtt2@cornell.edu>2019-02-08 15:25:30 +0000
commit6a6668bbc4b038b98eb3ee64ffb034719316afd9 (patch)
treed860bdbff78778d58131ebd5ca34eb26c1f0fd51 /src/cpu/minor
parente74921edd5c5c12f121175d59852cd1752c598aa (diff)
downloadgem5-6a6668bbc4b038b98eb3ee64ffb034719316afd9.tar.xz
cpu: stop scheduling suspended threads in all stages of MinorCPU
This patch makes suspended threads non-schedulable in Fetch1, Fetch2, Decode and Execute stages in MinorCPU. Change-Id: Ie79857e13b7b782d9c58c32310993a132b609cf9 Reviewed-on: https://gem5-review.googlesource.com/c/9625 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Reviewed-by: Giacomo Gabrielli <giacomo.gabrielli@gmail.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src/cpu/minor')
-rw-r--r--src/cpu/minor/decode.cc4
-rw-r--r--src/cpu/minor/execute.cc10
-rw-r--r--src/cpu/minor/fetch2.cc4
3 files changed, 14 insertions, 4 deletions
diff --git a/src/cpu/minor/decode.cc b/src/cpu/minor/decode.cc
index 390ca5f11..94d3dec03 100644
--- a/src/cpu/minor/decode.cc
+++ b/src/cpu/minor/decode.cc
@@ -314,7 +314,9 @@ Decode::getScheduledThread()
}
for (auto tid : priority_list) {
- if (getInput(tid) && !decodeInfo[tid].blocked) {
+ if (cpu.getContext(tid)->status() == ThreadContext::Active &&
+ getInput(tid) &&
+ !decodeInfo[tid].blocked) {
threadPriority = tid;
return tid;
}
diff --git a/src/cpu/minor/execute.cc b/src/cpu/minor/execute.cc
index 93c0895ac..d7cb475c6 100644
--- a/src/cpu/minor/execute.cc
+++ b/src/cpu/minor/execute.cc
@@ -1676,7 +1676,12 @@ Execute::getCommittingThread()
for (auto tid : priority_list) {
ExecuteThreadInfo &ex_info = executeInfo[tid];
- bool can_commit_insts = !ex_info.inFlightInsts->empty();
+
+ bool is_thread_active =
+ cpu.getContext(tid)->status() == ThreadContext::Active;
+ bool can_commit_insts = !ex_info.inFlightInsts->empty() &&
+ is_thread_active;
+
if (can_commit_insts) {
QueuedInst *head_inflight_inst = &(ex_info.inFlightInsts->front());
MinorDynInstPtr inst = head_inflight_inst->inst;
@@ -1742,7 +1747,8 @@ Execute::getIssuingThread()
}
for (auto tid : priority_list) {
- if (getInput(tid)) {
+ if (cpu.getContext(tid)->status() == ThreadContext::Active &&
+ getInput(tid)) {
issuePriority = tid;
return tid;
}
diff --git a/src/cpu/minor/fetch2.cc b/src/cpu/minor/fetch2.cc
index 09a06fc24..180890147 100644
--- a/src/cpu/minor/fetch2.cc
+++ b/src/cpu/minor/fetch2.cc
@@ -584,7 +584,9 @@ Fetch2::getScheduledThread()
}
for (auto tid : priority_list) {
- if (getInput(tid) && !fetchInfo[tid].blocked) {
+ if (cpu.getContext(tid)->status() == ThreadContext::Active &&
+ getInput(tid) &&
+ !fetchInfo[tid].blocked) {
threadPriority = tid;
return tid;
}