+Cc: kbuild, modules On 5/25/26 9:03 AM, Wentao Guan wrote: > Use hardware 'crc32b' to partial_crc32_one() when support, > it shows 2x speed up than crctab32 way. > > I think it will be scaled to more architecture.
Could you please provide measurements showing how this improves the runtime of genksyms and affects the overall kernel build time? Are CRC calculations actually a hot path in genksyms? I don't think it is worth complicating the genksyms code with architecture-specific optimizations unless there is a clear benefit. Additionally, many distributions already switched to gendwarfksyms last year. Unless someone provides a good reason to keep genksyms around, I expect it will be deprecated soon and eventually removed. It would be more valuable to show whether the same optimization is worthwhile for gendwarfksyms. -- Thanks, Petr > > Signed-off-by: Wentao Guan <[email protected]> > --- > changelog: > 1. remove change in partial_crc32(), > for partial_crc32_one() already use crc32b. > > --- > --- > scripts/genksyms/genksyms.c | 34 ++++++++++++++++++++++++++++++++++ > 1 file changed, 34 insertions(+) > > diff --git a/scripts/genksyms/genksyms.c b/scripts/genksyms/genksyms.c > index 83e48670c2fcf..80b7797c842aa 100644 > --- a/scripts/genksyms/genksyms.c > +++ b/scripts/genksyms/genksyms.c > @@ -116,8 +116,40 @@ static const uint32_t crctab32[] = { > 0x2d02ef8dU > }; > > +/* > + * Architecture-specific CRC32 hardware acceleration. > + */ > +static int crc32_hw_available; > + > +#ifdef __aarch64__ > +#include <sys/auxv.h> > +#include <asm/hwcap.h> > + > +static void crc32_check_hw(void) > +{ > + crc32_hw_available = (getauxval(AT_HWCAP) & HWCAP_CRC32) != 0; > +} > + > +static inline uint32_t crc32_hw_byte(uint8_t c, uint32_t crc) > +{ > + asm volatile(".arch_extension crc\n\t" > + "crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(c)); > + return crc; > +} > + > +#else > +static void crc32_check_hw(void) > +{ > + crc32_hw_available = 0; > +} > +#endif > + > static uint32_t partial_crc32_one(uint8_t c, uint32_t crc) > { > +#if defined(__aarch64__) > + if (__builtin_expect(crc32_hw_available, 0)) > + return crc32_hw_byte(c, crc); > +#endif > return crctab32[(crc ^ c) & 0xff] ^ (crc >> 8); > } > > @@ -740,6 +772,8 @@ int main(int argc, char **argv) > FILE *dumpfile = NULL, *ref_file = NULL; > int o; > > + crc32_check_hw(); > + > struct option long_opts[] = { > {"debug", 0, 0, 'd'}, > {"warnings", 0, 0, 'w'},

