x86, dax, pmem: remove indirection around memcpy_from_pmem()
authorDan Williams <dan.j.williams@intel.com>
Fri, 13 Jan 2017 22:14:23 +0000 (14:14 -0800)
committerDan Williams <dan.j.williams@intel.com>
Tue, 25 Apr 2017 20:20:46 +0000 (13:20 -0700)
memcpy_from_pmem() maps directly to memcpy_mcsafe(). The wrapper
serves no real benefit aside from affording a more generic function name
than the x86-specific 'mcsafe'. However this would not be the first time
that x86 terminology leaked into the global namespace. For lack of
better name, just use memcpy_mcsafe() directly.

This conversion also catches a place where we should have been using
plain memcpy, acpi_nfit_blk_single_io().

Cc: <x86@kernel.org>
Cc: Jan Kara <jack@suse.cz>
Cc: Jeff Moyer <jmoyer@redhat.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Matthew Wilcox <mawilcox@microsoft.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Acked-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
arch/x86/include/asm/pmem.h
arch/x86/include/asm/string_64.h
drivers/acpi/nfit/core.c
drivers/nvdimm/claim.c
drivers/nvdimm/pmem.c
include/linux/pmem.h
include/linux/string.h

index 529bb4a6487a9e42d07d0c4ceb226e41b5808f0f..d5a22bac99880212c8ea4a799cc15898a6265819 100644 (file)
@@ -44,11 +44,6 @@ static inline void arch_memcpy_to_pmem(void *dst, const void *src, size_t n)
                BUG();
 }
 
-static inline int arch_memcpy_from_pmem(void *dst, const void *src, size_t n)
-{
-       return memcpy_mcsafe(dst, src, n);
-}
-
 /**
  * arch_wb_cache_pmem - write back a cache range with CLWB
  * @vaddr:     virtual start address
index a164862d77e3b4573e7a264c8712fac06ef7a830..733bae07fb29151aab2ab8ef51af95d1e5d059ee 100644 (file)
@@ -79,6 +79,7 @@ int strcmp(const char *cs, const char *ct);
 #define memset(s, c, n) __memset(s, c, n)
 #endif
 
+#define __HAVE_ARCH_MEMCPY_MCSAFE 1
 __must_check int memcpy_mcsafe_unrolled(void *dst, const void *src, size_t cnt);
 DECLARE_STATIC_KEY_FALSE(mcsafe_key);
 
index c8ea9d698cd0f30546d731df6429b3f556140a76..d0c07b2344e4ad52d4eb3086527807b472ba4dd8 100644 (file)
@@ -1783,8 +1783,7 @@ static int acpi_nfit_blk_single_io(struct nfit_blk *nfit_blk,
                                mmio_flush_range((void __force *)
                                        mmio->addr.aperture + offset, c);
 
-                       memcpy_from_pmem(iobuf + copied,
-                                       mmio->addr.aperture + offset, c);
+                       memcpy(iobuf + copied, mmio->addr.aperture + offset, c);
                }
 
                copied += c;
index ca6d572c48fcb62d7c8a83e4874f18b625caaeb8..3a35e8028b9c3d4e9143553649040c16384437e3 100644 (file)
@@ -239,7 +239,7 @@ static int nsio_rw_bytes(struct nd_namespace_common *ndns,
        if (rw == READ) {
                if (unlikely(is_bad_pmem(&nsio->bb, sector, sz_align)))
                        return -EIO;
-               return memcpy_from_pmem(buf, nsio->addr + offset, size);
+               return memcpy_mcsafe(buf, nsio->addr + offset, size);
        }
 
        if (unlikely(is_bad_pmem(&nsio->bb, sector, sz_align))) {
index 85b85633d674ea0b4b2f509d597967f7e34d4b6b..3b3dab73d7412ecf0095a83b491685784cebd7c9 100644 (file)
@@ -89,7 +89,7 @@ static int read_pmem(struct page *page, unsigned int off,
        int rc;
        void *mem = kmap_atomic(page);
 
-       rc = memcpy_from_pmem(mem + off, pmem_addr, len);
+       rc = memcpy_mcsafe(mem + off, pmem_addr, len);
        kunmap_atomic(mem);
        if (rc)
                return -EIO;
index e856c2cb0fe86da91d55e2766b687b66ad02cc1e..71ecf3d46aacb210edfed793d5ab0ece06671d72 100644 (file)
@@ -31,12 +31,6 @@ static inline void arch_memcpy_to_pmem(void *dst, const void *src, size_t n)
        BUG();
 }
 
-static inline int arch_memcpy_from_pmem(void *dst, const void *src, size_t n)
-{
-       BUG();
-       return -EFAULT;
-}
-
 static inline size_t arch_copy_from_iter_pmem(void *addr, size_t bytes,
                struct iov_iter *i)
 {
@@ -65,23 +59,6 @@ static inline bool arch_has_pmem_api(void)
        return IS_ENABLED(CONFIG_ARCH_HAS_PMEM_API);
 }
 
-/*
- * memcpy_from_pmem - read from persistent memory with error handling
- * @dst: destination buffer
- * @src: source buffer
- * @size: transfer length
- *
- * Returns 0 on success negative error code on failure.
- */
-static inline int memcpy_from_pmem(void *dst, void const *src, size_t size)
-{
-       if (arch_has_pmem_api())
-               return arch_memcpy_from_pmem(dst, src, size);
-       else
-               memcpy(dst, src, size);
-       return 0;
-}
-
 /**
  * memcpy_to_pmem - copy data to persistent memory
  * @dst: destination buffer for the copy
index 26b6f6a66f835b5f3fcb44da978e3d75b57054ec..9d6f189157e2cd1983ac8ac9c1287c995dacec37 100644 (file)
@@ -114,6 +114,14 @@ extern int memcmp(const void *,const void *,__kernel_size_t);
 #ifndef __HAVE_ARCH_MEMCHR
 extern void * memchr(const void *,int,__kernel_size_t);
 #endif
+#ifndef __HAVE_ARCH_MEMCPY_MCSAFE
+static inline __must_check int memcpy_mcsafe(void *dst, const void *src,
+               size_t cnt)
+{
+       memcpy(dst, src, cnt);
+       return 0;
+}
+#endif
 void *memchr_inv(const void *s, int c, size_t n);
 char *strreplace(char *s, char old, char new);