Re: [patch 071/149] ARM: 6166/1: Proper prefetch abort handling on pre-ARMv6

Russell King
2010-07-01T22:49:06Z

On Fri, Jul 02, 2010 at 01:25:41AM +0300, Kirill A. Shutemov wrote:
> On Thu, Jul 01, 2010 at 03:17:28PM -0700, Greg KH wrote:
> > We (well, I) like to keep the commit log identical to what is upstream
> > just to make things easier all around. Otherwise people start asking
> > for spelling fixes, clarifications, and all sorts of other stuff (like
> > this.)
>
> Ok, fair enough.
>
> I asked for it because I was confused by this commit message while
> investigate (the same) problem on ARMv7 CPU.

You shouldn't get anywhere near this on ARMv7, because we know the cause
of the prefetch abort on those CPUs.

On pre-ARMv6 CPUs, we always treat all prefetch aborts as a translation
faults. The problem which this commit addresses occurs when userspace
tries to execute code above TASK_SIZE - we're sent into a loop of prefetch
aborts (because we are unable to determine that it is a permission fault.)

ARMv6 and ARMv7 CPUs have an instruction fault status register, which
tells us why the abort happened. On these CPUs, permission faults go
nowhere near the translation fault handler.

One possibility is that for some reason you're using the legacy prefetch
abort code or pre-IFSR code, which will always tell the kernel that its
a translation fault - and in this case, this patch would improve the
situation. What kernel version are you using?

The commit message is accurate for the kernel version to which it was
originally applied.

--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/