From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753956AbcCYSXE (ORCPT ); Fri, 25 Mar 2016 14:23:04 -0400 Received: from mga09.intel.com ([134.134.136.24]:59938 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752190AbcCYSXC convert rfc822-to-8bit (ORCPT ); Fri, 25 Mar 2016 14:23:02 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,392,1455004800"; d="scan'208";a="771521037" From: "Williams, Dan J" To: "torvalds@linux-foundation.org" , "mingo@kernel.org" , "akpm@linux-foundation.org" CC: "linux-kernel@vger.kernel.org" , "linux-nvdimm@lists.01.org" , "Luck, Tony" Subject: [GIT PULL] libnvdimm, pmem: hook up memcpy_mcsafe Thread-Topic: [GIT PULL] libnvdimm, pmem: hook up memcpy_mcsafe Thread-Index: AQHRhsNcgCN45Jy/pUK6sk+kWBD08g== Date: Fri, 25 Mar 2016 18:22:59 +0000 Message-ID: <1458930183.24753.8.camel@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.254.188.82] Content-Type: text/plain; charset="utf-7" Content-ID: <9B9088C4747E944588DFF1E155B8A628@intel.com> Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Linus, please pull from: +AKA- git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm libnvdimm-for-next Now that mcsafe+AF8-memcpy() has landed, and the return value was been clarified in commit+AKA-cbf8b5a2b649 +ACI-x86/mm, x86/mce: Fix return type/value for memcpy+AF8-mcsafe()+ACI-, let's hook up its primary usage in the pmem driver. --- The following changes since commit d88f48e12821ab4b2244124d50ac094568f48db5: +AKA- Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip (2016-03-24 09:47:32 -0700) are available in the git repository at: +AKA- git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm libnvdimm-for-next for you to fetch changes up to a2b056ea291d321a8addb34bf30a656b99cf70b1: +AKA- x86, pmem: use memcpy+AF8-mcsafe() for memcpy+AF8-from+AF8-pmem() (2016-03-25 09:16:56 -0700) ---------------------------------------------------------------- commit a2b056ea291d321a8addb34bf30a656b99cf70b1 Author: Dan Williams +ADw-dan.j.williams+AEA-intel.com+AD4- Date:+AKAAoACg-Tue Mar 8 10:30:19 2016 -0800 +AKAAoACgAKA-x86, pmem: use memcpy+AF8-mcsafe() for memcpy+AF8-from+AF8-pmem() +AKAAoACgAKA- +AKAAoACgAKA-Update the definition of memcpy+AF8-from+AF8-pmem() to return 0 or a negative +AKAAoACgAKA-error code.+AKAAoA-Implement x86/arch+AF8-memcpy+AF8-from+AF8-pmem() with memcpy+AF8-mcsafe(). +AKAAoACgAKA- +AKAAoACgAKA-Cc: Borislav Petkov +ADw-bp+AEA-alien8.de+AD4- +AKAAoACgAKA-Cc: Ingo Molnar +ADw-mingo+AEA-kernel.org+AD4- +AKAAoACgAKA-Cc: Tony Luck +ADw-tony.luck+AEA-intel.com+AD4- +AKAAoACgAKA-Cc: Thomas Gleixner +ADw-tglx+AEA-linutronix.de+AD4- +AKAAoACgAKA-Cc: Andy Lutomirski +ADw-luto+AEA-amacapital.net+AD4- +AKAAoACgAKA-Cc: Peter Zijlstra +ADw-peterz+AEA-infradead.org+AD4- +AKAAoACgAKA-Cc: Andrew Morton +ADw-akpm+AEA-linux-foundation.org+AD4- +AKAAoACgAKA-Cc: Linus Torvalds +ADw-torvalds+AEA-linux-foundation.org+AD4- +AKAAoACgAKA-Reviewed-by: Ross Zwisler +ADw-ross.zwisler+AEA-linux.intel.com+AD4- +AKAAoACgAKA-Signed-off-by: Dan Williams +ADw-dan.j.williams+AEA-intel.com+AD4- --- +AKA-arch/x86/include/asm/pmem.h +AHwAoACg-9 +-+-+-+-+-+-+-+-+- +AKA-drivers/nvdimm/pmem.c+AKAAoACgAKAAoACgAKAAfACgAKA-4 +-+--- +AKA-include/linux/pmem.h+AKAAoACgAKAAoACgAKAAoAB8- 15 +-+-+-+-+-+-+-+-+------- +AKA-3 files changed, 20 insertions(+-), 8 deletions(-) diff --git a/arch/x86/include/asm/pmem.h b/arch/x86/include/asm/pmem.h index bf8b35d2035a..fbc5e92e1ecc 100644 --- a/arch/x86/include/asm/pmem.h +-+-+- b/arch/x86/include/asm/pmem.h +AEAAQA- -47,6 +-47,15 +AEAAQA- static inline void arch+AF8-memcpy+AF8-to+AF8-pmem(void +AF8AXw-pmem +ACo-dst, const void +ACo-src, +AKA- BUG()+ADs- +AKAAfQ- +AKA- +-static inline int arch+AF8-memcpy+AF8-from+AF8-pmem(void +ACo-dst, const void +AF8AXw-pmem +ACo-src, +- size+AF8-t n) +-+AHs- +- if (static+AF8-cpu+AF8-has(X86+AF8-FEATURE+AF8-MCE+AF8-RECOVERY)) +- return memcpy+AF8-mcsafe(dst, (void +AF8AXw-force +ACo-) src, n)+ADs- +- memcpy(dst, (void +AF8AXw-force +ACo-) src, n)+ADs- +- return 0+ADs- +-+AH0- +- +AKA-/+ACoAKg- +AKA- +ACo- arch+AF8-wmb+AF8-pmem - synchronize writes to persistent memory +AKA- +ACo- diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c index ca5721c306bb..cc31c6f1f88e 100644 --- a/drivers/nvdimm/pmem.c +-+-+- b/drivers/nvdimm/pmem.c +AEAAQA- -99,7 +-99,7 +AEAAQA- static int pmem+AF8-do+AF8-bvec(struct pmem+AF8-device +ACo-pmem, struct page +ACo-page, +AKA- if (unlikely(bad+AF8-pmem)) +AKA- rc +AD0- -EIO+ADs- +AKA- else +AHs- - memcpy+AF8-from+AF8-pmem(mem +- off, pmem+AF8-addr, len)+ADs- +- rc +AD0- memcpy+AF8-from+AF8-pmem(mem +- off, pmem+AF8-addr, len)+ADs- +AKA- flush+AF8-dcache+AF8-page(page)+ADs- +AKA- +AH0- +AKA- +AH0- else +AHs- +AEAAQA- -295,7 +-295,7 +AEAAQA- static int pmem+AF8-rw+AF8-bytes(struct nd+AF8-namespace+AF8-common +ACo-ndns, +AKA- +AKA- if (unlikely(is+AF8-bad+AF8-pmem(+ACY-pmem-+AD4-bb, offset / 512, sz+AF8-align))) +AKA- return -EIO+ADs- - memcpy+AF8-from+AF8-pmem(buf, pmem-+AD4-virt+AF8-addr +- offset, size)+ADs- +- return memcpy+AF8-from+AF8-pmem(buf, pmem-+AD4-virt+AF8-addr +- offset, size)+ADs- +AKA- +AH0- else +AHs- +AKA- memcpy+AF8-to+AF8-pmem(pmem-+AD4-virt+AF8-addr +- offset, buf, size)+ADs- +AKA- wmb+AF8-pmem()+ADs- diff --git a/include/linux/pmem.h b/include/linux/pmem.h index 3ec5309e29f3..cdb024386f3a 100644 --- a/include/linux/pmem.h +-+-+- b/include/linux/pmem.h +AEAAQA- -66,14 +-66,17 +AEAAQA- static inline void arch+AF8-invalidate+AF8-pmem(void +AF8AXw-pmem +ACo-addr, size+AF8-t size) +AKAAIw-endif +AKA- +AKA-/+ACo- - +ACo- Architectures that define ARCH+AF8-HAS+AF8-PMEM+AF8-API must provide - +ACo- implementations for arch+AF8-memcpy+AF8-to+AF8-pmem(), arch+AF8-wmb+AF8-pmem(), - +ACo- arch+AF8-copy+AF8-from+AF8-iter+AF8-pmem(), arch+AF8-clear+AF8-pmem(), arch+AF8-wb+AF8-cache+AF8-pmem() - +ACo- and arch+AF8-has+AF8-wmb+AF8-pmem(). +- +ACo- memcpy+AF8-from+AF8-pmem - read from persistent memory with error handling +- +ACo- +AEA-dst: destination buffer +- +ACo- +AEA-src: source buffer +- +ACo- +AEA-size: transfer length +- +ACo- +- +ACo- Returns 0 on success negative error code on failure. +AKA- +ACo-/ -static inline void memcpy+AF8-from+AF8-pmem(void +ACo-dst, void +AF8AXw-pmem const +ACo-src, size+AF8-t size) +-static inline int memcpy+AF8-from+AF8-pmem(void +ACo-dst, void +AF8AXw-pmem const +ACo-src, +- size+AF8-t size) +AKAAew- - memcpy(dst, (void +AF8AXw-force const +ACo-) src, size)+ADs- +- return arch+AF8-memcpy+AF8-from+AF8-pmem(dst, src, size)+ADs- +AKAAfQ- +AKA- +AKA-static inline bool arch+AF8-has+AF8-pmem+AF8-api(void)