On Mon, Aug 04, 2025 at 09:43:56AM -0700, Kees Cook wrote: > Hi, > > While tracking down a problem where constant expressions used by > BUILD_BUG_ON() suddenly stopped working[1], we found that an added static > initializer was convincing the compiler that it couldn't track the state > of the prior statically initialized value. Tracing this down found that > ffs() was used in the initializer macro, but since it wasn't marked with > __attribute_const__, the compiler had to assume the function might > change variable states as a side-effect (which is not true for ffs(), > which provides deterministic math results). > > Add KUnit tests for the family of functions and then add __attribute_const__ > to all architecture implementations and wrappers. > > -Kees > > [1] https://github.com/KSPP/linux/issues/364 > > Kees Cook (17): > KUnit: Introduce ffs()-family tests > bitops: Add __attribute_const__ to generic ffs()-family > implementations > csky: Add __attribute_const__ to ffs()-family implementations > x86: Add __attribute_const__ to ffs()-family implementations > powerpc: Add __attribute_const__ to ffs()-family implementations > sh: Add __attribute_const__ to ffs()-family implementations > alpha: Add __attribute_const__ to ffs()-family implementations > hexagon: Add __attribute_const__ to ffs()-family implementations > riscv: Add __attribute_const__ to ffs()-family implementations > openrisc: Add __attribute_const__ to ffs()-family implementations > m68k: Add __attribute_const__ to ffs()-family implementations > mips: Add __attribute_const__ to ffs()-family implementations > parisc: Add __attribute_const__ to ffs()-family implementations > s390: Add __attribute_const__ to ffs()-family implementations > xtensa: Add __attribute_const__ to ffs()-family implementations > sparc: Add __attribute_const__ to ffs()-family implementations > KUnit: ffs: Validate all the __attribute_const__ annotations
Acked-by: Peter Zijlstra (Intel) <pet...@infradead.org>