Re: [PATCH] mm: hugetlb: Only prep and add allocated folios for non-gigantic pages

From: Sergey Senozhatsky
Date: Thu Oct 19 2023 - 00:33:21 EST


On (23/10/18 15:20), Mike Kravetz wrote:
> > I think you need to initialize h, otherwise what value is passed to
> > prep_and_add_bootmem_folios if the loop is not run because the list is
> > empty. The compiler sees `h` is only given a value in the loop, so
> > the loop must be run. That's obviously hazardous, but the compiler
> > assumes there's no UB. At least that's my limited understanding
> > looking at the IR diff Nathan got me in
> > https://github.com/ClangBuiltLinux/linux/issues/1946.
>
> Thanks for looking closer at this Nick and Nathan!
>
> I think you are saying the compiler is running the loop because it wants
> to initialize h before passing the value to another function. It does
> this even if the explicit loop entry condition is false. Is that correct?

The loop is getting promoted to "infinite" loop, there is no
&pos->member != (head) condition check in the generated code
at all (at least on my machine).

I wish we could at least get the "possibly uninitialized variable"
warning from the compiler in this case, which we'd translate to
"hold my beer, I'm going to try one thing".