Thread (8 messages) 8 messages, 3 authors, 2011-07-27
STALE5449d

[PATCH v2] ARM: alignment: Prevent ignoring of faults with ARMv6 unaligned access model

From: Dave Martin <hidden>
Date: 2011-07-27 09:44:09

On Tue, Jul 26, 2011 at 05:28:57PM -0400, Nicolas Pitre wrote:
On Tue, 26 Jul 2011, Dave Martin wrote:
quoted
Currently, it's possible to set the kernel to ignore alignment
faults when changing the alignment fault handling mode at runtime
via /proc/sys/alignment, even though this is undesirable on ARMv6
and above, where it can result in infinite spins where an un-fixed-
up instruction repeatedly faults.
This may be the case only if the U bit in CP15 reg 1 is set, right?
quoted
In addition, the kernel clobbers any alignment mode specified on
the command-line if running on ARMv6 or above.

This patch factors out the necessary safety check into a couple of
new helper functions, and checks and modifies the fault handling
mode as appropriate on boot and on writes to /proc/cpu/alignment.

Prior to ARMv6, the behaviour is unchanged.

For ARMv6 and above, the behaviour changes as follows:

  * Attempting to ignore faults on ARMv6 results in the mode being
    forced to UM_FIXUP instead.  A warning is printed if this
    happened as a result of a write to /proc/cpu/alignment.  The
    user's UM_WARN bit (if present) is still honoured.
Why not clearing the U bit as well as the A bit to preserve consistency 
with the pre ARMv6 behavior?
The old unaligned access behaviour is deprecated in ARMv6 (I believe)
and is not supported at all in ARMv7 -- i.e., you can't turn the U bit
off.  So this would be an additional special behaviour for ARMv6 only.

I'm not sure that introducing yet another behaviour is useful here;
anyone with legacy userspace software relying on the old unaligned
access model presumably fixed it years ago.

Really, the patch was just intended resolve the inconsistency where
the policy the kernel enforces for the alignment fixup mode on bootup
is not enforced at run-time.

Cheers
---Dave
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help