To support performance benchmarking in KUnit tests, extract the generic C implementation of strlen() into a standalone function __generic_strlen(). This allows tests to compare architecture-optimized versions against the generic baseline without duplicating code.
Suggested-by: Andy Shevchenko <[email protected]> Signed-off-by: Feng Jiang <[email protected]> --- include/linux/string.h | 1 + lib/string.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/linux/string.h b/include/linux/string.h index 1b564c36d721..961645633b4d 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -197,6 +197,7 @@ extern char * strstr(const char *, const char *); #ifndef __HAVE_ARCH_STRNSTR extern char * strnstr(const char *, const char *, size_t); #endif +extern __kernel_size_t __generic_strlen(const char *); #ifndef __HAVE_ARCH_STRLEN extern __kernel_size_t strlen(const char *); #endif diff --git a/lib/string.c b/lib/string.c index b632c71df1a5..047ecb38e09b 100644 --- a/lib/string.c +++ b/lib/string.c @@ -412,8 +412,7 @@ char *strnchr(const char *s, size_t count, int c) EXPORT_SYMBOL(strnchr); #endif -#ifndef __HAVE_ARCH_STRLEN -size_t strlen(const char *s) +size_t __generic_strlen(const char *s) { const char *sc; @@ -421,6 +420,13 @@ size_t strlen(const char *s) /* nothing */; return sc - s; } +EXPORT_SYMBOL(__generic_strlen); + +#ifndef __HAVE_ARCH_STRLEN +size_t strlen(const char *s) +{ + return __generic_strlen(s); +} EXPORT_SYMBOL(strlen); #endif -- 2.25.1
