From 4ea296e29686154656c380982f987d7b6e1774f0 Mon Sep 17 00:00:00 2001 From: Korey Sewell Date: Sun, 31 Jan 2010 18:26:54 -0500 Subject: inorder: fetch thread bug dont check total # of threads but instead all active threads --- src/cpu/inorder/cpu.hh | 2 +- src/cpu/inorder/first_stage.cc | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) (limited to 'src/cpu') diff --git a/src/cpu/inorder/cpu.hh b/src/cpu/inorder/cpu.hh index f4f7cb390..7ac433723 100644 --- a/src/cpu/inorder/cpu.hh +++ b/src/cpu/inorder/cpu.hh @@ -611,7 +611,7 @@ class InOrderCPU : public BaseCPU if (numActiveThreads() > 0) return activeThreads.front(); else - return -1; + return InvalidThreadID; } diff --git a/src/cpu/inorder/first_stage.cc b/src/cpu/inorder/first_stage.cc index 1427ca46a..75e13e559 100644 --- a/src/cpu/inorder/first_stage.cc +++ b/src/cpu/inorder/first_stage.cc @@ -205,11 +205,12 @@ FirstStage::processInsts(ThreadID tid) ThreadID FirstStage::getFetchingThread(FetchPriority &fetch_priority) { - if (numThreads > 1) { - switch (fetch_priority) { + ThreadID num_active_threads = cpu->numActiveThreads(); + if (num_active_threads > 1) { + switch (fetch_priority) { case SingleThread: - return 0; + return cpu->activeThreadId(); case RoundRobin: return roundRobin(); @@ -217,7 +218,7 @@ FirstStage::getFetchingThread(FetchPriority &fetch_priority) default: return InvalidThreadID; } - } else { + } else if (num_active_threads == 1) { ThreadID tid = *activeThreads->begin(); if (stageStatus[tid] == Running || @@ -226,8 +227,9 @@ FirstStage::getFetchingThread(FetchPriority &fetch_priority) } else { return InvalidThreadID; } - } - + } else { + return InvalidThreadID; + } } ThreadID -- cgit v1.2.3