Deleted Added
sdiff udiff text old ( 9524:d6ffa982a68b ) new ( 9535:508aebb47ca6 )
full compact
1/*
2 * Copyright (c) 2010 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

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

181
182void
183TableWalker::processWalkWrapper()
184{
185 assert(!currState);
186 assert(pendingQueue.size());
187 currState = pendingQueue.front();
188
189
190 if (!currState->transState->squashed()) {
191 // We've got a valid request, lets process it
192 pending = true;
193 pendingQueue.pop_front();
194 processWalk();
195 return;
196 }
197
198
199 // If the instruction that we were translating for has been
200 // squashed we shouldn't bother.
201 unsigned num_squashed = 0;
202 ThreadContext *tc = currState->tc;
203 assert(currState->transState->squashed());
204 while ((num_squashed < numSquashable) && currState &&
205 currState->transState->squashed()) {
206 pendingQueue.pop_front();
207 num_squashed++;
208
209 DPRINTF(TLB, "Squashing table walk for address %#x\n", currState->vaddr);
210
211 // finish the translation which will delete the translation object
212 currState->transState->finish(new UnimpFault("Squashed Inst"),
213 currState->req, currState->tc, currState->mode);
214
215 // delete the current request
216 delete currState;
217
218 // peak at the next one
219 if (pendingQueue.size())
220 currState = pendingQueue.front();
221 else
222 currState = NULL;
223 }
224
225 // if we've still got pending translations schedule more work
226 nextWalk(tc);
227 currState = NULL;
228 completeDrain();
229}
230

--- 581 unchanged lines hidden ---