aboutsummaryrefslogtreecommitdiff
path: root/arch/s390/mm/maccess.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2012-05-02 17:07:03 +0200
committerArnd Bergmann <arnd@arndb.de>2012-05-02 17:07:03 +0200
commitced62c33fc434b9d44118c9f35803af8088cc3fe (patch)
tree34d1145899e0e5853c4d5b45162f86bbe46941ea /arch/s390/mm/maccess.c
parent3ff80abce7d0d3c1eacda53e73c94a57ade2e0a5 (diff)
parent6838e601e6dc63440fd4315c1c2f3a2ef4ccdd6e (diff)
Merge tag 'imx-cleanup' of git://git.pengutronix.de/git/imx/linux-2.6 into next/cleanup
From: Sascha Hauer <s.hauer@pengutronix.de> ARM: i.MX cleanups for 3.5 * tag 'imx-cleanup' of git://git.pengutronix.de/git/imx/linux-2.6: (5 commits) ARM: mx53: fix pad definitions for MX53_PAD_EIM_D28__I2C1_SDA and MX53_PAD_GPIO_8__CAN1_RXCAN ARM: imx/eukrea_mbimx27-baseboard: fix typo in error message ARM: i.MX51 iomux: add missed definitions for SION-bit and mode for some pads arm: imx: add missing select IMX_HAVE_PLATFORM for MACH_MX35_3DS in Kconfig arm: imx: make various struct sys_timer static Includes an update to 3.4-rc4 Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/s390/mm/maccess.c')
-rw-r--r--arch/s390/mm/maccess.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c
index 7bb15fcca75..e1335dc2b1b 100644
--- a/arch/s390/mm/maccess.c
+++ b/arch/s390/mm/maccess.c
@@ -61,21 +61,14 @@ long probe_kernel_write(void *dst, const void *src, size_t size)
return copied < 0 ? -EFAULT : 0;
}
-/*
- * Copy memory in real mode (kernel to kernel)
- */
-int memcpy_real(void *dest, void *src, size_t count)
+static int __memcpy_real(void *dest, void *src, size_t count)
{
register unsigned long _dest asm("2") = (unsigned long) dest;
register unsigned long _len1 asm("3") = (unsigned long) count;
register unsigned long _src asm("4") = (unsigned long) src;
register unsigned long _len2 asm("5") = (unsigned long) count;
- unsigned long flags;
int rc = -EFAULT;
- if (!count)
- return 0;
- flags = __arch_local_irq_stnsm(0xf8UL);
asm volatile (
"0: mvcle %1,%2,0x0\n"
"1: jo 0b\n"
@@ -86,7 +79,23 @@ int memcpy_real(void *dest, void *src, size_t count)
"+d" (_len2), "=m" (*((long *) dest))
: "m" (*((long *) src))
: "cc", "memory");
- arch_local_irq_restore(flags);
+ return rc;
+}
+
+/*
+ * Copy memory in real mode (kernel to kernel)
+ */
+int memcpy_real(void *dest, void *src, size_t count)
+{
+ unsigned long flags;
+ int rc;
+
+ if (!count)
+ return 0;
+ local_irq_save(flags);
+ __arch_local_irq_stnsm(0xfbUL);
+ rc = __memcpy_real(dest, src, count);
+ local_irq_restore(flags);
return rc;
}