| /* |
| * From code in arch/x86/lib/usercopy_64.c, copied to keep tools/ copy |
| * of the kernel's arch/x86/lib/memcpy_64.s used in 'perf bench mem memcpy' |
| * happy. |
| */ |
| #include <linux/types.h> |
| |
| unsigned long __memcpy_mcsafe(void *dst, const void *src, size_t cnt); |
| unsigned long mcsafe_handle_tail(char *to, char *from, unsigned len); |
| |
| unsigned long mcsafe_handle_tail(char *to, char *from, unsigned len) |
| { |
| for (; len; --len, to++, from++) { |
| /* |
| * Call the assembly routine back directly since |
| * memcpy_mcsafe() may silently fallback to memcpy. |
| */ |
| unsigned long rem = __memcpy_mcsafe(to, from, 1); |
| |
| if (rem) |
| break; |
| } |
| return len; |
| } |