arm: Fix TLB ignoring faults when table walking
authorAndrew Bardsley <Andrew.Bardsley@arm.com>
Tue, 2 Dec 2014 11:08:11 +0000 (06:08 -0500)
committerAndrew Bardsley <Andrew.Bardsley@arm.com>
Tue, 2 Dec 2014 11:08:11 +0000 (06:08 -0500)
commit3cd0b1f6a6873ef06351dd49f3c7697175303371
treefa84721b7b1c715fb078e3ad99e3f1ca1c73a912
parente5e5b80690f736c65c9b51ef96660637210f3938
arm: Fix TLB ignoring faults when table walking

This patch fixes a case where the Minor CPU can deadlock due to the lack
of a response to TLB request because of a bug in fault handling in the ARM
table walker.

TableWalker::processWalkWrapper is the scheduler-called wrapper which
handles deferred walks which calls to TableWalker::wait cannot immediately
process.  The handling of faults generated by processWalk{AArch64,LPAE,}
calls in those two functions is is different.  processWalkWrapper ignores
fault returns from processWalk... which can lead to ::finish not being
called on a translation.

This fix provides fault handling in processWalkWrapper similar to that
found in the leaf functions which BaseTLB::Translation::finish.
src/arch/arm/table_walker.cc