inorder-resources: delete events
make sure unrecognized events in the resource pool are deleted and also delete resource events in destructor
This commit is contained in:
parent
db2b721380
commit
6c88730540
|
@ -44,6 +44,12 @@ Resource::Resource(string res_name, int res_id, int res_width,
|
|||
deniedReq = new ResourceRequest(this, NULL, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
Resource::~Resource()
|
||||
{
|
||||
delete [] resourceEvent;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Resource::init()
|
||||
{
|
||||
|
|
|
@ -60,7 +60,8 @@ class Resource {
|
|||
public:
|
||||
Resource(std::string res_name, int res_id, int res_width,
|
||||
int res_latency, InOrderCPU *_cpu);
|
||||
virtual ~Resource() {}
|
||||
virtual ~Resource();
|
||||
|
||||
|
||||
/** Return name of this resource */
|
||||
virtual std::string name();
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -87,6 +87,14 @@ class ResourcePool {
|
|||
/** Constructs a resource event. */
|
||||
ResPoolEvent(ResourcePool *_resPool);
|
||||
|
||||
/** Constructs a resource event. */
|
||||
ResPoolEvent(ResourcePool *_resPool,
|
||||
InOrderCPU::CPUEventType e_type,
|
||||
DynInstPtr _inst,
|
||||
int stage_num,
|
||||
InstSeqNum seq_num,
|
||||
unsigned _tid);
|
||||
|
||||
/** Set Type of Event To Be Scheduled */
|
||||
void setEvent(InOrderCPU::CPUEventType e_type,
|
||||
DynInstPtr _inst,
|
||||
|
|
Loading…
Reference in a new issue