]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
ARM: I-cache: flush executable mappings in flush_cache_range()
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sun, 25 Oct 2009 14:12:27 +0000 (14:12 +0000)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 4 Dec 2009 14:58:51 +0000 (14:58 +0000)
commit6060e8df517847bf445ebc61de7d4d9c7faae990
tree64a86fe9a921584e38b7ce24521248b8461171c6
parentea201dbb78651c71c56e440b8b3132906bc7456d
ARM: I-cache: flush executable mappings in flush_cache_range()

Dirk Behme reported instability on ARM11 SMP (VIPT non-aliasing cache)
caused by the dynamic linker changing protection on text pages to write
GOT entries.  The problem is due to an interaction between the write
faulting code providing new anonymous pages which are incoherent with
the I-cache due to write buffering, and the I-cache not having been
invalidated.

a4db94d plugs the hole with the data cache coherency.  This patch
provides the other half of the fix by flushing the I-cache in
flush_cache_range() for VM_EXEC VMAs (which is what we have when the
region is being made executable again.)  This ensures that the I-cache
will be up to date with the newly COW'd pages.

Note: if users are writing instructions, then they still need to use
the ARM sys_cacheflush API to ensure that the caches are correctly
synchronized.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/flush.c