scheduler.cc (13068:822c1be3550e) scheduler.cc (13069:d894ba8f881c)
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

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

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();
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

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

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);
80 kernel->status(::sc_core::SC_RUNNING);
81 }
82
83 initDone = true;
84}
85
86void
87Scheduler::reg(Process *p)
88{

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

148
149 scheduleReadyEvent();
150}
151
152void
153Scheduler::requestUpdate(Channel *c)
154{
155 updateList.pushLast(c);
81 }
82
83 initDone = true;
84}
85
86void
87Scheduler::reg(Process *p)
88{

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

148
149 scheduleReadyEvent();
150}
151
152void
153Scheduler::requestUpdate(Channel *c)
154{
155 updateList.pushLast(c);
156 if (eq)
157 scheduleReadyEvent();
156 scheduleReadyEvent();
158}
159
160void
161Scheduler::scheduleReadyEvent()
162{
163 // Schedule the evaluate and update phases.
164 if (!readyEvent.scheduled()) {
157}
158
159void
160Scheduler::scheduleReadyEvent()
161{
162 // Schedule the evaluate and update phases.
163 if (!readyEvent.scheduled()) {
165 panic_if(!eq, "Need to schedule ready, but no event manager.\n");
166 eq->schedule(&readyEvent, eq->getCurTick());
164 schedule(&readyEvent);
167 if (starvationEvent.scheduled())
165 if (starvationEvent.scheduled())
168 eq->deschedule(&starvationEvent);
166 deschedule(&starvationEvent);
169 }
170}
171
172void
173Scheduler::scheduleStarvationEvent()
174{
175 if (!starvationEvent.scheduled()) {
167 }
168}
169
170void
171Scheduler::scheduleStarvationEvent()
172{
173 if (!starvationEvent.scheduled()) {
176 Tick now = getCurTick();
177 if (initDone)
178 eq->schedule(&starvationEvent, now);
179 else
180 eventsToSchedule[&starvationEvent] = now;
174 schedule(&starvationEvent);
181 if (readyEvent.scheduled())
175 if (readyEvent.scheduled())
182 eq->deschedule(&readyEvent);
176 deschedule(&readyEvent);
183 }
184}
185
186void
187Scheduler::runReady()
188{
189 bool empty = readyList.empty();
190

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

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);
177 }
178}
179
180void
181Scheduler::runReady()
182{
183 bool empty = readyList.empty();
184

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

247 runToTime = run_to_time;
248
249 maxTick = max_tick;
250
251 if (initDone) {
252 if (starved() && !runToTime)
253 scheduleStarvationEvent();
254 kernel->status(::sc_core::SC_RUNNING);
261 eq->schedule(&maxTickEvent, maxTick);
262 }
263
255 }
256
257 schedule(&maxTickEvent, maxTick);
258
264 // Return to gem5 to let it run events, etc.
265 Fiber::primaryFiber()->run();
266
267 if (pauseEvent.scheduled())
268 eq->deschedule(&pauseEvent);
269 if (stopEvent.scheduled())
270 eq->deschedule(&stopEvent);
271 if (maxTickEvent.scheduled())

--- 46 unchanged lines hidden ---
259 // Return to gem5 to let it run events, etc.
260 Fiber::primaryFiber()->run();
261
262 if (pauseEvent.scheduled())
263 eq->deschedule(&pauseEvent);
264 if (stopEvent.scheduled())
265 eq->deschedule(&stopEvent);
266 if (maxTickEvent.scheduled())

--- 46 unchanged lines hidden ---