Deleted Added
sdiff udiff text old ( 10037:5cac77888310 ) new ( 10109:b58c5c5854de )
full compact
1/*
2 * Copyright (c) 2010, 2012-2013 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

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

155
156Fault
157TableWalker::walk(RequestPtr _req, ThreadContext *_tc, uint16_t _asid,
158 uint8_t _vmid, bool _isHyp, TLB::Mode _mode,
159 TLB::Translation *_trans, bool _timing, bool _functional,
160 bool secure, TLB::ArmTranslationType tranType)
161{
162 assert(!(_functional && _timing));
163
164 if (!currState) {
165 // For atomic mode, a new WalkerState instance should be only created
166 // once per TLB. For timing mode, a new instance is generated for every
167 // TLB miss.
168 DPRINTF(TLBVerbose, "creating new instance of WalkerState\n");
169
170 currState = new WalkerState();
171 currState->tableWalker = this;
172 } else if (_timing) {
173 // This is a translation that was completed and then faulted again
174 // because some underlying parameters that affect the translation
175 // changed out from under us (e.g. asid). It will either be a
176 // misprediction, in which case nothing will happen or we'll use
177 // this fault to re-execute the faulting instruction which should clean
178 // up everything.
179 if (currState->vaddr_tainted == _req->getVaddr()) {

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

259 currState->secureLookup = currState->isSecure;
260 currState->rwTable = true;
261 currState->userTable = true;
262 currState->xnTable = false;
263 currState->pxnTable = false;
264 }
265
266 if (!currState->timing) {
267 if (currState->aarch64)
268 return processWalkAArch64();
269 else if (long_desc_format)
270 return processWalkLPAE();
271 else
272 return processWalk();
273 }
274
275 if (pending || pendingQueue.size()) {
276 pendingQueue.push_back(currState);
277 currState = NULL;
278 } else {
279 pending = true;
280 if (currState->aarch64)

--- 1665 unchanged lines hidden ---