Re: [PATCH 5/8] lib/crc: arm: Enable arm64's NEON intrinsics implementation of crc64
Josh Law
joshlaw48 at gmail.com
Wed Apr 22 11:16:57 PDT 2026
Hi Ard,
Wow, 20x improvement is nuts.
I like how you handle this change *safely*
Like.
+static inline u64 crc64_nvme_arch(u64 crc, const u8 *p, size_t len)
+{
+ if (len >= 128 && static_branch_likely(&have_pmull) &&
+ likely(may_use_simd())) {
+ do {
+ size_t chunk = min_t(size_t, len & ~15, SZ_4K);
+
+ scoped_ksimd()
+ crc = crc64_nvme_neon(crc, p, chunk);
+
+ p += chunk;
+ len -= chunk;
+ } while (len >= 128);
+ }
chunking the SIMD work at SZ_4K to avoid hogging the CPU and allowing
softirqs/preemption to process is a great detail.
It’s easy to just wing it and throw
the entire buffer at the FPU, but respecting the kernel's latency
requirements is better!
Reviewed-by: Josh Law <joshlaw48 at gmail.com>
Thanks!
More information about the linux-arm-kernel
mailing list