On Tue, Jan 30, 2024 at 01:39:10PM +0200, Nick Kossifidis wrote:
On 1/28/24 13:10, Jisheng Zhang wrote:
From: Matteo Croce <mcroce@xxxxxxxxxxxxx>
When the destination buffer is before the source one, or when the
buffers doesn't overlap, it's safe to use memcpy() instead, which is
optimized to use a bigger data size possible.
Signed-off-by: Matteo Croce <mcroce@xxxxxxxxxxxxx>
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Signed-off-by: Jisheng Zhang <jszhang@xxxxxxxxxx>
I'd expect to have memmove handle both fw/bw copying and then memcpy being
an alias to memmove, to also take care when regions overlap and avoid
undefined behavior.
Hi Nick,
Here is somthing from man memcpy:
"void *memcpy(void dest[restrict .n], const void src[restrict .n],
size_t n);
The memcpy() function copies n bytes from memory area src to memory area dest.
The memory areas must not overlap. Use memmove(3) if the memory areas do over‐
lap."
IMHO, the "restrict" implies that there's no overlap. If overlap
happens, the manual doesn't say what will happen.
From another side, I have a concern: currently, other arch don't have
this alias behavior, IIUC(at least, per my understanding of arm and arm64
memcpy implementations)they just copy forward. I want to keep similar behavior
for riscv.
So I want to hear more before going towards alias-memcpy-to-memmove direction.
Thanks