From: Eric Biggers <ebiggers@kernel.org>
To: Qu Wenruo <wqu@suse.com>
Cc: linux-btrfs@vger.kernel.org, linux-crypto@vger.kernel.org,
ardb@kernel.org
Subject: Re: [PATCH] lib/crc: x86: rewrite crc32c_x86_3way() in C with inline asm
Date: Mon, 9 Nov 2026 17:09:43 -0800 [thread overview]
Message-ID: <20261110010943.GB1958@quark> (raw)
In-Reply-To: <20261110002255.GA1958@quark>
On Mon, Nov 09, 2026 at 04:22:55PM -0800, Eric Biggers wrote:
> As much as I'd like to reduce the use of asm, I'm not sure this is super
> convincing. We get worse code generation and have to fall back to
> inline asm anyway, as the x86 intrinsics are still unusable in the
> kernel (which is different from userspace).
>
> This patch also introduces a compiler error with gcc. It seems only
> clang was tested. (Showing again that this kind of code often has
> compiler-specific issues, and we have to be extra careful to test it
> with every supported compiler version.)
>
> There's also a subtle bug where the inline asm blocks are missing the
> volatile qualifier, so technically they could be reordered after the
> kernel_fpu_end() and corrupt a userspace process's XMM registers.
> Without inline asm, this issue would not have been possible.
>
> I'd be interested in seeing what you can come up with for
> crc-pclmul-template.S, though I think that one is going to be harder to
> replace.
Also, just to emphasize: most "C" code using this strategy will be
mostly inline asm blocks, since that's what is needed to access the
vector registers in kernel code. See lib/raid/*/x86/ for some examples.
crc32c_x86_3way() is an exception because it mostly use scalar
instructions, with only a few vector instructions. So it makes this
strategy seem a bit more workable. But actually, as soon as this same
strategy is adopted for crc-pclmul-template.S or any of the many crypto
assembly files (AES, GHASH, ChaCha, Poly1305, BLAKE2, etc.) that use far
more vector instructions, it will become mostly inline asm blocks, just
like the RAID code.
So I feel it's kind of an odd path to go down. Perhaps as a
prerequisite for reimplementing some of this code in C (or will it soon
be Rust?), we should get the x86 intrinsics working in the kernel first?
- Eric
next prev parent reply other threads:[~2026-11-10 1:09 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-09 23:52 [PATCH] lib/crc: x86: rewrite crc32c_x86_3way() in C with inline asm Qu Wenruo
2026-11-10 0:22 ` Eric Biggers
2026-11-10 1:09 ` Eric Biggers [this message]
2026-11-10 1:22 ` Qu Wenruo
2026-11-10 1:35 ` Eric Biggers
2026-11-10 4:38 ` Qu Wenruo
2026-11-10 6:23 ` Qu Wenruo
2026-11-10 14:15 ` kernel test robot
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=20261110010943.GB1958@quark \
--to=ebiggers@kernel.org \
--cc=ardb@kernel.org \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=wqu@suse.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox