Deleted Added
sdiff udiff text old ( 13063:c9905ead0041 ) new ( 13064:e06421881cec )
full compact
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

--- 182 unchanged lines hidden (view full) ---

191 if (starved() && !runToTime)
192 scheduleStarvationEvent();
193
194 // The delta phase.
195 for (auto &e: deltas)
196 e->run();
197 deltas.clear();
198
199 if (runOnce)
200 schedulePause();
201}
202
203void
204Scheduler::update()
205{
206 Channel *channel = updateList.getNext();
207 while (channel) {
208 channel->popListNode();

--- 4 unchanged lines hidden (view full) ---

213
214void
215Scheduler::pause()
216{
217 _paused = true;
218 kernel->status(::sc_core::SC_PAUSED);
219 runOnce = false;
220 scMain->run();
221}
222
223void
224Scheduler::stop()
225{
226 _stopped = true;
227 kernel->stop();
228 runOnce = false;

--- 54 unchanged lines hidden (view full) ---

283void
284Scheduler::scheduleStop(bool finish_delta)
285{
286 if (stopEvent.scheduled())
287 return;
288
289 if (!finish_delta) {
290 // If we're not supposed to finish the delta cycle, flush the list
291 // of ready processes, scheduled updates, and delta notifications.
292 Process *p;
293 while ((p = readyList.getNext()))
294 p->popListNode();
295 Channel *c;
296 while ((c = updateList.getNext()))
297 c->popListNode();
298 for (auto &e: deltas)
299 e->deschedule();
300 deltas.clear();
301 }
302 eq->schedule(&stopEvent, eq->getCurTick());
303}
304
305Scheduler scheduler;
306
307} // namespace sc_gem5