atomic.cc (14003:2b48980363fe) atomic.cc (14085:0075b0d29d55)
1/*
2 * Copyright 2014 Google, Inc.
3 * Copyright (c) 2012-2013,2015,2017-2018 ARM Limited
4 * All rights reserved.
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating

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

107AtomicSimpleCPU::drain()
108{
109 // Deschedule any power gating event (if any)
110 deschedulePowerGatingEvent();
111
112 if (switchedOut())
113 return DrainState::Drained;
114
1/*
2 * Copyright 2014 Google, Inc.
3 * Copyright (c) 2012-2013,2015,2017-2018 ARM Limited
4 * All rights reserved.
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating

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

107AtomicSimpleCPU::drain()
108{
109 // Deschedule any power gating event (if any)
110 deschedulePowerGatingEvent();
111
112 if (switchedOut())
113 return DrainState::Drained;
114
115 if (!isDrained()) {
115 if (!isCpuDrained()) {
116 DPRINTF(Drain, "Requesting drain.\n");
117 return DrainState::Draining;
118 } else {
119 if (tickEvent.scheduled())
120 deschedule(tickEvent);
121
122 activeThreads.clear();
123 DPRINTF(Drain, "Not executing microcode, no need to drain.\n");

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

178
179bool
180AtomicSimpleCPU::tryCompleteDrain()
181{
182 if (drainState() != DrainState::Draining)
183 return false;
184
185 DPRINTF(Drain, "tryCompleteDrain.\n");
116 DPRINTF(Drain, "Requesting drain.\n");
117 return DrainState::Draining;
118 } else {
119 if (tickEvent.scheduled())
120 deschedule(tickEvent);
121
122 activeThreads.clear();
123 DPRINTF(Drain, "Not executing microcode, no need to drain.\n");

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

178
179bool
180AtomicSimpleCPU::tryCompleteDrain()
181{
182 if (drainState() != DrainState::Draining)
183 return false;
184
185 DPRINTF(Drain, "tryCompleteDrain.\n");
186 if (!isDrained())
186 if (!isCpuDrained())
187 return false;
188
189 DPRINTF(Drain, "CPU done draining, processing drain event\n");
190 signalDrainDone();
191
192 return true;
193}
194
195
196void
197AtomicSimpleCPU::switchOut()
198{
199 BaseSimpleCPU::switchOut();
200
201 assert(!tickEvent.scheduled());
202 assert(_status == BaseSimpleCPU::Running || _status == Idle);
187 return false;
188
189 DPRINTF(Drain, "CPU done draining, processing drain event\n");
190 signalDrainDone();
191
192 return true;
193}
194
195
196void
197AtomicSimpleCPU::switchOut()
198{
199 BaseSimpleCPU::switchOut();
200
201 assert(!tickEvent.scheduled());
202 assert(_status == BaseSimpleCPU::Running || _status == Idle);
203 assert(isDrained());
203 assert(isCpuDrained());
204}
205
206
207void
208AtomicSimpleCPU::takeOverFrom(BaseCPU *oldCPU)
209{
210 BaseSimpleCPU::takeOverFrom(oldCPU);
211

--- 582 unchanged lines hidden ---
204}
205
206
207void
208AtomicSimpleCPU::takeOverFrom(BaseCPU *oldCPU)
209{
210 BaseSimpleCPU::takeOverFrom(oldCPU);
211

--- 582 unchanged lines hidden ---