Boaz Harrosh wrote on 2016-10-26: > On 10/26/2016 06:50 PM, Brian Boylston wrote: >> copy_from_iter_nocache() now uses nocache copies for all types of iovecs >> on x86, so the flush in arch_copy_from_iter_pmem() is no longer needed. >> >> Cc: Ross Zwisler <ross.zwis...@linux.intel.com> >> Cc: Thomas Gleixner <t...@linutronix.de> >> Cc: Ingo Molnar <mi...@redhat.com> >> Cc: "H. Peter Anvin" <h...@zytor.com> >> Cc: <x...@kernel.org> >> Cc: Al Viro <v...@zeniv.linux.org.uk> >> Cc: Dan Williams <dan.j.willi...@intel.com> >> Signed-off-by: Brian Boylston <brian.boyls...@hpe.com> >> Reviewed-by: Toshi Kani <toshi.k...@hpe.com> >> Reported-by: Oliver Moreno <oliver.mor...@hpe.com> >> --- >> arch/x86/include/asm/pmem.h | 19 +------------------ >> 1 file changed, 1 insertion(+), 18 deletions(-) >> diff --git a/arch/x86/include/asm/pmem.h b/arch/x86/include/asm/pmem.h >> index 643eba4..2fbf4ae 100644 >> --- a/arch/x86/include/asm/pmem.h >> +++ b/arch/x86/include/asm/pmem.h >> @@ -72,15 +72,6 @@ static inline void arch_wb_cache_pmem(void *addr, size_t >> size) >> clwb(p); >> } >> -/* >> - * copy_from_iter_nocache() on x86 only uses non-temporal stores for iovec >> - * iterators, so for other types (bvec & kvec) we must do a cache >> write-back. >> - */ >> -static inline bool __iter_needs_pmem_wb(struct iov_iter *i) >> -{ >> - return iter_is_iovec(i) == false; >> -} >> - >> /** >> * arch_copy_from_iter_pmem - copy data from an iterator to PMEM >> * @addr: PMEM destination address >> @@ -92,15 +83,7 @@ static inline bool __iter_needs_pmem_wb(struct iov_iter >> *i) >> static inline size_t arch_copy_from_iter_pmem(void *addr, size_t bytes, >> struct iov_iter *i) >> { >> - size_t len; >> - >> - /* TODO: skip the write-back by always using non-temporal stores */ >> - len = copy_from_iter_nocache(addr, bytes, i); >> - >> - if (__iter_needs_pmem_wb(i)) >> - arch_wb_cache_pmem(addr, bytes); >> - >> - return len; >> + return copy_from_iter_nocache(addr, bytes, i); > > I wish you would remove all this completely. Don't see the point for it > anymore >
At first, I was just targeting bvecs for the splice() case, so I had left the check and the flush in there for kvecs. When doing this v2 of the patch set, I made kvecs nocache as well, so removed the check and flush, but didn't follow through completely as you suggest. Will revisit. Thanks! Brian > Thanks a lot for doing this. I have this patch for ages in my trees and was > too > lasy to fight them through. Yes it is a big boost for many workloads. > > Lots of gratitude > Boaz > >> } >> /**