+Andrew On Fri, Feb 21, 2025, Su Hui wrote: > When build kernel with randconfig, there is an error: > > In function ‘kvm_is_cr4_bit_set’,inlined from > ‘kvm_update_cpuid_runtime’ at arch/x86/kvm/cpuid.c:310:9: > > include/linux/compiler_types.h:542:38: error: call to > ‘__compiletime_assert_380’ declared with attribute error: > BUILD_BUG_ON failed: !is_power_of_2(cr4_bit). Andrew, do you want to grab this? Looks like you've taken the last few changes to log2.h, and KVM isn't the only subsystem that expects is_power_of_2() to yield a compile-time constant; taking this through the KVM tree feels wrong. arch/x86/kvm/kvm_cache_regs.h: BUILD_BUG_ON(!is_power_of_2(cr0_bit)); arch/x86/kvm/kvm_cache_regs.h: BUILD_BUG_ON(!is_power_of_2(cr4_bit)); arch/x86/kvm/x86.c: BUILD_BUG_ON(!is_power_of_2(ASYNC_PF_PER_VCPU)); drivers/net/ipa/gsi.c: BUILD_BUG_ON(!is_power_of_2(GSI_RING_ELEMENT_SIZE)); drivers/vfio/pci/virtio/legacy_io.c: BUILD_BUG_ON(!is_power_of_2(virtvdev->bar0_virtual_buf_size)); kernel/kcov.c: BUILD_BUG_ON(!is_power_of_2(KCOV_WORDS_PER_CMP)); mm/sparse.c: BUILD_BUG_ON(!is_power_of_2(sizeof(struct mem_section))); mm/swap_cgroup.c: BUILD_BUG_ON(!is_power_of_2(ID_PER_SC)); > '!is_power_of_2(X86_CR4_OSXSAVE)' is False, but gcc treats is_power_of_2() > as non-inline function and a compilation error happens. Fix this by marking > is_power_of_2() with __always_inline. > > Signed-off-by: Su Hui <suhui@xxxxxxxxxxxx> > --- > include/linux/log2.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/linux/log2.h b/include/linux/log2.h > index 9f30d087a128..1366cb688a6d 100644 > --- a/include/linux/log2.h > +++ b/include/linux/log2.h > @@ -41,7 +41,7 @@ int __ilog2_u64(u64 n) > * *not* considered a power of two. > * Return: true if @n is a power of 2, otherwise false. > */ > -static inline __attribute__((const)) > +static __always_inline __attribute__((const)) > bool is_power_of_2(unsigned long n) > { > return (n != 0 && ((n & (n - 1)) == 0)); > -- > 2.30.2 >