|
@@ -727,6 +727,20 @@ size_t _copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i)
|
|
|
EXPORT_SYMBOL(_copy_from_iter_nocache);
|
|
|
|
|
|
#ifdef CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE
|
|
|
+/**
|
|
|
+ * _copy_from_iter_flushcache - write destination through cpu cache
|
|
|
+ * @addr: destination kernel address
|
|
|
+ * @bytes: total transfer length
|
|
|
+ * @iter: source iterator
|
|
|
+ *
|
|
|
+ * The pmem driver arranges for filesystem-dax to use this facility via
|
|
|
+ * dax_copy_from_iter() for ensuring that writes to persistent memory
|
|
|
+ * are flushed through the CPU cache. It is differentiated from
|
|
|
+ * _copy_from_iter_nocache() in that guarantees all data is flushed for
|
|
|
+ * all iterator types. The _copy_from_iter_nocache() only attempts to
|
|
|
+ * bypass the cache for the ITER_IOVEC case, and on some archs may use
|
|
|
+ * instructions that strand dirty-data in the cache.
|
|
|
+ */
|
|
|
size_t _copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i)
|
|
|
{
|
|
|
char *to = addr;
|