x86/mm, x86/mce: Fix return type/value for memcpy_mcsafe()
authorTony Luck <tony.luck@intel.com>
Mon, 14 Mar 2016 22:33:39 +0000 (15:33 -0700)
committerIngo Molnar <mingo@kernel.org>
Wed, 16 Mar 2016 08:02:18 +0000 (09:02 +0100)
Returning a 'bool' was very unpopular. Doubly so because the
code was just wrong (returning zero for true, one for false;
great for shell programming, not so good for C).

Change return type to "int". Keep zero as the success indicator
because it matches other similar code and people may be more
comfortable writing:

if (memcpy_mcsafe(to, from, count)) {
printk("Sad panda, copy failed\n");
...
}

Make the failure return value -EFAULT for now.

Reported by: Mika Penttilä <mika.penttila@nextfour.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: mika.penttila@nextfour.com
Fixes: 92b0729c34ca ("x86/mm, x86/mce: Add memcpy_mcsafe()")
Link: http://lkml.kernel.org/r/695f14233fa7a54fcac4406c706d7fec228e3f4c.1457993040.git.tony.luck@intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/include/asm/string_64.h
arch/x86/lib/memcpy_64.S

index ca6ba36077054605580e8b8a6236eab7aa65733f..90dbbd9666d43cef657542251b4824d29c0fa7b9 100644 (file)
@@ -87,9 +87,9 @@ int strcmp(const char *cs, const char *ct);
  *
  * Low level memory copy function that catches machine checks
  *
- * Return true for success, false for fail
+ * Return 0 for success, -EFAULT for fail
  */
-bool memcpy_mcsafe(void *dst, const void *src, size_t cnt);
+int memcpy_mcsafe(void *dst, const void *src, size_t cnt);
 
 #endif /* __KERNEL__ */
 
index cbb8ee5830ff134f131533fd91ea8be35a853dba..2ec0b0abbfaa876fb242b71061b70cdb7dc9db20 100644 (file)
@@ -1,6 +1,7 @@
 /* Copyright 2002 Andi Kleen */
 
 #include <linux/linkage.h>
+#include <asm/errno.h>
 #include <asm/cpufeatures.h>
 #include <asm/alternative-asm.h>
 
@@ -268,16 +269,16 @@ ENTRY(memcpy_mcsafe)
        decl %ecx
        jnz .L_copy_trailing_bytes
 
-       /* Copy successful. Return true */
+       /* Copy successful. Return zero */
 .L_done_memcpy_trap:
        xorq %rax, %rax
        ret
 ENDPROC(memcpy_mcsafe)
 
        .section .fixup, "ax"
-       /* Return false for any failure */
+       /* Return -EFAULT for any failure */
 .L_memcpy_mcsafe_fail:
-       mov     $1, %rax
+       mov     $-EFAULT, %rax
        ret
 
        .previous