Commit cbf8b5a2 authored by Tony Luck's avatar Tony Luck Committed by Ingo Molnar

x86/mm, x86/mce: Fix return type/value for memcpy_mcsafe()

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: default avatarTony 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: 92b0729c ("x86/mm, x86/mce: Add memcpy_mcsafe()")
Link: http://lkml.kernel.org/r/695f14233fa7a54fcac4406c706d7fec228e3f4c.1457993040.git.tony.luck@intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent ba4e06d6
...@@ -87,9 +87,9 @@ int strcmp(const char *cs, const char *ct); ...@@ -87,9 +87,9 @@ int strcmp(const char *cs, const char *ct);
* *
* Low level memory copy function that catches machine checks * 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__ */ #endif /* __KERNEL__ */
......
/* Copyright 2002 Andi Kleen */ /* Copyright 2002 Andi Kleen */
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/errno.h>
#include <asm/cpufeatures.h> #include <asm/cpufeatures.h>
#include <asm/alternative-asm.h> #include <asm/alternative-asm.h>
...@@ -268,16 +269,16 @@ ENTRY(memcpy_mcsafe) ...@@ -268,16 +269,16 @@ ENTRY(memcpy_mcsafe)
decl %ecx decl %ecx
jnz .L_copy_trailing_bytes jnz .L_copy_trailing_bytes
/* Copy successful. Return true */ /* Copy successful. Return zero */
.L_done_memcpy_trap: .L_done_memcpy_trap:
xorq %rax, %rax xorq %rax, %rax
ret ret
ENDPROC(memcpy_mcsafe) ENDPROC(memcpy_mcsafe)
.section .fixup, "ax" .section .fixup, "ax"
/* Return false for any failure */ /* Return -EFAULT for any failure */
.L_memcpy_mcsafe_fail: .L_memcpy_mcsafe_fail:
mov $1, %rax mov $-EFAULT, %rax
ret ret
.previous .previous
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment