inorder: tick scheduling
use nextCycle to calculate ticks after addition
This commit is contained in:
parent
de2321de81
commit
7695d4c63f
|
@ -158,9 +158,9 @@ void
|
||||||
InOrderCPU::CPUEvent::scheduleEvent(int delay)
|
InOrderCPU::CPUEvent::scheduleEvent(int delay)
|
||||||
{
|
{
|
||||||
if (squashed())
|
if (squashed())
|
||||||
mainEventQueue.reschedule(this,curTick + cpu->ticks(delay));
|
mainEventQueue.reschedule(this, cpu->nextCycle(curTick + cpu->ticks(delay)));
|
||||||
else if (!scheduled())
|
else if (!scheduled())
|
||||||
mainEventQueue.schedule(this,curTick + cpu->ticks(delay));
|
mainEventQueue.schedule(this, cpu->nextCycle(curTick + cpu->ticks(delay)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -671,10 +671,11 @@ InOrderCPU::scheduleCpuEvent(CPUEventType c_event, Fault fault,
|
||||||
CPUEvent *cpu_event = new CPUEvent(this, c_event, fault, tid, inst,
|
CPUEvent *cpu_event = new CPUEvent(this, c_event, fault, tid, inst,
|
||||||
event_pri_offset);
|
event_pri_offset);
|
||||||
|
|
||||||
|
Tick sked_tick = nextCycle(curTick + ticks(delay));
|
||||||
if (delay >= 0) {
|
if (delay >= 0) {
|
||||||
DPRINTF(InOrderCPU, "Scheduling CPU Event (%s) for cycle %i, [tid:%i].\n",
|
DPRINTF(InOrderCPU, "Scheduling CPU Event (%s) for cycle %i, [tid:%i].\n",
|
||||||
eventNames[c_event], curTick + delay, tid);
|
eventNames[c_event], curTick + delay, tid);
|
||||||
mainEventQueue.schedule(cpu_event,curTick + delay);
|
mainEventQueue.schedule(cpu_event, sked_tick);
|
||||||
} else {
|
} else {
|
||||||
cpu_event->process();
|
cpu_event->process();
|
||||||
cpuEventRemoveList.push(cpu_event);
|
cpuEventRemoveList.push(cpu_event);
|
||||||
|
@ -1335,7 +1336,7 @@ InOrderCPU::cleanUpRemovedReqs()
|
||||||
while (!reqRemoveList.empty()) {
|
while (!reqRemoveList.empty()) {
|
||||||
ResourceRequest *res_req = reqRemoveList.front();
|
ResourceRequest *res_req = reqRemoveList.front();
|
||||||
|
|
||||||
DPRINTF(Resource, "[tid:%i] [sn:%lli]: Removing Request "
|
DPRINTF(RefCount, "[tid:%i] [sn:%lli]: Removing Request "
|
||||||
"[stage_num:%i] [res:%s] [slot:%i] [completed:%i].\n",
|
"[stage_num:%i] [res:%s] [slot:%i] [completed:%i].\n",
|
||||||
res_req->inst->threadNumber,
|
res_req->inst->threadNumber,
|
||||||
res_req->inst->seqNum,
|
res_req->inst->seqNum,
|
||||||
|
@ -1400,7 +1401,7 @@ InOrderCPU::wakeCPU()
|
||||||
|
|
||||||
numCycles += extra_cycles;
|
numCycles += extra_cycles;
|
||||||
|
|
||||||
mainEventQueue.schedule(&tickEvent, curTick);
|
mainEventQueue.schedule(&tickEvent, nextCycle(curTick));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
|
|
|
@ -259,7 +259,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
|
||||||
inst->bdelaySeqNum,
|
inst->bdelaySeqNum,
|
||||||
inst->readTid());
|
inst->readTid());
|
||||||
mainEventQueue.schedule(res_pool_event,
|
mainEventQueue.schedule(res_pool_event,
|
||||||
curTick + cpu->ticks(delay));
|
cpu->nextCycle(curTick + cpu->ticks(delay)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
|
||||||
tid);
|
tid);
|
||||||
|
|
||||||
mainEventQueue.schedule(res_pool_event,
|
mainEventQueue.schedule(res_pool_event,
|
||||||
curTick + cpu->ticks(delay));
|
cpu->nextCycle(curTick + cpu->ticks(delay)));
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -287,7 +287,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
|
||||||
{
|
{
|
||||||
|
|
||||||
DPRINTF(Resource, "Scheduling Suspend Thread Resource Pool Event for tick %i.\n",
|
DPRINTF(Resource, "Scheduling Suspend Thread Resource Pool Event for tick %i.\n",
|
||||||
curTick + delay);
|
cpu->nextCycle(cpu->nextCycle(curTick + cpu->ticks(delay))));
|
||||||
ResPoolEvent *res_pool_event = new ResPoolEvent(this,
|
ResPoolEvent *res_pool_event = new ResPoolEvent(this,
|
||||||
e_type,
|
e_type,
|
||||||
inst,
|
inst,
|
||||||
|
@ -295,7 +295,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
|
||||||
inst->bdelaySeqNum,
|
inst->bdelaySeqNum,
|
||||||
tid);
|
tid);
|
||||||
|
|
||||||
mainEventQueue.schedule(res_pool_event, curTick + cpu->ticks(delay));
|
mainEventQueue.schedule(res_pool_event, cpu->nextCycle(cpu->nextCycle(curTick + cpu->ticks(delay))));
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -311,7 +311,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
|
||||||
inst->seqNum,
|
inst->seqNum,
|
||||||
inst->readTid());
|
inst->readTid());
|
||||||
mainEventQueue.schedule(res_pool_event,
|
mainEventQueue.schedule(res_pool_event,
|
||||||
curTick + cpu->ticks(delay));
|
cpu->nextCycle(curTick + cpu->ticks(delay)));
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -327,7 +327,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
|
||||||
inst->bdelaySeqNum,
|
inst->bdelaySeqNum,
|
||||||
inst->readTid());
|
inst->readTid());
|
||||||
mainEventQueue.schedule(res_pool_event,
|
mainEventQueue.schedule(res_pool_event,
|
||||||
curTick + cpu->ticks(delay));
|
cpu->nextCycle(curTick + cpu->ticks(delay)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -343,7 +343,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
|
||||||
inst->seqNum - 1,
|
inst->seqNum - 1,
|
||||||
inst->readTid());
|
inst->readTid());
|
||||||
mainEventQueue.schedule(res_pool_event,
|
mainEventQueue.schedule(res_pool_event,
|
||||||
curTick + cpu->ticks(delay));
|
cpu->nextCycle(curTick + cpu->ticks(delay)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
|
||||||
inst->squashingStage,
|
inst->squashingStage,
|
||||||
inst->seqNum,
|
inst->seqNum,
|
||||||
inst->readTid());
|
inst->readTid());
|
||||||
mainEventQueue.schedule(res_pool_event, curTick + cpu->ticks(delay));
|
mainEventQueue.schedule(res_pool_event, cpu->nextCycle(curTick + cpu->ticks(delay)));
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -544,9 +544,9 @@ void
|
||||||
ResourcePool::ResPoolEvent::scheduleEvent(int delay)
|
ResourcePool::ResPoolEvent::scheduleEvent(int delay)
|
||||||
{
|
{
|
||||||
if (squashed())
|
if (squashed())
|
||||||
mainEventQueue.reschedule(this,curTick + resPool->cpu->ticks(delay));
|
mainEventQueue.reschedule(this,resPool->cpu->nextCycle(curTick + resPool->cpu->ticks(delay)));
|
||||||
else if (!scheduled())
|
else if (!scheduled())
|
||||||
mainEventQueue.schedule(this,curTick + resPool->cpu->ticks(delay));
|
mainEventQueue.schedule(this, resPool->cpu->nextCycle(curTick + resPool->cpu->ticks(delay)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Unschedule resource event, regardless of its current state. */
|
/** Unschedule resource event, regardless of its current state. */
|
||||||
|
|
Loading…
Reference in a new issue