]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
Revert "x86/copy_mc: Introduce copy_mc_enhanced_fast_string()"
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Nov 2020 17:05:21 +0000 (18:05 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Nov 2020 17:08:21 +0000 (18:08 +0100)
This reverts commit 4f28b1fb9d1daf3b98710a4b0520fa0c1767cd16 which is
commit 5da8e4a658109e3b7e1f45ae672b7c06ac3e7158 upstream.

We had a mistake when merging a later patch in this series due to some
file movements, so revert this change for now, as we will add it back in
a later commit.

Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/lib/copy_mc.c
arch/x86/lib/copy_mc_64.S
tools/objtool/check.c

index c13e8c9ee926b78dd8e6421353af72e13a7e2ea0..2633635530b7b4d63f26f9d5d480b090c5d44f8a 100644 (file)
@@ -45,8 +45,6 @@ void enable_copy_mc_fragile(void)
 #define copy_mc_fragile_enabled (0)
 #endif
 
-unsigned long copy_mc_enhanced_fast_string(void *dst, const void *src, unsigned len);
-
 /**
  * copy_mc_to_kernel - memory copy that handles source exceptions
  *
@@ -54,11 +52,9 @@ unsigned long copy_mc_enhanced_fast_string(void *dst, const void *src, unsigned
  * @src:       source address
  * @len:       number of bytes to copy
  *
- * Call into the 'fragile' version on systems that benefit from avoiding
- * corner case poison consumption scenarios, For example, accessing
- * poison across 2 cachelines with a single instruction. Almost all
- * other uses case can use copy_mc_enhanced_fast_string() for a fast
- * recoverable copy, or fallback to plain memcpy.
+ * Call into the 'fragile' version on systems that have trouble
+ * actually do machine check recovery. Everyone else can just
+ * use memcpy().
  *
  * Return 0 for success, or number of bytes not copied if there was an
  * exception.
@@ -67,8 +63,6 @@ unsigned long __must_check copy_mc_to_kernel(void *dst, const void *src, unsigne
 {
        if (copy_mc_fragile_enabled)
                return copy_mc_fragile(dst, src, len);
-       if (static_cpu_has(X86_FEATURE_ERMS))
-               return copy_mc_enhanced_fast_string(dst, src, len);
        memcpy(dst, src, len);
        return 0;
 }
@@ -78,19 +72,11 @@ unsigned long __must_check copy_mc_to_user(void *dst, const void *src, unsigned
 {
        unsigned long ret;
 
-       if (copy_mc_fragile_enabled) {
-               __uaccess_begin();
-               ret = copy_mc_fragile(dst, src, len);
-               __uaccess_end();
-               return ret;
-       }
-
-       if (static_cpu_has(X86_FEATURE_ERMS)) {
-               __uaccess_begin();
-               ret = copy_mc_enhanced_fast_string(dst, src, len);
-               __uaccess_end();
-               return ret;
-       }
+       if (!copy_mc_fragile_enabled)
+               return copy_user_generic(dst, src, len);
 
-       return copy_user_generic(dst, src, len);
+       __uaccess_begin();
+       ret = copy_mc_fragile(dst, src, len);
+       __uaccess_end();
+       return ret;
 }
index 892d8915f609e82bf33c7e5bead9f6d3deb78464..c3b613c4544a372be34105e8cc9cf49f6d59e5bc 100644 (file)
@@ -124,40 +124,4 @@ EXPORT_SYMBOL_GPL(copy_mc_fragile)
        _ASM_EXTABLE(.L_write_words, .E_write_words)
        _ASM_EXTABLE(.L_write_trailing_bytes, .E_trailing_bytes)
 #endif /* CONFIG_X86_MCE */
-
-/*
- * copy_mc_enhanced_fast_string - memory copy with exception handling
- *
- * Fast string copy + fault / exception handling. If the CPU does
- * support machine check exception recovery, but does not support
- * recovering from fast-string exceptions then this CPU needs to be
- * added to the copy_mc_fragile_key set of quirks. Otherwise, absent any
- * machine check recovery support this version should be no slower than
- * standard memcpy.
- */
-SYM_FUNC_START(copy_mc_enhanced_fast_string)
-       movq %rdi, %rax
-       movq %rdx, %rcx
-.L_copy:
-       rep movsb
-       /* Copy successful. Return zero */
-       xorl %eax, %eax
-       ret
-SYM_FUNC_END(copy_mc_enhanced_fast_string)
-
-       .section .fixup, "ax"
-.E_copy:
-       /*
-        * On fault %rcx is updated such that the copy instruction could
-        * optionally be restarted at the fault position, i.e. it
-        * contains 'bytes remaining'. A non-zero return indicates error
-        * to copy_mc_generic() users, or indicate short transfers to
-        * user-copy routines.
-        */
-       movq %rcx, %rax
-       ret
-
-       .previous
-
-       _ASM_EXTABLE_FAULT(.L_copy, .E_copy)
 #endif /* !CONFIG_UML */
index 42ac19e0299c6a6c2004f218be9e837440f81038..cf2d076f6ba598404d27f95dc081f8ea9eba5046 100644 (file)
@@ -550,7 +550,6 @@ static const char *uaccess_safe_builtin[] = {
        "csum_partial_copy_generic",
        "copy_mc_fragile",
        "copy_mc_fragile_handle_tail",
-       "copy_mc_enhanced_fast_string",
        "ftrace_likely_update", /* CONFIG_TRACE_BRANCH_PROFILING */
        NULL
 };