inorder: priority for grad/squash events
authorKorey Sewell <ksewell@umich.edu>
Mon, 20 Jun 2011 01:43:37 +0000 (21:43 -0400)
committerKorey Sewell <ksewell@umich.edu>
Mon, 20 Jun 2011 01:43:37 +0000 (21:43 -0400)
define separate priority resource pool squash and graduate events

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

index 0713783b3242d7a85538b09da6f2dffcf2fa682b..6640d6c0e02c5c03472a468fafbf822120dbef4f 100644 (file)
@@ -331,12 +331,15 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
         {
             DPRINTF(Resource, "Scheduling Inst-Graduated Resource Pool "
                     "Event for tick %i.\n", curTick() + delay);
+            ResPoolEventPri grad_pri = ResGrad_Pri;
             ResPoolEvent *res_pool_event = 
-                new ResPoolEvent(this,e_type,
+                new ResPoolEvent(this,
+                                 e_type,
                                  inst,
                                  inst->squashingStage,
                                  inst->seqNum,
-                                 inst->readTid());
+                                 inst->readTid(),
+                                 grad_pri);
             cpu->schedule(res_pool_event, when);
         }
         break;
@@ -345,12 +348,15 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
         {
             DPRINTF(Resource, "Scheduling Squash Resource Pool Event for "
                     "tick %i.\n", curTick() + delay);
+            ResPoolEventPri squash_pri = ResSquash_Pri;
             ResPoolEvent *res_pool_event = 
-                new ResPoolEvent(this,e_type,
+                new ResPoolEvent(this,
+                                 e_type,
                                  inst,
                                  inst->squashingStage,
                                  inst->squashSeqNum,
-                                 inst->readTid());
+                                 inst->readTid(),
+                                 squash_pri);
             cpu->schedule(res_pool_event, when);
         }
         break;
@@ -361,7 +367,8 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
                     "Pool Event for tick %i.\n",
                     curTick() + delay);
             ResPoolEvent *res_pool_event = 
-                new ResPoolEvent(this,e_type,
+                new ResPoolEvent(this,
+                                 e_type,
                                  inst,
                                  inst->squashingStage,
                                  inst->seqNum - 1,
@@ -375,7 +382,8 @@ ResourcePool::scheduleEvent(InOrderCPU::CPUEventType e_type, DynInstPtr inst,
             DPRINTF(Resource, "Scheduling UpdatePC Resource Pool Event "
                     "for tick %i.\n",
                     curTick() + delay);
-            ResPoolEvent *res_pool_event = new ResPoolEvent(this,e_type,
+            ResPoolEvent *res_pool_event = new ResPoolEvent(this,
+                                                            e_type,
                                                             inst,
                                                             inst->squashingStage,
                                                             inst->seqNum,
@@ -507,8 +515,9 @@ ResourcePool::ResPoolEvent::ResPoolEvent(ResourcePool *_resPool,
                                          DynInstPtr _inst,
                                          int stage_num,
                                          InstSeqNum seq_num,
-                                         ThreadID _tid)
-    : Event(ResPool_Pri), resPool(_resPool),
+                                         ThreadID _tid,
+                                         ResPoolEventPri res_pri)
+    : Event(res_pri), resPool(_resPool),
       eventType(e_type), inst(_inst), seqNum(seq_num),
       stageNum(stage_num), tid(_tid)
 { }
index 51eb413384d7d2d374b183d1f21f73aa05360d99..ba3d6fafb4fc7ce9f9862f165af50720d56c4dc4 100644 (file)
@@ -68,7 +68,9 @@ class ResourcePool {
     };
 
     enum ResPoolEventPri {
-        ResPool_Pri =  InOrderCPU::InOrderCPU_Pri - 5
+        ResPool_Pri =  InOrderCPU::InOrderCPU_Pri - 5,
+        ResGrad_Pri,
+        ResSquash_Pri
     };
 
     class ResPoolEvent : public Event
@@ -95,7 +97,8 @@ class ResourcePool {
                      DynInstPtr _inst,
                      int stage_num,
                      InstSeqNum seq_num,
-                     ThreadID _tid);
+                     ThreadID _tid,
+                     ResPoolEventPri res_pri = ResPool_Pri);
 
         /** Set Type of Event To Be Scheduled */
         void setEvent(InOrderCPU::CPUEventType e_type,