]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ARM: 9468/1: fix memset64() on big-endian
authorThomas Weissschuh <thomas.weissschuh@linutronix.de>
Wed, 7 Jan 2026 10:01:49 +0000 (11:01 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Sat, 31 Jan 2026 12:58:27 +0000 (12:58 +0000)
On big-endian systems the 32-bit low and high halves need to be swapped
for the underlying assembly implementation to work correctly.

Fixes: fd1d362600e2 ("ARM: implement memset32 & memset64")
Cc: stable@vger.kernel.org
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/include/asm/string.h

index 6c607c68f3ad75a84aef0a82a778466ccf53ab91..c35250c4991bc7b01fbdf5a460758235b2965354 100644 (file)
@@ -42,7 +42,10 @@ static inline void *memset32(uint32_t *p, uint32_t v, __kernel_size_t n)
 extern void *__memset64(uint64_t *, uint32_t low, __kernel_size_t, uint32_t hi);
 static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n)
 {
-       return __memset64(p, v, n * 8, v >> 32);
+       if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN))
+               return __memset64(p, v, n * 8, v >> 32);
+       else
+               return __memset64(p, v >> 32, n * 8, v);
 }
 
 /*