diff options
author | Jonas Gorski <jogo@openwrt.org> | 2012-01-13 14:55:07 +0000 |
---|---|---|
committer | Jonas Gorski <jogo@openwrt.org> | 2012-01-13 14:55:07 +0000 |
commit | 1bc0abb058e09fd7214507dd4a095658a4b8d122 (patch) | |
tree | 82c35f5f43253e1a2ff9c2ff1318fac1c86e57df /target/linux/generic/patches-3.2/306-mips_mem_functions_performance.patch | |
parent | 50d4c0e31a6706f28b3c69cd24bcf0c205223e16 (diff) | |
download | mtk-20170518-1bc0abb058e09fd7214507dd4a095658a4b8d122.zip mtk-20170518-1bc0abb058e09fd7214507dd4a095658a4b8d122.tar.gz mtk-20170518-1bc0abb058e09fd7214507dd4a095658a4b8d122.tar.bz2 |
kernel: add support for linux 3.2.1
SVN-Revision: 29730
Diffstat (limited to 'target/linux/generic/patches-3.2/306-mips_mem_functions_performance.patch')
-rw-r--r-- | target/linux/generic/patches-3.2/306-mips_mem_functions_performance.patch | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/target/linux/generic/patches-3.2/306-mips_mem_functions_performance.patch b/target/linux/generic/patches-3.2/306-mips_mem_functions_performance.patch new file mode 100644 index 0000000..e432471 --- /dev/null +++ b/target/linux/generic/patches-3.2/306-mips_mem_functions_performance.patch @@ -0,0 +1,83 @@ +--- a/arch/mips/include/asm/string.h ++++ b/arch/mips/include/asm/string.h +@@ -133,11 +133,44 @@ strncmp(__const__ char *__cs, __const__ + + #define __HAVE_ARCH_MEMSET + extern void *memset(void *__s, int __c, size_t __count); ++#define memset(__s, __c, len) \ ++({ \ ++ size_t __len = (len); \ ++ void *__ret; \ ++ if (__builtin_constant_p(len) && __len >= 64) \ ++ __ret = memset((__s), (__c), __len); \ ++ else \ ++ __ret = __builtin_memset((__s), (__c), __len); \ ++ __ret; \ ++}) + + #define __HAVE_ARCH_MEMCPY + extern void *memcpy(void *__to, __const__ void *__from, size_t __n); ++#define memcpy(dst, src, len) \ ++({ \ ++ size_t __len = (len); \ ++ void *__ret; \ ++ if (__builtin_constant_p(len) && __len >= 64) \ ++ __ret = memcpy((dst), (src), __len); \ ++ else \ ++ __ret = __builtin_memcpy((dst), (src), __len); \ ++ __ret; \ ++}) + + #define __HAVE_ARCH_MEMMOVE + extern void *memmove(void *__dest, __const__ void *__src, size_t __n); ++#define memmove(dst, src, len) \ ++({ \ ++ size_t __len = (len); \ ++ void *__ret; \ ++ if (__builtin_constant_p(len) && __len >= 64) \ ++ __ret = memmove((dst), (src), __len); \ ++ else \ ++ __ret = __builtin_memmove((dst), (src), __len); \ ++ __ret; \ ++}) ++ ++#define __HAVE_ARCH_MEMCMP ++#define memcmp(src1, src2, len) __builtin_memcmp((src1), (src2), (len)) + + #endif /* _ASM_STRING_H */ +--- a/arch/mips/lib/Makefile ++++ b/arch/mips/lib/Makefile +@@ -3,7 +3,7 @@ + # + + lib-y += csum_partial.o delay.o memcpy.o memcpy-inatomic.o memset.o \ +- strlen_user.o strncpy_user.o strnlen_user.o uncached.o ++ strlen_user.o strncpy_user.o strnlen_user.o uncached.o memcmp.o + + obj-y += iomap.o + obj-$(CONFIG_PCI) += iomap-pci.o +--- /dev/null ++++ b/arch/mips/lib/memcmp.c +@@ -0,0 +1,22 @@ ++/* ++ * copied from linux/lib/string.c ++ * ++ * Copyright (C) 1991, 1992 Linus Torvalds ++ */ ++ ++#include <linux/module.h> ++#include <linux/string.h> ++ ++#undef memcmp ++int memcmp(const void *cs, const void *ct, size_t count) ++{ ++ const unsigned char *su1, *su2; ++ int res = 0; ++ ++ for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) ++ if ((res = *su1 - *su2) != 0) ++ break; ++ return res; ++} ++EXPORT_SYMBOL(memcmp); ++ |