scheduler.cc (13067:3d6ef32002ef) | scheduler.cc (13068:822c1be3550e) |
---|---|
1/* 2 * Copyright 2018 Google, Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer; 8 * redistributions in binary form must reproduce the above copyright --- 60 unchanged lines hidden (view full) --- 69 for (auto &e: deltas) 70 e->run(); 71 deltas.clear(); 72 73 for (auto ets: eventsToSchedule) 74 eq->schedule(ets.first, ets.second); 75 eventsToSchedule.clear(); 76 | 1/* 2 * Copyright 2018 Google, Inc. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer; 8 * redistributions in binary form must reproduce the above copyright --- 60 unchanged lines hidden (view full) --- 69 for (auto &e: deltas) 70 e->run(); 71 deltas.clear(); 72 73 for (auto ets: eventsToSchedule) 74 eq->schedule(ets.first, ets.second); 75 eventsToSchedule.clear(); 76 |
77 if (_started) | 77 if (_started) { 78 if (starved() && !runToTime) 79 scheduleStarvationEvent(); |
78 eq->schedule(&maxTickEvent, maxTick); | 80 eq->schedule(&maxTickEvent, maxTick); |
81 } |
|
79 80 initDone = true; 81} 82 83void 84Scheduler::reg(Process *p) 85{ 86 if (initDone) { --- 78 unchanged lines hidden (view full) --- 165 eq->deschedule(&starvationEvent); 166 } 167} 168 169void 170Scheduler::scheduleStarvationEvent() 171{ 172 if (!starvationEvent.scheduled()) { | 82 83 initDone = true; 84} 85 86void 87Scheduler::reg(Process *p) 88{ 89 if (initDone) { --- 78 unchanged lines hidden (view full) --- 168 eq->deschedule(&starvationEvent); 169 } 170} 171 172void 173Scheduler::scheduleStarvationEvent() 174{ 175 if (!starvationEvent.scheduled()) { |
173 panic_if(!eq, "Need to schedule starvation event, " 174 "but no event manager.\n"); 175 eq->schedule(&starvationEvent, eq->getCurTick()); | 176 Tick now = getCurTick(); 177 if (initDone) 178 eq->schedule(&starvationEvent, now); 179 else 180 eventsToSchedule[&starvationEvent] = now; |
176 if (readyEvent.scheduled()) 177 eq->deschedule(&readyEvent); 178 } 179} 180 181void 182Scheduler::runReady() 183{ --- 60 unchanged lines hidden (view full) --- 244 245 _started = true; 246 _paused = false; 247 _stopped = false; 248 runToTime = run_to_time; 249 250 maxTick = max_tick; 251 | 181 if (readyEvent.scheduled()) 182 eq->deschedule(&readyEvent); 183 } 184} 185 186void 187Scheduler::runReady() 188{ --- 60 unchanged lines hidden (view full) --- 249 250 _started = true; 251 _paused = false; 252 _stopped = false; 253 runToTime = run_to_time; 254 255 maxTick = max_tick; 256 |
252 if (starved() && !runToTime) 253 return; 254 | |
255 if (initDone) { | 257 if (initDone) { |
258 if (starved() && !runToTime) 259 scheduleStarvationEvent(); |
|
256 kernel->status(::sc_core::SC_RUNNING); 257 eq->schedule(&maxTickEvent, maxTick); 258 } 259 260 // Return to gem5 to let it run events, etc. 261 Fiber::primaryFiber()->run(); 262 263 if (pauseEvent.scheduled()) --- 50 unchanged lines hidden --- | 260 kernel->status(::sc_core::SC_RUNNING); 261 eq->schedule(&maxTickEvent, maxTick); 262 } 263 264 // Return to gem5 to let it run events, etc. 265 Fiber::primaryFiber()->run(); 266 267 if (pauseEvent.scheduled()) --- 50 unchanged lines hidden --- |