diff options
author | Korey Sewell <ksewell@umich.edu> | 2009-05-12 15:01:16 -0400 |
---|---|---|
committer | Korey Sewell <ksewell@umich.edu> | 2009-05-12 15:01:16 -0400 |
commit | 6c88730540da3ecfdf32ab798eb60e4a24935789 (patch) | |
tree | f3289908cdedf135dc290f7fdd26dd6bae0f9d9a /src/cpu/inorder/resource_pool.cc | |
parent | db2b72138052ad96d808d8286bd2598c96f96a31 (diff) | |
download | gem5-6c88730540da3ecfdf32ab798eb60e4a24935789.tar.xz |
inorder-resources: delete events
make sure unrecognized events in the resource pool are deleted and also delete resource events in destructor
Diffstat (limited to 'src/cpu/inorder/resource_pool.cc')
-rw-r--r-- | src/cpu/inorder/resource_pool.cc | 66 |
1 files changed, 38 insertions, 28 deletions
diff --git a/src/cpu/inorder/resource_pool.cc b/src/cpu/inorder/resource_pool.cc index 5cb55b89b..7bcf2585b 100644 --- a/src/cpu/inorder/resource_pool.cc +++ b/src/cpu/inorder/resource_pool.cc @@ -187,19 +187,18 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst, { assert(delay >= 0); - ResPoolEvent *res_pool_event = new ResPoolEvent(this); - switch (e_type) { case InOrderCPU::ActivateThread: { DPRINTF(Resource, "Scheduling Activate Thread Resource Pool Event for tick %i.\n", curTick + delay); - res_pool_event->setEvent(e_type, - inst, - inst->squashingStage, - inst->bdelaySeqNum, - inst->readTid()); + ResPoolEvent *res_pool_event = new ResPoolEvent(this, + e_type, + inst, + inst->squashingStage, + inst->bdelaySeqNum, + inst->readTid()); mainEventQueue.schedule(res_pool_event, curTick + cpu->ticks(delay)); } break; @@ -207,14 +206,15 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst, case InOrderCPU::SuspendThread: case InOrderCPU::DeallocateThread: { + DPRINTF(Resource, "Scheduling Deactivate Thread Resource Pool Event for tick %i.\n", curTick + delay); - - res_pool_event->setEvent(e_type, - inst, - inst->squashingStage, - inst->bdelaySeqNum, - tid); + ResPoolEvent *res_pool_event = new ResPoolEvent(this, + e_type, + inst, + inst->squashingStage, + inst->bdelaySeqNum, + tid); mainEventQueue.schedule(res_pool_event, curTick + cpu->ticks(delay)); @@ -225,12 +225,11 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst, { DPRINTF(Resource, "Scheduling Inst-Graduated Resource Pool Event for tick %i.\n", curTick + delay); - - res_pool_event->setEvent(e_type, - inst, - inst->squashingStage, - inst->seqNum, - inst->readTid()); + ResPoolEvent *res_pool_event = new ResPoolEvent(this,e_type, + inst, + inst->squashingStage, + inst->seqNum, + inst->readTid()); mainEventQueue.schedule(res_pool_event, curTick + cpu->ticks(delay)); } @@ -240,13 +239,12 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst, { DPRINTF(Resource, "Scheduling Squash Resource Pool Event for tick %i.\n", curTick + delay); - res_pool_event->setEvent(e_type, - inst, - inst->squashingStage, - inst->bdelaySeqNum, - inst->readTid()); + ResPoolEvent *res_pool_event = new ResPoolEvent(this,e_type, + inst, + inst->squashingStage, + inst->bdelaySeqNum, + inst->readTid()); mainEventQueue.schedule(res_pool_event, curTick + cpu->ticks(delay)); - } break; @@ -315,9 +313,21 @@ ResourcePool::instGraduated(InstSeqNum seq_num,unsigned tid) } ResourcePool::ResPoolEvent::ResPoolEvent(ResourcePool *_resPool) - : Event(CPU_Tick_Pri), - resPool(_resPool) -{ eventType = (InOrderCPU::CPUEventType) Default; } + : Event(CPU_Tick_Pri), resPool(_resPool), + eventType((InOrderCPU::CPUEventType) Default) +{ } + +ResourcePool::ResPoolEvent::ResPoolEvent(ResourcePool *_resPool, + InOrderCPU::CPUEventType e_type, + DynInstPtr _inst, + int stage_num, + InstSeqNum seq_num, + unsigned _tid) + : Event(CPU_Tick_Pri), resPool(_resPool), + eventType(e_type), inst(_inst), seqNum(seq_num), + stageNum(stage_num), tid(_tid) +{ } + void ResourcePool::ResPoolEvent::process() |