Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966338AbcCPIbP (ORCPT ); Wed, 16 Mar 2016 04:31:15 -0400 Received: from [198.137.202.12] ([198.137.202.12]:46718 "EHLO terminus.zytor.com" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S965576AbcCPIKb (ORCPT ); Wed, 16 Mar 2016 04:10:31 -0400 Date: Wed, 16 Mar 2016 01:06:35 -0700 From: tip-bot for Tony Luck Message-ID: Cc: a.p.zijlstra@chello.nl, bp@alien8.de, tglx@linutronix.de, peterz@infradead.org, mingo@kernel.org, dan.j.williams@intel.com, torvalds@linux-foundation.org, tony.luck@intel.com, linux-kernel@vger.kernel.org, akpm@linux-foundation.org, hpa@zytor.com, luto@kernel.org Reply-To: peterz@infradead.org, torvalds@linux-foundation.org, dan.j.williams@intel.com, mingo@kernel.org, a.p.zijlstra@chello.nl, bp@alien8.de, tglx@linutronix.de, hpa@zytor.com, luto@kernel.org, linux-kernel@vger.kernel.org, tony.luck@intel.com, akpm@linux-foundation.org In-Reply-To: <695f14233fa7a54fcac4406c706d7fec228e3f4c.1457993040.git.tony.luck@intel.com> References: <695f14233fa7a54fcac4406c706d7fec228e3f4c.1457993040.git.tony.luck@intel.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/urgent] x86/mm, x86/mce: Fix return type/value for memcpy_mcsafe() Git-Commit-ID: cbf8b5a2b649a501758291cb4d4ba1e5711771ba X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2960 Lines: 91 Commit-ID: cbf8b5a2b649a501758291cb4d4ba1e5711771ba Gitweb: http://git.kernel.org/tip/cbf8b5a2b649a501758291cb4d4ba1e5711771ba Author: Tony Luck AuthorDate: Mon, 14 Mar 2016 15:33:39 -0700 Committer: Ingo Molnar CommitDate: Wed, 16 Mar 2016 09:02:18 +0100 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ä Signed-off-by: Tony Luck Cc: Andrew Morton Cc: Andy Lutomirski Cc: Borislav Petkov Cc: Dan Williams Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Peter Zijlstra Cc: Thomas Gleixner 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 --- arch/x86/include/asm/string_64.h | 4 ++-- arch/x86/lib/memcpy_64.S | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/arch/x86/include/asm/string_64.h b/arch/x86/include/asm/string_64.h index ca6ba36..90dbbd9 100644 --- a/arch/x86/include/asm/string_64.h +++ b/arch/x86/include/asm/string_64.h @@ -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__ */ diff --git a/arch/x86/lib/memcpy_64.S b/arch/x86/lib/memcpy_64.S index cbb8ee5..2ec0b0abb 100644 --- a/arch/x86/lib/memcpy_64.S +++ b/arch/x86/lib/memcpy_64.S @@ -1,6 +1,7 @@ /* Copyright 2002 Andi Kleen */ #include +#include #include #include @@ -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