From: Eric Biggers <ebiggers@kernel.org>
To: "Jason A. Donenfeld" <Jason@zx2c4.com>
Cc: linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, loongarch@lists.linux.dev,
linux-mips@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org,
sparclinux@vger.kernel.org, x86@kernel.org,
linux-arch@vger.kernel.org, Ard Biesheuvel <ardb@kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH v2 00/12] lib/crc: improve how arch-optimized code is integrated
Date: Tue, 10 Jun 2025 12:12:08 -0700 [thread overview]
Message-ID: <20250610191208.GD1649@sol> (raw)
In-Reply-To: <aEhtyvBajGE80_2Z@zx2c4.com>
On Tue, Jun 10, 2025 at 11:39:22AM -0600, Jason A. Donenfeld wrote:
> On Sun, Jun 08, 2025 at 04:48:17PM -0700, Eric Biggers wrote:
> > On Sat, Jun 07, 2025 at 05:47:02PM -0600, Jason A. Donenfeld wrote:
> > > On Sat, Jun 07, 2025 at 01:04:42PM -0700, Eric Biggers wrote:
> > > > Having arch-specific code outside arch/ was somewhat controversial when
> > > > Zinc proposed it back in 2018. But I don't think the concerns are
> > > > warranted. It's better from a technical perspective, as it enables the
> > > > improvements mentioned above. This model is already successfully used
> > > > in other places in the kernel such as lib/raid6/. The community of each
> > > > architecture still remains free to work on the code, even if it's not in
> > > > arch/. At the time there was also a desire to put the library code in
> > > > the same files as the old-school crypto API, but that was a mistake; now
> > > > that the library is separate, that's no longer a constraint either.
> > >
> > > I can't express how happy I am to see this revived. It's clearly the
> > > right way forward and makes it a lot simpler for us to dispatch to
> > > various arch implementations and also is organizationally simpler.
> > >
> > > Jason
> >
> > Thanks! Can I turn that into an Acked-by?
>
> Took me a little while longer to fully review it. Sure,
>
> Acked-by: Jason A. Donenfeld <Jason@zx2c4.com>
>
> Side note: I wonder about eventually turning some of the static branches
> into static calls.
Yes, Linus was wondering the same thing earlier. It does run into a couple
issues. First, only x86 and powerpc implement static_call properly; everywhere
else it's just an indirect call. Second, there's often some code shared above
the level at which we'd like to do the dispatch. For example, consider crc32_le
on x86. If we expand the CRC_PCLMUL macro and inline crc32_le_arch and
crc32_le_base as the compiler does, crc32_le ends up as:
u32 crc32_le(u32 crc, const u8 *p, size_t len)
{
if (len >= 16 && static_branch_likely(&have_pclmulqdq) &&
crypto_simd_usable()) {
const void *consts_ptr;
consts_ptr = crc32_lsb_0xedb88320_consts.fold_across_128_bits_consts;
kernel_fpu_begin();
crc = static_call(crc32_lsb_pclmul)(crc, p, len, consts_ptr);
kernel_fpu_end();
return crc;
}
while (len--)
crc = (crc >> 8) ^ crc32table_le[(crc & 255) ^ *p++];
return crc;
}
The existing static_call selects between 3 different assembly functions, all of
which require a kernel-mode FPU section and only support len >= 16.
We could instead unconditionally do a static_call upon entry to the function,
with 4 possible targets. But then we'd have to duplicate the kernel FPU
begin/end sequence in 3 different functions. Also, it would add an extra
function call for the case where 'len < 16', which is a common case and is
exactly the case where per-call overhead matters the most.
However, if we could actually inline the static call into the *callers* of
crc32_le(), that would make it more worthwhile. I'm not sure that's possible,
though, especially considering that this code is tristate.
Anyway, this is tangential to this patchset. Though the new way the code is
organized does make it more feasible to have e.g. a centralized static_call in
the future if we choose to go in that direction.
- Eric
next prev parent reply other threads:[~2025-06-10 19:12 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-07 20:04 [PATCH v2 00/12] lib/crc: improve how arch-optimized code is integrated Eric Biggers
2025-06-07 20:04 ` [PATCH v2 01/12] lib/crc: move files into lib/crc/ Eric Biggers
2025-06-07 20:04 ` [PATCH v2 02/12] lib/crc: prepare for arch-optimized code in subdirs of lib/crc/ Eric Biggers
2025-06-07 20:04 ` [PATCH v2 03/12] lib/crc/arm: migrate arm-optimized CRC code into lib/crc/ Eric Biggers
2025-06-07 20:04 ` [PATCH v2 04/12] lib/crc/arm64: migrate arm64-optimized " Eric Biggers
2025-06-07 20:04 ` [PATCH v2 05/12] lib/crc/loongarch: migrate loongarch-optimized " Eric Biggers
2025-06-07 20:04 ` [PATCH v2 06/12] lib/crc/mips: migrate mips-optimized " Eric Biggers
2025-06-07 20:04 ` [PATCH v2 07/12] lib/crc/powerpc: migrate powerpc-optimized " Eric Biggers
2025-06-07 20:04 ` [PATCH v2 08/12] lib/crc/riscv: migrate riscv-optimized " Eric Biggers
2025-06-07 20:04 ` [PATCH v2 09/12] lib/crc/s390: migrate s390-optimized " Eric Biggers
2025-06-13 16:01 ` Alexander Gordeev
2025-06-13 17:11 ` Eric Biggers
2025-06-14 13:24 ` Alexander Gordeev
2025-06-07 20:04 ` [PATCH v2 10/12] lib/crc/sparc: migrate sparc-optimized " Eric Biggers
2025-06-07 20:04 ` [PATCH v2 11/12] lib/crc/x86: migrate x86-optimized " Eric Biggers
2025-06-07 20:04 ` [PATCH v2 12/12] lib/crc: remove ARCH_HAS_* kconfig symbols Eric Biggers
2025-06-07 23:47 ` [PATCH v2 00/12] lib/crc: improve how arch-optimized code is integrated Jason A. Donenfeld
2025-06-08 23:48 ` Eric Biggers
2025-06-10 17:39 ` Jason A. Donenfeld
2025-06-10 19:12 ` Eric Biggers [this message]
2025-06-09 7:40 ` Ingo Molnar
2025-06-09 18:54 ` Eric Biggers
2025-06-09 8:15 ` Julian Calaby
2025-06-09 19:48 ` Eric Biggers
2025-06-09 22:36 ` Julian Calaby
2025-06-09 22:59 ` Eric Biggers
2025-06-09 19:16 ` Martin K. Petersen
2025-06-10 18:47 ` Eric Biggers
2025-06-14 12:59 ` Alexander Gordeev
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=20250610191208.GD1649@sol \
--to=ebiggers@kernel.org \
--cc=Jason@zx2c4.com \
--cc=ardb@kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=loongarch@lists.linux.dev \
--cc=sparclinux@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).