Re: [PATCH v5 0/2] Renovate memcpy_mcsafe with copy_mc_to_{user, kernel}
From: Dan Williams
Date: Fri Jun 05 2020 - 14:53:14 EST
On Wed, May 27, 2020 at 4:32 PM Dan Williams <dan.j.williams@xxxxxxxxx> wrote:
>
> Changes since v4 [1]:
> - Fix up .gitignore for PowerPC test artifacts (Michael)
>
> - Collect Michael's Ack.
>
> [1]: http://lore.kernel.org/r/159010126119.975921.6614194205409771984.stgit@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
>
> ---
>
> The primary motivation to go touch memcpy_mcsafe() is that the existing
> benefit of doing slow "handle with care" copies is obviated on newer
> CPUs. With that concern lifted it also obviates the need to continue to
> update the MCA-recovery capability detection code currently gated by
> "mcsafe_key". Now the old "mcsafe_key" opt-in to perform the copy with
> concerns for recovery fragility can instead be made an opt-out from the
> default fast copy implementation (enable_copy_mc_fragile()).
>
> The discussion with Linus on the first iteration of this patch
> identified that memcpy_mcsafe() was misnamed relative to its usage. The
> new names copy_mc_to_user() and copy_mc_to_kernel() clearly indicate the
> intended use case and lets the architecture organize the implementation
> accordingly.
>
> For both powerpc and x86 a copy_mc_generic() implementation is added as
> the backend for these interfaces.
>
> Patches are relative to tip/master.
I have not heard any additional feedback, or seen tip-bot traffic. Is
this still under consideration for v5.8? The kernel's behavior on new
platforms regresses without this, recoverable #MC escalates to panic.
>
> ---
>
> 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 | 64 ++++++++
> 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, 451 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: 229aaa8c059f2c908e0561453509f996f2b2d5c4