inorder: tick scheduling

use nextCycle to calculate ticks after addition
This commit is contained in:
Korey Sewell 2010-06-23 18:14:59 -04:00
parent de2321de81
commit 7695d4c63f
2 changed files with 16 additions and 15 deletions

View file

@ -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

View file

@ -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. */