summaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/armksyms.c
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2015-07-03 16:22:54 +0200
committerRussell King <rmk+kernel@arm.linux.org.uk>2015-07-03 21:46:15 +0200
commit1bd46782d08b01b73df0085b51ea1021b19b44fd (patch)
tree12f984aae768b67a6406e5e076f0ba17badc11d7 /arch/arm/kernel/armksyms.c
parentARM: pgtable: document mapping types (diff)
downloadlinux-1bd46782d08b01b73df0085b51ea1021b19b44fd.tar.xz
linux-1bd46782d08b01b73df0085b51ea1021b19b44fd.zip
ARM: avoid unwanted GCC memset()/memcpy() optimisations for IO variants
We don't want GCC optimising our memset_io(), memcpy_fromio() or memcpy_toio() variants, so we must not call one of the standard functions. Provide a separate name for our assembly memcpy() and memset() functions, and use that instead, thereby bypassing GCC's ability to optimise these operations. GCCs optimisation may introduce unaligned accesses which are invalid for device mappings. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/kernel/armksyms.c')
-rw-r--r--arch/arm/kernel/armksyms.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c
index a88671cfe1ff..5e5a51a99e68 100644
--- a/arch/arm/kernel/armksyms.c
+++ b/arch/arm/kernel/armksyms.c
@@ -50,6 +50,9 @@ extern void __aeabi_ulcmp(void);
extern void fpundefinstr(void);
+void mmioset(void *, unsigned int, size_t);
+void mmiocpy(void *, const void *, size_t);
+
/* platform dependent support */
EXPORT_SYMBOL(arm_delay_ops);
@@ -88,6 +91,9 @@ EXPORT_SYMBOL(memmove);
EXPORT_SYMBOL(memchr);
EXPORT_SYMBOL(__memzero);
+EXPORT_SYMBOL(mmioset);
+EXPORT_SYMBOL(mmiocpy);
+
#ifdef CONFIG_MMU
EXPORT_SYMBOL(copy_page);