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