Re: [PATCH] setup: dynamically detect default huge page size

Prateek <[email protected]>
Newsgroups org.kernel.vger.io-uring
Message-ID <[email protected]>
Hi Gabriel,

Thanks for the review.

On Mon, Jun 22, 2026 at 16:49 Gabriel Krisman Bertazi wrote:
> > +static size_t get_huge_page_size(void)
> > +{
> > +   static size_t hps;
>
> Please, initialize your static variables to makes it readable. I.e,
> should be initialized it to 2MB.

hps is left at 0 on purpose as a "not computed yet" flag -- same thing get_page_size() does in arch/aarch64/lib.h with cache_val. If I set hps = 2MB upfront, the first call just returns 2MB without ever reading /proc/meminfo, which defeats the point.

> > +   size_t ret = 2 * 1024 * 1024; /* fallback: 2MB */
>
> ret redundant with hps, could go away.

The local ret is there so I only write to hps once at the end. If two threads race into this function, neither one sees a half-baked fallback value in hps. The race itself is harmless since both threads would compute the same result anyway.

> > +       if (p + 13 <= end &&
> > +           p[0]  == 'H' && p[1]  == 'u' && p[2]  == 'g' &&
> > +           p[3]  == 'e' && p[4]  == 'p' && p[5]  == 'a' &&
> > +           p[6]  == 'g' && p[7]  == 'e' && p[8]  == 's' &&
> > +           p[9]  == 'i' && p[10] == 'z' && p[11] == 'e' &&
> > +           p[12] == ':') {
>
> This is unreadable.  It would be much better as a two line loop
> iterating over two strings...  But then, why not create it a couple line
> implementation of memcmp and atoi in arch/generic/lib.h instead?

Yeah, the char-by-char match is ugly, agreed. For v2 I'll add a __uring_memcmp in nolibc.c and shim it in lib.h behind #ifdef CONFIG_NOLIBC, same way memset/malloc/free are done today. arch/generic/lib.h only gets included on archs without nolibc support, so putting memcmp there wouldn't help x86/aarch64/riscv64 nolibc builds. nolibc.c + lib.h shim covers all configs. Then setup.c just calls memcmp(p, "Hugepagesize:", 13) -- normal builds use libc's memcmp, nolibc builds use the shim. I'll keep the digit parsing loop as-is since it's simple enough and pulling in atoi feels like overkill.

> This function should go in arch/generic/lib.h too.  A hint is the
> get_page_size is already there.

get_huge_page_size() only lives in setup.c and uses the __sys* wrappers from syscall.h, which work in all build configs. Unlike get_page_size() which is needed across multiple files, there's no reason to put this in the arch headers and duplicate it four times.

> That said, we should be looking into something like the kernel's nolibc
> instead of reinventing libc.

Agreed, worth looking into separately. This patch just fixes the immediate hugepage issue.

Will send a v2 with the memcmp approach.

Thanks,
Prateek
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.