All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <david.laight.linux@gmail.com>
To: Eric Biggers <ebiggers@kernel.org>
Cc: Feng Jiang <jiangfeng@kylinos.cn>,
	pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu,
	alex@ghiti.fr, kees@kernel.org, andy@kernel.org,
	akpm@linux-foundation.org, martin.petersen@oracle.com,
	ardb@kernel.org, ajones@ventanamicro.com,
	conor.dooley@microchip.com, samuel.holland@sifive.com,
	linus.walleij@linaro.org, nathan@kernel.org,
	linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
	linux-hardening@vger.kernel.org
Subject: Re: [PATCH v2 01/14] lib/string: extract generic strlen() into __generic_strlen()
Date: Wed, 14 Jan 2026 10:10:34 +0000	[thread overview]
Message-ID: <20260114101034.7961852a@pumpkin> (raw)
In-Reply-To: <20260114000151.GB2178@quark>

On Tue, 13 Jan 2026 16:01:51 -0800
Eric Biggers <ebiggers@kernel.org> wrote:

..
> A similar problem exists with the architecture-optimized CRC and crypto
> functions.  Historically, these subsystems exported both generic and
> architecture-optimized functions.
> 
> We've actually been moving away from that design to simplify things.
> For example, for CRC-32C there's now just the crc32c() function which
> delegates to the "best" CRC-32C implementation, with no direct access to
> the generic implementation of CRC-32C.
> 
> crc_kunit then just tests and benchmarks crc32c().  To check how the
> performance of crc32c() changes when its implementation changes (whether
> the change is the addition of an arch-optimized implementation or a
> change in an existing arch-optimized implementation), the developer just
> needs to run crc_kunit with two kernels, before and after.

For the mul_div tests I arranged that the test code could #include the
source for the generic implementation so it could run that as well as
the version compiled into the main kernel.

This involved wrapping the function in:
#if !defined(function) || defined(test_function)
type function(args)
...
}
#if !defined(function)
EXPORT_SYMBOL(function)
#endif
#endif

So the test code can use:
#define function generic_function
#define test_function
#include "function.c"

to get a private copy of the generic code.

	David

WARNING: multiple messages have this Message-ID (diff)
From: David Laight <david.laight.linux@gmail.com>
To: Eric Biggers <ebiggers@kernel.org>
Cc: Feng Jiang <jiangfeng@kylinos.cn>,
	pjw@kernel.org, palmer@dabbelt.com, aou@eecs.berkeley.edu,
	alex@ghiti.fr, kees@kernel.org, andy@kernel.org,
	akpm@linux-foundation.org, martin.petersen@oracle.com,
	ardb@kernel.org, ajones@ventanamicro.com,
	conor.dooley@microchip.com, samuel.holland@sifive.com,
	linus.walleij@linaro.org, nathan@kernel.org,
	linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org,
	linux-hardening@vger.kernel.org
Subject: Re: [PATCH v2 01/14] lib/string: extract generic strlen() into __generic_strlen()
Date: Wed, 14 Jan 2026 10:10:34 +0000	[thread overview]
Message-ID: <20260114101034.7961852a@pumpkin> (raw)
In-Reply-To: <20260114000151.GB2178@quark>

On Tue, 13 Jan 2026 16:01:51 -0800
Eric Biggers <ebiggers@kernel.org> wrote:

..
> A similar problem exists with the architecture-optimized CRC and crypto
> functions.  Historically, these subsystems exported both generic and
> architecture-optimized functions.
> 
> We've actually been moving away from that design to simplify things.
> For example, for CRC-32C there's now just the crc32c() function which
> delegates to the "best" CRC-32C implementation, with no direct access to
> the generic implementation of CRC-32C.
> 
> crc_kunit then just tests and benchmarks crc32c().  To check how the
> performance of crc32c() changes when its implementation changes (whether
> the change is the addition of an arch-optimized implementation or a
> change in an existing arch-optimized implementation), the developer just
> needs to run crc_kunit with two kernels, before and after.

For the mul_div tests I arranged that the test code could #include the
source for the generic implementation so it could run that as well as
the version compiled into the main kernel.

This involved wrapping the function in:
#if !defined(function) || defined(test_function)
type function(args)
...
}
#if !defined(function)
EXPORT_SYMBOL(function)
#endif
#endif

So the test code can use:
#define function generic_function
#define test_function
#include "function.c"

to get a private copy of the generic code.

	David

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

  parent reply	other threads:[~2026-01-14 10:10 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-13  8:27 [PATCH v2 00/14] riscv: optimize string functions and add kunit tests Feng Jiang
2026-01-13  8:27 ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 01/14] lib/string: extract generic strlen() into __generic_strlen() Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:33   ` Andy Shevchenko
2026-01-13  8:33     ` Andy Shevchenko
2026-01-14  0:01   ` Eric Biggers
2026-01-14  0:01     ` Eric Biggers
2026-01-14  1:41     ` Feng Jiang
2026-01-14  1:41       ` Feng Jiang
2026-01-14  7:07     ` Andy Shevchenko
2026-01-14  7:07       ` Andy Shevchenko
2026-01-14 10:10     ` David Laight [this message]
2026-01-14 10:10       ` David Laight
2026-01-15  6:50       ` Feng Jiang
2026-01-15  6:50         ` Feng Jiang
2026-01-15  6:55         ` Andy Shevchenko
2026-01-15  6:55           ` Andy Shevchenko
2026-01-13  8:27 ` [PATCH v2 02/14] lib/string: extract generic strnlen() into __generic_strnlen() Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 03/14] lib/string: extract generic strchr() into __generic_strchr() Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 04/14] lib/string: extract generic strrchr() into __generic_strrchr() Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 05/14] lib/string_kunit: add correctness test for strlen Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 06/14] lib/string_kunit: add correctness test for strnlen Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:41   ` Andy Shevchenko
2026-01-13  8:41     ` Andy Shevchenko
2026-01-13  8:27 ` [PATCH v2 07/14] lib/string_kunit: add correctness test for strrchr() Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 08/14] lib/string_kunit: add performance benchmark for strlen() Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:46   ` Andy Shevchenko
2026-01-13  8:46     ` Andy Shevchenko
2026-01-14  6:14     ` Feng Jiang
2026-01-14  6:14       ` Feng Jiang
2026-01-14  7:04       ` Feng Jiang
2026-01-14  7:04         ` Feng Jiang
2026-01-14  7:21         ` Andy Shevchenko
2026-01-14  7:21           ` Andy Shevchenko
2026-01-14  8:05           ` Feng Jiang
2026-01-14  8:05             ` Feng Jiang
2026-01-14 10:21         ` David Laight
2026-01-14 10:21           ` David Laight
2026-01-15  6:24           ` Feng Jiang
2026-01-15  6:24             ` Feng Jiang
2026-01-15 10:40             ` David Laight
2026-01-15 10:40               ` David Laight
2026-01-18 11:11   ` kernel test robot
2026-01-18 11:11     ` kernel test robot
2026-01-13  8:27 ` [PATCH v2 09/14] lib/string_kunit: add performance benchmark for strnlen() Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 10/14] lib/string_kunit: add performance benchmark for strchr() Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 11/14] lib/string_kunit: add performance benchmark for strrchr() Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 12/14] riscv: lib: add strnlen implementation Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:48   ` Andy Shevchenko
2026-01-13  8:48     ` Andy Shevchenko
2026-01-13  8:27 ` [PATCH v2 13/14] riscv: lib: add strchr implementation Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:27 ` [PATCH v2 14/14] riscv: lib: add strrchr implementation Feng Jiang
2026-01-13  8:27   ` Feng Jiang
2026-01-13  8:52 ` [PATCH v2 00/14] riscv: optimize string functions and add kunit tests Andy Shevchenko
2026-01-13  8:52   ` Andy Shevchenko
2026-01-15  4:43 ` Joel Stanley
2026-01-15  4:43   ` Joel Stanley
2026-01-19  9:24   ` Feng Jiang
2026-01-19  9:24     ` Feng Jiang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260114101034.7961852a@pumpkin \
    --to=david.laight.linux@gmail.com \
    --cc=ajones@ventanamicro.com \
    --cc=akpm@linux-foundation.org \
    --cc=alex@ghiti.fr \
    --cc=andy@kernel.org \
    --cc=aou@eecs.berkeley.edu \
    --cc=ardb@kernel.org \
    --cc=conor.dooley@microchip.com \
    --cc=ebiggers@kernel.org \
    --cc=jiangfeng@kylinos.cn \
    --cc=kees@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=martin.petersen@oracle.com \
    --cc=nathan@kernel.org \
    --cc=palmer@dabbelt.com \
    --cc=pjw@kernel.org \
    --cc=samuel.holland@sifive.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.