All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kees Cook <kees@kernel.org>
To: jim.cromie@gmail.com
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Petr Mladek <pmladek@suse.com>,
	Zhen Lei <thunder.leizhen@huawei.com>,
	Luis Chamberlain <mcgrof@kernel.org>,
	Andrey Grodzovsky <andrey.grodzovsky@crowdstrike.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Lorenzo Stoakes <ljs@kernel.org>,
	David Laight <david.laight.linux@gmail.com>,
	Masahiro Yamada <masahiroy@kernel.org>,
	Jiri Olsa <olsajiri@gmail.com>,
	linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org,
	bpf@vger.kernel.org
Subject: Re: [PATCH v7 3/3] kallsyms: Unroll 24-bit sequence reconstruction in get_symbol_seq()
Date: Tue, 29 Sep 2026 23:56:12 -0700	[thread overview]
Message-ID: <202609292329.87EE58BCF8@keescook> (raw)
In-Reply-To: <20260929-ksyms-tune-v7-3-be568ceef41e@gmail.com>

On Tue, Sep 29, 2026 at 12:07:32PM -0600, Jim Cromie via B4 Relay wrote:
> Mark get_symbol_seq() as static inline and unroll the 3-byte extraction
> into direct byte shifts: (p[0] << 16) | (p[1] << 8) | p[2]. This
> eliminates loop induction variable maintenance and allows the compiler
> to generate direct loads and constant shifts.

So... did you actually see any difference in the output binary? This is
such a small loop I'd expect every compiler to both inline and unroll
it already. *time passes* I've checked; I was mostly right. :)

It's already inlined and unrolled by the compilers, but GCC weirdly
didn't see through the array math:

  At -O2 GCC (and Clang, mostly the same) on x86_64:

  before                                  after
  lea    (%rax,%rax,2),%eax               lea    (%rax,%rax,2),%edx
  mov    %rax,%rdx                        movslq %edx,%rdx
  movzbl seqs(%rax),%eax                  movzbl seqs(%rdx),%eax
  lea    0x1(%rdx),%ecx                   movzbl seqs+2(%rdx),%ecx
  add    $0x2,%edx                        movzbl seqs+1(%rdx),%edx
  movzbl seqs(%rcx),%ecx                  shl    $0x10,%eax
  shl    $0x8,%eax                        shl    $0x8,%edx
  movzbl seqs(%rdx),%edx                  or     %ecx,%eax
  or     %ecx,%eax                        or     %edx,%eax
  shl    $0x8,%eax
  or     %edx,%eax

So it's actually the loss of the "+ i" part that does it.

> -static unsigned int get_symbol_seq(int index)
> +static inline unsigned int get_symbol_seq(int index)
>  {
> -	unsigned int i, seq = 0;
> +	const u8 *p = &kallsyms_seqs_of_names[3 * index];
>  
> -	for (i = 0; i < 3; i++)
> -		seq = (seq << 8) | kallsyms_seqs_of_names[3 * index + i];
> -
> -	return seq;
> +	return (p[0] << 16) | (p[1] << 8) | p[2];
>  }

I'm on the fence about readability, but I think it's improved.

Reviewed-by: Kees Cook <kees@kernel.org>

-- 
Kees Cook

  reply	other threads:[~2026-09-30  6:56 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-29 18:07 [PATCH v7 0/3] kallsyms: Accelerate symbol name lookups by ~7x Jim Cromie via B4 Relay
2026-09-29 18:07 ` Jim Cromie
2026-09-29 18:07 ` [PATCH v7 1/3] kallsyms: Match compressed tokens on the fly during binary search Jim Cromie via B4 Relay
2026-09-29 18:07   ` Jim Cromie
2026-09-30  1:17   ` bot+bpf-ci
2026-09-30  6:26   ` Kees Cook
2026-09-29 18:07 ` [PATCH v7 2/3] kallsyms: Increase marker density to 16:1 to accelerate lookups Jim Cromie via B4 Relay
2026-09-29 18:07   ` Jim Cromie
2026-09-30  6:28   ` Kees Cook
2026-09-29 18:07 ` [PATCH v7 3/3] kallsyms: Unroll 24-bit sequence reconstruction in get_symbol_seq() Jim Cromie via B4 Relay
2026-09-29 18:07   ` Jim Cromie
2026-09-30  6:56   ` Kees Cook [this message]
2026-09-30  9:13     ` David Laight
2026-09-29 18:45 ` [PATCH v7 0/3] kallsyms: Accelerate symbol name lookups by ~7x Andrew Morton

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=202609292329.87EE58BCF8@keescook \
    --to=kees@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=andrey.grodzovsky@crowdstrike.com \
    --cc=bpf@vger.kernel.org \
    --cc=david.laight.linux@gmail.com \
    --cc=jim.cromie@gmail.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ljs@kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=olsajiri@gmail.com \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=thunder.leizhen@huawei.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.