|
@@ -26,37 +26,35 @@
|
|
|
* calling these symbols with arch_has_pmem_api() and redirect to the
|
|
|
* implementation in asm/pmem.h.
|
|
|
*/
|
|
|
-static inline void arch_memcpy_to_pmem(void __pmem *dst, const void *src,
|
|
|
- size_t n)
|
|
|
+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 __pmem *src,
|
|
|
- size_t n)
|
|
|
+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 __pmem *addr, size_t bytes,
|
|
|
+static inline size_t arch_copy_from_iter_pmem(void *addr, size_t bytes,
|
|
|
struct iov_iter *i)
|
|
|
{
|
|
|
BUG();
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static inline void arch_clear_pmem(void __pmem *addr, size_t size)
|
|
|
+static inline void arch_clear_pmem(void *addr, size_t size)
|
|
|
{
|
|
|
BUG();
|
|
|
}
|
|
|
|
|
|
-static inline void arch_wb_cache_pmem(void __pmem *addr, size_t size)
|
|
|
+static inline void arch_wb_cache_pmem(void *addr, size_t size)
|
|
|
{
|
|
|
BUG();
|
|
|
}
|
|
|
|
|
|
-static inline void arch_invalidate_pmem(void __pmem *addr, size_t size)
|
|
|
+static inline void arch_invalidate_pmem(void *addr, size_t size)
|
|
|
{
|
|
|
BUG();
|
|
|
}
|
|
@@ -67,13 +65,6 @@ static inline bool arch_has_pmem_api(void)
|
|
|
return IS_ENABLED(CONFIG_ARCH_HAS_PMEM_API);
|
|
|
}
|
|
|
|
|
|
-static inline int default_memcpy_from_pmem(void *dst, void __pmem const *src,
|
|
|
- size_t size)
|
|
|
-{
|
|
|
- memcpy(dst, (void __force *) src, size);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* memcpy_from_pmem - read from persistent memory with error handling
|
|
|
* @dst: destination buffer
|
|
@@ -82,40 +73,13 @@ static inline int default_memcpy_from_pmem(void *dst, void __pmem const *src,
|
|
|
*
|
|
|
* Returns 0 on success negative error code on failure.
|
|
|
*/
|
|
|
-static inline int memcpy_from_pmem(void *dst, void __pmem const *src,
|
|
|
- size_t size)
|
|
|
+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
|
|
|
- return default_memcpy_from_pmem(dst, src, size);
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * These defaults seek to offer decent performance and minimize the
|
|
|
- * window between i/o completion and writes being durable on media.
|
|
|
- * However, it is undefined / architecture specific whether
|
|
|
- * ARCH_MEMREMAP_PMEM + default_memcpy_to_pmem is sufficient for
|
|
|
- * making data durable relative to i/o completion.
|
|
|
- */
|
|
|
-static inline void default_memcpy_to_pmem(void __pmem *dst, const void *src,
|
|
|
- size_t size)
|
|
|
-{
|
|
|
- memcpy((void __force *) dst, src, size);
|
|
|
-}
|
|
|
-
|
|
|
-static inline size_t default_copy_from_iter_pmem(void __pmem *addr,
|
|
|
- size_t bytes, struct iov_iter *i)
|
|
|
-{
|
|
|
- return copy_from_iter_nocache((void __force *)addr, bytes, i);
|
|
|
-}
|
|
|
-
|
|
|
-static inline void default_clear_pmem(void __pmem *addr, size_t size)
|
|
|
-{
|
|
|
- if (size == PAGE_SIZE && ((unsigned long)addr & ~PAGE_MASK) == 0)
|
|
|
- clear_page((void __force *)addr);
|
|
|
- else
|
|
|
- memset((void __force *)addr, 0, size);
|
|
|
+ memcpy(dst, src, size);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -130,12 +94,12 @@ static inline void default_clear_pmem(void __pmem *addr, size_t size)
|
|
|
* data may still reside in cpu or platform buffers, so this operation
|
|
|
* must be followed by a blkdev_issue_flush() on the pmem block device.
|
|
|
*/
|
|
|
-static inline void memcpy_to_pmem(void __pmem *dst, const void *src, size_t n)
|
|
|
+static inline void memcpy_to_pmem(void *dst, const void *src, size_t n)
|
|
|
{
|
|
|
if (arch_has_pmem_api())
|
|
|
arch_memcpy_to_pmem(dst, src, n);
|
|
|
else
|
|
|
- default_memcpy_to_pmem(dst, src, n);
|
|
|
+ memcpy(dst, src, n);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -147,12 +111,12 @@ static inline void memcpy_to_pmem(void __pmem *dst, const void *src, size_t n)
|
|
|
* Copy data from the iterator 'i' to the PMEM buffer starting at 'addr'.
|
|
|
* See blkdev_issue_flush() note for memcpy_to_pmem().
|
|
|
*/
|
|
|
-static inline size_t copy_from_iter_pmem(void __pmem *addr, size_t bytes,
|
|
|
+static inline size_t copy_from_iter_pmem(void *addr, size_t bytes,
|
|
|
struct iov_iter *i)
|
|
|
{
|
|
|
if (arch_has_pmem_api())
|
|
|
return arch_copy_from_iter_pmem(addr, bytes, i);
|
|
|
- return default_copy_from_iter_pmem(addr, bytes, i);
|
|
|
+ return copy_from_iter_nocache(addr, bytes, i);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -163,12 +127,12 @@ static inline size_t copy_from_iter_pmem(void __pmem *addr, size_t bytes,
|
|
|
* Write zeros into the memory range starting at 'addr' for 'size' bytes.
|
|
|
* See blkdev_issue_flush() note for memcpy_to_pmem().
|
|
|
*/
|
|
|
-static inline void clear_pmem(void __pmem *addr, size_t size)
|
|
|
+static inline void clear_pmem(void *addr, size_t size)
|
|
|
{
|
|
|
if (arch_has_pmem_api())
|
|
|
arch_clear_pmem(addr, size);
|
|
|
else
|
|
|
- default_clear_pmem(addr, size);
|
|
|
+ memset(addr, 0, size);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -179,7 +143,7 @@ static inline void clear_pmem(void __pmem *addr, size_t size)
|
|
|
* For platforms that support clearing poison this flushes any poisoned
|
|
|
* ranges out of the cache
|
|
|
*/
|
|
|
-static inline void invalidate_pmem(void __pmem *addr, size_t size)
|
|
|
+static inline void invalidate_pmem(void *addr, size_t size)
|
|
|
{
|
|
|
if (arch_has_pmem_api())
|
|
|
arch_invalidate_pmem(addr, size);
|
|
@@ -193,7 +157,7 @@ static inline void invalidate_pmem(void __pmem *addr, size_t size)
|
|
|
* Write back the processor cache range starting at 'addr' for 'size' bytes.
|
|
|
* See blkdev_issue_flush() note for memcpy_to_pmem().
|
|
|
*/
|
|
|
-static inline void wb_cache_pmem(void __pmem *addr, size_t size)
|
|
|
+static inline void wb_cache_pmem(void *addr, size_t size)
|
|
|
{
|
|
|
if (arch_has_pmem_api())
|
|
|
arch_wb_cache_pmem(addr, size);
|