gem5  v20.1.0.0
scheduler.cc
Go to the documentation of this file.
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
9  * notice, this list of conditions and the following disclaimer in the
10  * documentation and/or other materials provided with the distribution;
11  * neither the name of the copyright holders nor the names of its
12  * contributors may be used to endorse or promote products derived from
13  * this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
21  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
29 
30 #include "base/fiber.hh"
31 #include "base/logging.hh"
32 #include "sim/eventq.hh"
33 #include "sim/sim_exit.hh"
34 #include "systemc/core/kernel.hh"
40 #include "systemc/utils/report.hh"
42 
43 namespace sc_gem5
44 {
45 
47  eq(nullptr), readyEvent(this, false, ReadyPriority),
48  pauseEvent(this, false, PausePriority),
49  stopEvent(this, false, StopPriority), _throwUp(nullptr),
50  starvationEvent(this, false, StarvationPriority),
51  _elaborationDone(false), _started(false), _stopNow(false),
52  _status(StatusOther), maxTick(::MaxTick),
53  maxTickEvent(this, false, MaxTickPriority),
54  timeAdvancesEvent(this, false, TimeAdvancesPriority), _numCycles(0),
55  _changeStamp(0), _current(nullptr), initDone(false), runToTime(true),
56  runOnce(false)
57 {}
58 
60 {
61  // Clear out everything that belongs to us to make sure nobody tries to
62  // clear themselves out after the scheduler goes away.
63  clear();
64 }
65 
66 void
68 {
69  // Delta notifications.
70  while (!deltas.empty())
71  deltas.front()->deschedule();
72 
73  // Timed notifications.
74  for (auto &tsp: timeSlots) {
75  TimeSlot *&ts = tsp.second;
76  while (!ts->events.empty())
77  ts->events.front()->deschedule();
78  deschedule(ts);
79  }
80  timeSlots.clear();
81 
82  // gem5 events.
83  if (readyEvent.scheduled())
85  if (pauseEvent.scheduled())
87  if (stopEvent.scheduled())
89  if (starvationEvent.scheduled())
91  if (maxTickEvent.scheduled())
93  if (timeAdvancesEvent.scheduled())
95 
96  Process *p;
97  while ((p = initList.getNext()))
98  p->popListNode();
99  while ((p = readyListMethods.getNext()))
100  p->popListNode();
101  while ((p = readyListThreads.getNext()))
102  p->popListNode();
103 
104  Channel *c;
105  while ((c = updateList.getNext()))
106  c->popListNode();
107 }
108 
109 void
111 {
112  runUpdate();
113 
114  for (Process *p = initList.getNext(); p; p = initList.getNext()) {
115  p->popListNode();
116 
117  if (p->dontInitialize()) {
118  if (!p->hasStaticSensitivities() && !p->internal()) {
120  p->name());
121  }
122  } else {
123  p->ready();
124  }
125  }
126 
127  runDelta();
128 
129  for (auto ets: eventsToSchedule)
130  eq->schedule(ets.first, ets.second);
131  eventsToSchedule.clear();
132 
133  if (_started) {
134  if (!runToTime && starved())
137  }
138 
139  initDone = true;
140 
142 
144 }
145 
146 void
148 {
149  if (initDone) {
150  // If not marked as dontInitialize, mark as ready.
151  if (!p->dontInitialize())
152  p->ready();
153  } else {
154  // Otherwise, record that this process should be initialized once we
155  // get there.
157  }
158 }
159 
160 void
162 {
163  // Pull a process from the active list.
165  if (!_current) {
166  // There are no more processes, so return control to evaluate.
168  } else {
170  _current->scheduled(false);
171  // Switch to whatever Fiber is supposed to run this process. All
172  // Fibers which aren't running should be parked at this line.
173  _current->fiber()->run();
174  // If the current process needs to be manually started, start it.
175  if (_current && _current->needsStart()) {
176  _current->needsStart(false);
177  // If a process hasn't started yet, "resetting" it just starts it
178  // and signals its reset event.
179  if (_current->inReset())
181  try {
182  _current->run();
183  } catch (...) {
184  throwUp();
185  }
186  }
187  }
188  if (_current && !_current->needsStart()) {
189  if (_current->excWrapper) {
190  auto ew = _current->excWrapper;
191  _current->excWrapper = nullptr;
192  ew->throw_it();
193  } else if (_current->inReset()) {
194  _current->reset(false);
195  }
196  }
197 }
198 
199 void
201 {
202  if (_stopNow)
203  return;
204 
205  p->scheduled(true);
206 
207  if (p->procKind() == ::sc_core::SC_METHOD_PROC_)
209  else
211 
212  if (!inEvaluate())
214 }
215 
216 void
218 {
219  if (initDone)
220  ready(p);
221  else
223 }
224 
225 bool
227 {
228  ListNode *n = list->nextListNode;
229  while (n != list)
230  if (n == target)
231  return true;
232  return false;
233 }
234 
235 bool
237 {
238  bool was_ready;
239  if (initDone) {
240  // After initialization, check if we're on a ready list.
241  was_ready = (p->nextListNode != nullptr);
242  p->popListNode();
243  } else {
244  // Nothing is ready before init.
245  was_ready = false;
246  }
247  return was_ready;
248 }
249 
250 void
252 {
254  if (!inEvaluate())
256 }
257 
258 void
260 {
261  std::lock_guard<std::mutex> lock(asyncListMutex);
263 }
264 
265 void
267 {
268  // Schedule the evaluate and update phases.
269  if (!readyEvent.scheduled()) {
271  if (starvationEvent.scheduled())
273  }
274 }
275 
276 void
278 {
279  if (!starvationEvent.scheduled()) {
281  if (readyEvent.scheduled())
283  }
284 }
285 
286 void
288 {
290 
291  bool empty = readyListMethods.empty() && readyListThreads.empty();
293 
294  // The evaluation phase.
296  do {
297  yield();
298  } while (getNextReady());
299  _current = nullptr;
300 
301  if (!empty) {
302  _numCycles++;
303  _changeStamp++;
304  }
305 
306  if (_stopNow) {
308  return;
309  }
310 
311  runUpdate();
312  if (!traceFiles.empty())
313  trace(true);
314  runDelta();
315 
316  if (!runToTime && starved())
318 
319  if (runOnce)
320  schedulePause();
321 
323 }
324 
325 void
327 {
329  {
330  std::lock_guard<std::mutex> lock(asyncListMutex);
331  Channel *channel;
332  while ((channel = asyncUpdateList.getNext()) != nullptr)
333  updateList.pushLast(channel);
334  }
335 
336  try {
337  Channel *channel = updateList.getNext();
338  while (channel) {
339  channel->popListNode();
340  channel->update();
341  channel = updateList.getNext();
342  }
343  } catch (...) {
344  throwUp();
345  }
346 }
347 
348 void
350 {
352 
353  try {
354  while (!deltas.empty())
355  deltas.back()->run();
356  } catch (...) {
357  throwUp();
358  }
359 }
360 
361 void
363 {
366  runOnce = false;
367  if (scMainFiber.called()) {
368  if (!scMainFiber.finished())
369  scMainFiber.run();
370  } else {
371  if (scMainFiber.finished())
372  fatal("Pausing systemc after sc_main completed.");
373  else
374  exitSimLoopNow("systemc pause");
375  }
376 }
377 
378 void
380 {
382  kernel->stop();
383 
384  clear();
385 
386  runOnce = false;
387  if (scMainFiber.called()) {
388  if (!scMainFiber.finished())
389  scMainFiber.run();
390  } else {
391  if (scMainFiber.finished())
392  fatal("Stopping systemc after sc_main completed.");
393  else
394  exitSimLoopNow("systemc stop");
395  }
396 }
397 
398 void
399 Scheduler::start(Tick max_tick, bool run_to_time)
400 {
401  _started = true;
403  runToTime = run_to_time;
404 
405  maxTick = max_tick;
407 
408  if (initDone) {
409  if (!runToTime && starved())
412  }
413 
416 
417  // Return to gem5 to let it run events, etc.
419 
420  if (pauseEvent.scheduled())
422  if (stopEvent.scheduled())
424  if (maxTickEvent.scheduled())
426  if (starvationEvent.scheduled())
428 
429  if (_throwUp) {
430  const ::sc_core::sc_report *to_throw = _throwUp;
431  _throwUp = nullptr;
432  throw *to_throw;
433  }
434 }
435 
436 void
438 {
439  runOnce = true;
441  start(::MaxTick, false);
442 }
443 
444 void
446 {
447  if (pauseEvent.scheduled())
448  return;
449 
451 }
452 
453 void
455 {
456  if (scMainFiber.called() && !scMainFiber.finished()) {
458  _throwUp = &report;
460  scMainFiber.run();
461  } else {
464  }
465 }
466 
467 void
468 Scheduler::scheduleStop(bool finish_delta)
469 {
470  if (stopEvent.scheduled())
471  return;
472 
473  if (!finish_delta) {
474  _stopNow = true;
475  // If we're not supposed to finish the delta cycle, flush all
476  // pending activity.
477  clear();
478  }
480 }
481 
482 void
483 Scheduler::trace(bool delta)
484 {
485  for (auto tf: traceFiles)
486  tf->trace(delta);
487 }
488 
491 
492 namespace {
493 
494 void
495 throwingReportHandler(const ::sc_core::sc_report &r,
497 {
498  throw r;
499 }
500 
501 } // anonymous namespace
502 
503 const ::sc_core::sc_report
505 {
507  ::sc_core::sc_report_handler::set_handler(&throwingReportHandler);
508 
509  try {
510  try {
511  // Rethrow the current exception so we can catch it and throw an
512  // sc_report instead if it's not a type we recognize/can handle.
513  throw;
514  } catch (const ::sc_core::sc_report &) {
515  // It's already a sc_report, so nothing to do.
516  throw;
517  } catch (const ::sc_core::sc_unwind_exception &) {
518  panic("Kill/reset exception escaped a Process::run()");
519  } catch (const std::exception &e) {
522  } catch (const char *msg) {
525  } catch (...) {
528  "UNKNOWN EXCEPTION");
529  }
530  } catch (const ::sc_core::sc_report &r) {
532  return r;
533  }
534  panic("No exception thrown in reportifyException.");
535 }
536 
537 } // namespace sc_gem5
sc_gem5::Scheduler::reg
void reg(Process *p)
Definition: scheduler.cc:147
fatal
#define fatal(...)
This implements a cprintf based fatal() function.
Definition: logging.hh:183
sc_gem5::Process::scheduled
bool scheduled() const
Definition: process.hh:73
sc_gem5::Scheduler::readyEvent
EventWrapper< Scheduler, &Scheduler::runReady > readyEvent
Definition: scheduler.hh:422
sc_gem5::reportifyException
const ::sc_core::sc_report reportifyException()
Definition: scheduler.cc:504
kernel.hh
sc_gem5::Scheduler::StatusStopped
@ StatusStopped
Definition: scheduler.hh:351
sc_core::sc_actions
unsigned sc_actions
Definition: sc_report_handler.hh:39
sc_gem5::Scheduler::resume
void resume(Process *p)
Definition: scheduler.cc:217
sc_gem5::Scheduler::initList
ProcessList initList
Definition: scheduler.hh:478
sc_gem5::Scheduler::scheduleTimeAdvancesEvent
void scheduleTimeAdvancesEvent()
Definition: scheduler.hh:463
sc_main_fiber.hh
sc_gem5::Scheduler::scheduleStop
void scheduleStop(bool finish_delta)
Definition: scheduler.cc:468
sc_gem5::Process::inReset
bool inReset()
Definition: process.hh:131
sc_gem5::Scheduler::deschedule
void deschedule(ScEvent *event)
Definition: scheduler.hh:263
sc_gem5::Kernel::stop
static void stop()
Definition: kernel.cc:140
sc_gem5::Process::resetEvent
::sc_core::sc_event & resetEvent()
Definition: process.hh:101
sc_gem5::Scheduler::_numCycles
uint64_t _numCycles
Definition: scheduler.hh:469
Fiber::finished
bool finished() const
Returns whether the "main" function of this fiber has finished.
Definition: fiber.hh:100
sc_gem5::ListNode
Definition: list.hh:42
sc_gem5::Scheduler::StatusPaused
@ StatusPaused
Definition: scheduler.hh:350
report.hh
sc_gem5::Scheduler::asyncRequestUpdate
void asyncRequestUpdate(Channel *c)
Definition: scheduler.cc:259
sc_gem5::Scheduler::updateList
ChannelList updateList
Definition: scheduler.hh:483
X86ISA::lock
Bitfield< 5 > lock
Definition: types.hh:77
sc_gem5::Scheduler::StatusDelta
@ StatusDelta
Definition: scheduler.hh:348
sc_gem5::Scheduler::Scheduler
Scheduler()
Definition: scheduler.cc:46
Tick
uint64_t Tick
Tick count type.
Definition: types.hh:63
sc_gem5::Scheduler::getCurTick
Tick getCurTick()
Definition: scheduler.hh:228
sc_dt::list
static scfx_rep_node * list
Definition: scfx_rep.cc:368
tracefile.hh
sc_gem5::kernel
Kernel * kernel
Definition: kernel.cc:181
sc_gem5::Scheduler::timeSlots
TimeSlots timeSlots
Definition: scheduler.hh:412
X86ISA::tf
Bitfield< 8 > tf
Definition: misc.hh:569
sc_gem5::Scheduler
Definition: scheduler.hh:146
sc_gem5::Scheduler::_throwUp
const ::sc_core::sc_report * _throwUp
Definition: scheduler.hh:430
sc_gem5::Process::reset
void reset(bool inc_kids)
Definition: process.cc:169
sc_gem5::Scheduler::deltas
ScEvents deltas
Definition: scheduler.hh:411
sc_gem5::Scheduler::asyncListMutex
std::mutex asyncListMutex
Definition: scheduler.hh:486
sim_exit.hh
sc_gem5::Scheduler::runOnce
bool runOnce
Definition: scheduler.hh:476
sc_gem5::ScMainFiber::called
bool called()
Definition: sc_main_fiber.hh:54
sc_gem5::Process::run
void run()
Definition: process.cc:262
sc_gem5::Scheduler::maxTickEvent
EventWrapper< Scheduler, &Scheduler::maxTickFunc > maxTickEvent
Definition: scheduler.hh:458
sc_gem5::Scheduler::ready
void ready(Process *p)
Definition: scheduler.cc:200
sc_gem5::NodeList::pushLast
void pushLast(T *t)
Definition: list.hh:89
sc_gem5::Scheduler::scheduleReadyEvent
void scheduleReadyEvent()
Definition: scheduler.cc:266
ArmISA::n
Bitfield< 31 > n
Definition: miscregs_types.hh:450
Fiber::primaryFiber
static Fiber * primaryFiber()
Get a pointer to the primary Fiber.
Definition: fiber.cc:182
ArmISA::ts
Bitfield< 55, 52 > ts
Definition: miscregs_types.hh:89
sc_gem5::Process::excWrapper
ExceptionWrapperBase * excWrapper
Definition: process.hh:91
sc_gem5::Scheduler::pause
void pause()
Definition: scheduler.cc:362
sc_gem5::Scheduler::status
Status status()
Definition: scheduler.hh:371
sc_gem5::Scheduler::pauseEvent
EventWrapper< Scheduler, &Scheduler::pause > pauseEvent
Definition: scheduler.hh:427
SC_REPORT_ERROR
#define SC_REPORT_ERROR(msg_type, msg)
Definition: sc_report_handler.hh:127
sc_core::sc_report_handler::get_catch_actions
static sc_actions get_catch_actions()
Definition: sc_report_handler.cc:265
sc_gem5::reportHandlerProc
sc_core::sc_report_handler_proc reportHandlerProc
Definition: report.cc:68
sc_gem5::Scheduler::throwUp
void throwUp()
Definition: scheduler.cc:454
sc_gem5::Scheduler::lastReadyTick
Tick lastReadyTick
Definition: scheduler.hh:450
sc_gem5::ListNode::popListNode
void popListNode()
Definition: list.hh:51
sc_gem5::Scheduler::~Scheduler
~Scheduler()
Definition: scheduler.cc:59
sc_gem5::Scheduler::StatusEvaluate
@ StatusEvaluate
Definition: scheduler.hh:346
sc_main.hh
MipsISA::r
r
Definition: pra_constants.hh:95
sc_gem5::Scheduler::yield
void yield()
Definition: scheduler.cc:161
sc_gem5::Scheduler::_stopNow
bool _stopNow
Definition: scheduler.hh:445
sc_gem5::getCurrentProcess
Process * getCurrentProcess()
Definition: scheduler.cc:490
sc_core::SC_METHOD_PROC_
@ SC_METHOD_PROC_
Definition: sc_process_handle.hh:87
sc_gem5::NodeList::empty
bool empty()
Definition: list.hh:106
sc_gem5::Scheduler::runReady
void runReady()
Definition: scheduler.cc:287
sc_gem5::Scheduler::clear
void clear()
Definition: scheduler.cc:67
sc_gem5::Scheduler::initPhase
void initPhase()
Definition: scheduler.cc:110
messages.hh
sc_gem5::Scheduler::readyListMethods
ProcessList readyListMethods
Definition: scheduler.hh:480
sc_gem5::Scheduler::schedulePause
void schedulePause()
Definition: scheduler.cc:445
sc_gem5::Scheduler::suspend
bool suspend(Process *p)
Definition: scheduler.cc:236
sc_gem5::Channel::update
void update()
Definition: channel.hh:48
sc_gem5::Scheduler::initDone
bool initDone
Definition: scheduler.hh:474
Fiber::run
void run()
Start executing the fiber represented by this object.
Definition: fiber.cc:163
sc_gem5::Process
Definition: process.hh:62
sc_gem5::Scheduler::scheduleStarvationEvent
void scheduleStarvationEvent()
Definition: scheduler.cc:277
sc_gem5::Scheduler::stopEvent
EventWrapper< Scheduler, &Scheduler::stop > stopEvent
Definition: scheduler.hh:428
sc_gem5::Scheduler::_changeStamp
uint64_t _changeStamp
Definition: scheduler.hh:470
sc_core::sc_report
Definition: sc_report.hh:60
sc_core::sc_event::notify
void notify()
Definition: sc_event.cc:337
sc_gem5::scMainFiber
ScMainFiber scMainFiber
Definition: sc_main_fiber.cc:78
sc_gem5::Process::fiber
virtual Fiber * fiber()
Definition: process.hh:121
ArmISA::e
Bitfield< 9 > e
Definition: miscregs_types.hh:61
sc_gem5::Scheduler::starved
bool starved()
Definition: scheduler.hh:433
sc_gem5::Scheduler::eventsToSchedule
std::map<::Event *, Tick > eventsToSchedule
Definition: scheduler.hh:488
SC_REPORT_WARNING
#define SC_REPORT_WARNING(msg_type, msg)
Definition: sc_report_handler.hh:123
sc_gem5::NodeList::getNext
T * getNext()
Definition: list.hh:105
sc_gem5::Scheduler::stop
void stop()
Definition: scheduler.cc:379
EventQueue::schedule
void schedule(Event *event, Tick when, bool global=false)
Schedule the given event on this queue.
Definition: eventq.hh:757
sc_core::SC_ID_DISABLE_WILL_ORPHAN_PROCESS_
const char SC_ID_DISABLE_WILL_ORPHAN_PROCESS_[]
Definition: messages.cc:132
sc_report_handler.hh
sc_gem5::Scheduler::requestUpdate
void requestUpdate(Channel *c)
Definition: scheduler.cc:251
sc_gem5::Scheduler::current
Process * current()
Definition: scheduler.hh:170
sc_gem5::Scheduler::_current
Process * _current
Definition: scheduler.hh:472
sc_core::sc_report_handler_proc
void(* sc_report_handler_proc)(const sc_report &, const sc_actions &)
Definition: sc_report_handler.hh:62
PowerISA::eq
Bitfield< 29 > eq
Definition: miscregs.hh:48
sc_gem5::listContains
bool listContains(ListNode *list, ListNode *target)
Definition: scheduler.cc:226
sc_report.hh
sc_gem5::Scheduler::_started
bool _started
Definition: scheduler.hh:444
sc_gem5::Scheduler::oneCycle
void oneCycle()
Definition: scheduler.cc:437
exitSimLoopNow
void exitSimLoopNow(const std::string &message, int exit_code, Tick repeat, bool serialize)
Schedule an event as above, but make it high priority so it runs before any normal events which are s...
Definition: sim_events.cc:99
sc_gem5::Scheduler::StatusUpdate
@ StatusUpdate
Definition: scheduler.hh:347
sc_core::sc_report_handler::set_handler
static void set_handler(sc_report_handler_proc)
Definition: sc_report_handler.cc:272
sc_gem5::Scheduler::runDelta
void runDelta()
Definition: scheduler.cc:349
sc_gem5::ExceptionWrapperBase::throw_it
virtual void throw_it()=0
sc_gem5::Scheduler::timeAdvancesEvent
EventWrapper< Scheduler, &Scheduler::timeAdvances > timeAdvancesEvent
Definition: scheduler.hh:461
sc_gem5::Scheduler::inEvaluate
bool inEvaluate()
Definition: scheduler.hh:359
sc_gem5::Scheduler::start
void start(Tick max_tick, bool run_to_time)
Definition: scheduler.cc:399
logging.hh
sc_gem5::Scheduler::eq
EventQueue * eq
Definition: scheduler.hh:388
sc_gem5::Scheduler::trace
void trace(bool delta)
Definition: scheduler.cc:483
ArmISA::c
Bitfield< 29 > c
Definition: miscregs_types.hh:50
sc_gem5::Scheduler::schedule
void schedule(ScEvent *event, const ::sc_core::sc_time &delay)
Definition: scheduler.hh:238
sc_gem5
Definition: sc_clock.cc:42
sc_gem5::Scheduler::asyncUpdateList
ChannelList asyncUpdateList
Definition: scheduler.hh:485
sc_gem5::Scheduler::runUpdate
void runUpdate()
Definition: scheduler.cc:326
MipsISA::p
Bitfield< 0 > p
Definition: pra_constants.hh:323
sc_gem5::scheduler
Scheduler scheduler
Definition: scheduler.cc:489
sc_core::SC_ID_SIMULATION_UNCAUGHT_EXCEPTION_
const char SC_ID_SIMULATION_UNCAUGHT_EXCEPTION_[]
Definition: messages.cc:117
sc_gem5::Channel
Definition: channel.hh:39
sc_gem5::Kernel::status
static sc_core::sc_status status()
Definition: kernel.cc:54
sc_gem5::Scheduler::readyListThreads
ProcessList readyListThreads
Definition: scheduler.hh:481
sc_core::SC_RUNNING
@ SC_RUNNING
Definition: sc_main.hh:87
sc_gem5::Scheduler::starvationEvent
EventWrapper< Scheduler, &Scheduler::pause > starvationEvent
Definition: scheduler.hh:440
sc_gem5::Process::needsStart
bool needsStart() const
Definition: process.hh:66
sc_gem5::Scheduler::runToTime
bool runToTime
Definition: scheduler.hh:475
fiber.hh
sc_gem5::Scheduler::StatusOther
@ StatusOther
Definition: scheduler.hh:345
sc_gem5::Scheduler::traceFiles
std::set< TraceFile * > traceFiles
Definition: scheduler.hh:490
sc_core::SC_PAUSED
@ SC_PAUSED
Definition: sc_main.hh:88
MaxTick
const Tick MaxTick
Definition: types.hh:65
scheduler.hh
sc_gem5::Scheduler::getNextReady
Process * getNextReady()
Definition: scheduler.hh:415
sc_gem5::Scheduler::TimeSlot
Definition: scheduler.hh:151
sc_gem5::Scheduler::maxTick
Tick maxTick
Definition: scheduler.hh:449
panic
#define panic(...)
This implements a cprintf based panic() function.
Definition: logging.hh:171
eventq.hh

Generated on Wed Sep 30 2020 14:02:12 for gem5 by doxygen 1.8.17