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) { 78 if (starved() && !runToTime) 79 scheduleStarvationEvent(); |
80 eq->schedule(&maxTickEvent, maxTick); |
81 } |
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()) { |
176 Tick now = getCurTick(); 177 if (initDone) 178 eq->schedule(&starvationEvent, now); 179 else 180 eventsToSchedule[&starvationEvent] = now; |
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 |
257 if (initDone) { |
258 if (starved() && !runToTime) 259 scheduleStarvationEvent(); |
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 --- |