[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20231019043305.GB14965@google.com>
Date: Thu, 19 Oct 2023 13:33:05 +0900
From: Sergey Senozhatsky <senozhatsky@...omium.org>
To: Mike Kravetz <mike.kravetz@...cle.com>
Cc: Nick Desaulniers <ndesaulniers@...gle.com>,
Nathan Chancellor <nathan@...nel.org>,
Usama Arif <usama.arif@...edance.com>, linux-mm@...ck.org,
linux-kernel@...r.kernel.org, akpm@...ux-foundation.org,
muchun.song@...ux.dev, songmuchun@...edance.com,
fam.zheng@...edance.com, liangma@...ngbit.com,
punit.agrawal@...edance.com,
Konrad Dybcio <konrad.dybcio@...aro.org>, llvm@...ts.linux.dev
Subject: Re: [PATCH] mm: hugetlb: Only prep and add allocated folios for
non-gigantic pages
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".
Powered by blists - more mailing lists