inorder: tick scheduling
authorKorey Sewell <ksewell@umich.edu>
Wed, 23 Jun 2010 22:14:59 +0000 (18:14 -0400)
committerKorey Sewell <ksewell@umich.edu>
Wed, 23 Jun 2010 22:14:59 +0000 (18:14 -0400)
use nextCycle to calculate ticks after addition

src/cpu/inorder/cpu.cc
src/cpu/inorder/resource_pool.cc

index 0744686e186d27d891bf0c2e97f1ba8650dfb6dd..c0159bc29b71e333d4cc5b96cf76d1c9533943a4 100644 (file)
@@ -158,9 +158,9 @@ void
 InOrderCPU::CPUEvent::scheduleEvent(int delay)
 {
     if (squashed())
-      mainEventQueue.reschedule(this,curTick + cpu->ticks(delay));
+        mainEventQueue.reschedule(this, cpu->nextCycle(curTick + cpu->ticks(delay)));
     else if (!scheduled())
-      mainEventQueue.schedule(this,curTick + cpu->ticks(delay));
+        mainEventQueue.schedule(this, cpu->nextCycle(curTick + cpu->ticks(delay)));
 }
 
 void
@@ -671,10 +671,11 @@ InOrderCPU::scheduleCpuEvent(CPUEventType c_event, Fault fault,
     CPUEvent *cpu_event = new CPUEvent(this, c_event, fault, tid, inst,
                                        event_pri_offset);
 
+    Tick sked_tick = nextCycle(curTick + ticks(delay));
     if (delay >= 0) {
         DPRINTF(InOrderCPU, "Scheduling CPU Event (%s) for cycle %i, [tid:%i].\n",
                 eventNames[c_event], curTick + delay, tid);
-        mainEventQueue.schedule(cpu_event,curTick + delay);
+        mainEventQueue.schedule(cpu_event, sked_tick);
     } else {
         cpu_event->process();
         cpuEventRemoveList.push(cpu_event);
@@ -1335,7 +1336,7 @@ InOrderCPU::cleanUpRemovedReqs()
     while (!reqRemoveList.empty()) {
         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",
                 res_req->inst->threadNumber,
                 res_req->inst->seqNum,
@@ -1400,7 +1401,7 @@ InOrderCPU::wakeCPU()
 
     numCycles += extra_cycles;
 
-    mainEventQueue.schedule(&tickEvent, curTick);
+    mainEventQueue.schedule(&tickEvent, nextCycle(curTick));
 }
 
 #if FULL_SYSTEM
index 74bf4f03b78c87e18174fccaf8831ab1a18bdc33..811ef3e9966d333c0308bb34177aad6e2e4da78b 100644 (file)
@@ -259,7 +259,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
                                  inst->bdelaySeqNum,
                                  inst->readTid());
             mainEventQueue.schedule(res_pool_event, 
-                                    curTick + cpu->ticks(delay));
+                                    cpu->nextCycle(curTick + cpu->ticks(delay)));
         }
         break;
 
@@ -278,7 +278,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
                                  tid);
 
             mainEventQueue.schedule(res_pool_event, 
-                                    curTick + cpu->ticks(delay));
+                                    cpu->nextCycle(curTick + cpu->ticks(delay)));
 
         }
         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",
-                    curTick + delay);
+                    cpu->nextCycle(cpu->nextCycle(curTick + cpu->ticks(delay))));
             ResPoolEvent *res_pool_event = new ResPoolEvent(this,
                                                             e_type,
                                                             inst,
@@ -295,7 +295,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
                                                             inst->bdelaySeqNum,
                                                             tid);
 
-            mainEventQueue.schedule(res_pool_event, curTick + cpu->ticks(delay));
+            mainEventQueue.schedule(res_pool_event, cpu->nextCycle(cpu->nextCycle(curTick + cpu->ticks(delay))));
 
         }
         break;
@@ -311,7 +311,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
                                  inst->seqNum,
                                  inst->readTid());
             mainEventQueue.schedule(res_pool_event, 
-                                    curTick + cpu->ticks(delay));
+                                    cpu->nextCycle(curTick + cpu->ticks(delay)));
 
         }
         break;
@@ -327,7 +327,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
                                  inst->bdelaySeqNum,
                                  inst->readTid());
             mainEventQueue.schedule(res_pool_event, 
-                                    curTick + cpu->ticks(delay));
+                                    cpu->nextCycle(curTick + cpu->ticks(delay)));
         }
         break;
 
@@ -343,7 +343,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
                                  inst->seqNum - 1,
                                  inst->readTid());
             mainEventQueue.schedule(res_pool_event, 
-                                    curTick + cpu->ticks(delay));
+                                    cpu->nextCycle(curTick + cpu->ticks(delay)));
         }
         break;
 
@@ -356,7 +356,7 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
                                                             inst->squashingStage,
                                                             inst->seqNum,
                                                             inst->readTid());
-            mainEventQueue.schedule(res_pool_event, curTick + cpu->ticks(delay));
+            mainEventQueue.schedule(res_pool_event, cpu->nextCycle(curTick + cpu->ticks(delay)));
 
         }
         break;
@@ -544,9 +544,9 @@ void
 ResourcePool::ResPoolEvent::scheduleEvent(int delay)
 {
     if (squashed())
-      mainEventQueue.reschedule(this,curTick + resPool->cpu->ticks(delay));
+        mainEventQueue.reschedule(this,resPool->cpu->nextCycle(curTick + resPool->cpu->ticks(delay)));
     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. */