On Wed, Sep 23, 2020 at 10:00 AM Dan Williams <dan.j.williams@xxxxxxxxx> wrote: > > Changes since v8 [1]: > - Rebase on v5.9-rc6 > > - Fix a performance regression in the x86 copy_mc_to_user() > implementation that was duplicating copies in the "fragile" case. > > - Refreshed the cover letter. > > [1]: http://lore.kernel.org/r/159630255616.3143511.18110575960499749012.stgit@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx > Given that Linus was the primary source of review feedback on these patches and a version of them have been soaking in -next with only a minor conflict report with vfs.git for the entirety of the v5.9-rc cycle (left there inadvertently while I was on leave), any concerns with me sending this to Linus directly during the merge window? > > The motivations to go rework memcpy_mcsafe() are that the benefit of > doing slow and careful copies is obviated on newer CPUs, and that the > current opt-in list of cpus to instrument recovery is broken relative to > those cpus. There is no need to keep an opt-in list up to date on an > ongoing basis if pmem/dax operations are instrumented for recovery by > default. With recovery enabled by default the old "mcsafe_key" opt-in to > careful copying can be made a "fragile" opt-out. Where the "fragile" > list takes steps to not consume poison across cachelines. > > The discussion with Linus made clear that the current "_mcsafe" suffix > was imprecise to a fault. The operations that are needed by pmem/dax are > to copy from a source address that might throw #MC to a destination that > may write-fault, if it is a user page. So copy_to_user_mcsafe() becomes > copy_mc_to_user() to indicate the separate precautions taken on source > and destination. copy_mc_to_kernel() is introduced as a version that > does not expect write-faults on the destination, but is still prepared > to abort with an error code upon taking #MC. > > These patches have received a kbuild-robot build success notification > across 114 configs, the rebase to v5.9-rc6 did not encounter any > conflicts, and the merge with tip/master is conflict-free. > > --- > > Dan Williams (2): > x86, powerpc: Rename memcpy_mcsafe() to copy_mc_to_{user,kernel}() > x86/copy_mc: Introduce copy_mc_generic() > > > arch/powerpc/Kconfig | 2 > arch/powerpc/include/asm/string.h | 2 > arch/powerpc/include/asm/uaccess.h | 40 +++-- > arch/powerpc/lib/Makefile | 2 > arch/powerpc/lib/copy_mc_64.S | 4 > arch/x86/Kconfig | 2 > arch/x86/Kconfig.debug | 2 > arch/x86/include/asm/copy_mc_test.h | 75 +++++++++ > arch/x86/include/asm/mcsafe_test.h | 75 --------- > arch/x86/include/asm/string_64.h | 32 ---- > arch/x86/include/asm/uaccess.h | 21 +++ > arch/x86/include/asm/uaccess_64.h | 20 -- > arch/x86/kernel/cpu/mce/core.c | 8 - > arch/x86/kernel/quirks.c | 9 - > arch/x86/lib/Makefile | 1 > arch/x86/lib/copy_mc.c | 65 ++++++++ > arch/x86/lib/copy_mc_64.S | 165 ++++++++++++++++++++ > arch/x86/lib/memcpy_64.S | 115 -------------- > arch/x86/lib/usercopy_64.c | 21 --- > drivers/md/dm-writecache.c | 15 +- > drivers/nvdimm/claim.c | 2 > drivers/nvdimm/pmem.c | 6 - > include/linux/string.h | 9 - > include/linux/uaccess.h | 9 + > include/linux/uio.h | 10 + > lib/Kconfig | 7 + > lib/iov_iter.c | 43 +++-- > tools/arch/x86/include/asm/mcsafe_test.h | 13 -- > tools/arch/x86/lib/memcpy_64.S | 115 -------------- > tools/objtool/check.c | 5 - > tools/perf/bench/Build | 1 > tools/perf/bench/mem-memcpy-x86-64-lib.c | 24 --- > tools/testing/nvdimm/test/nfit.c | 48 +++--- > .../testing/selftests/powerpc/copyloops/.gitignore | 2 > tools/testing/selftests/powerpc/copyloops/Makefile | 6 - > .../selftests/powerpc/copyloops/copy_mc_64.S | 1 > .../selftests/powerpc/copyloops/memcpy_mcsafe_64.S | 1 > 37 files changed, 452 insertions(+), 526 deletions(-) > rename arch/powerpc/lib/{memcpy_mcsafe_64.S => copy_mc_64.S} (98%) > create mode 100644 arch/x86/include/asm/copy_mc_test.h > delete mode 100644 arch/x86/include/asm/mcsafe_test.h > create mode 100644 arch/x86/lib/copy_mc.c > create mode 100644 arch/x86/lib/copy_mc_64.S > delete mode 100644 tools/arch/x86/include/asm/mcsafe_test.h > delete mode 100644 tools/perf/bench/mem-memcpy-x86-64-lib.c > create mode 120000 tools/testing/selftests/powerpc/copyloops/copy_mc_64.S > delete mode 120000 tools/testing/selftests/powerpc/copyloops/memcpy_mcsafe_64.S > > base-commit: ba4f184e126b751d1bffad5897f263108befc780 > _______________________________________________ > Linux-nvdimm mailing list -- linux-nvdimm@xxxxxxxxxxxx > To unsubscribe send an email to linux-nvdimm-leave@xxxxxxxxxxxx