summaryrefslogtreecommitdiff
path: root/src/cpu/inorder/resource.cc
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2009-05-12 15:01:16 -0400
committerKorey Sewell <ksewell@umich.edu>2009-05-12 15:01:16 -0400
commit3a057bdbb10a265fb36f7827cd06142ad1624530 (patch)
treeb46e844fd6006561a0033aaefe8790b02c50752b /src/cpu/inorder/resource.cc
parentf1c97e830b2bf9d1fb457050f97dfd4ec9312932 (diff)
downloadgem5-3a057bdbb10a265fb36f7827cd06142ad1624530.tar.xz
inorder-tlb: squash insts in TLB correctly
TLB had a bug where if it was stalled and waiting , it would not squash all instructions older than squashed instruction correctly * * *
Diffstat (limited to 'src/cpu/inorder/resource.cc')
-rw-r--r--src/cpu/inorder/resource.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/cpu/inorder/resource.cc b/src/cpu/inorder/resource.cc
index 2846efe7b..d8fefe0c9 100644
--- a/src/cpu/inorder/resource.cc
+++ b/src/cpu/inorder/resource.cc
@@ -304,9 +304,12 @@ Resource::squash(DynInstPtr inst, int stage_num, InstSeqNum squash_seq_num, unsi
req_ptr->getInst()->readTid(),
req_ptr->getInst()->seqNum);
+ req_ptr->setSquashed();
+
int req_slot_num = req_ptr->getSlot();
- unscheduleEvent(req_slot_num);
+ if (resourceEvent[req_slot_num].scheduled())
+ unscheduleEvent(req_slot_num);
// Mark request for later removal
cpu->reqRemoveList.push(req_ptr);