25 lines
647 B
C
25 lines
647 B
C
/*
|
|
* 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;
|
|
}
|