| /* | 
 |  * 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; | 
 | } |