2017-09-13 13:14:37

by Radim Krčmář

[permalink] [raw]
Subject: [PATCH] KVM: x86: fix clang build

Clang resolves __builtin_constant_p() to false even if the expression is
constant in the end. The only purpose of that expression was to
differentiate a case where the following expression couldn't be checked
at compile-time, so we can just remove the check.

Clang handles the following two correctly. Turn it into BUG_ON if there
are any more problems with this.

Fixes: d6321d493319 ("KVM: x86: generalize guest_cpuid_has_ helpers")
Reported-by: Dmitry Vyukov <[email protected]>
Signed-off-by: Radim Krčmář <[email protected]>
---
arch/x86/kvm/cpuid.h | 1 -
1 file changed, 1 deletion(-)

diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h
index 1ea3c0e1e3a9..0bc5c1315708 100644
--- a/arch/x86/kvm/cpuid.h
+++ b/arch/x86/kvm/cpuid.h
@@ -59,7 +59,6 @@ static __always_inline struct cpuid_reg x86_feature_cpuid(unsigned x86_feature)
{
unsigned x86_leaf = x86_feature / 32;

- BUILD_BUG_ON(!__builtin_constant_p(x86_leaf));
BUILD_BUG_ON(x86_leaf >= ARRAY_SIZE(reverse_cpuid));
BUILD_BUG_ON(reverse_cpuid[x86_leaf].function == 0);

--
2.14.1


2017-09-13 13:15:24

by David Hildenbrand

[permalink] [raw]
Subject: Re: [PATCH] KVM: x86: fix clang build

On 13.09.2017 15:13, Radim Krčmář wrote:
> Clang resolves __builtin_constant_p() to false even if the expression is
> constant in the end. The only purpose of that expression was to
> differentiate a case where the following expression couldn't be checked
> at compile-time, so we can just remove the check.
>
> Clang handles the following two correctly. Turn it into BUG_ON if there
> are any more problems with this.
>
> Fixes: d6321d493319 ("KVM: x86: generalize guest_cpuid_has_ helpers")
> Reported-by: Dmitry Vyukov <[email protected]>
> Signed-off-by: Radim Krčmář <[email protected]>
> ---
> arch/x86/kvm/cpuid.h | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h
> index 1ea3c0e1e3a9..0bc5c1315708 100644
> --- a/arch/x86/kvm/cpuid.h
> +++ b/arch/x86/kvm/cpuid.h
> @@ -59,7 +59,6 @@ static __always_inline struct cpuid_reg x86_feature_cpuid(unsigned x86_feature)
> {
> unsigned x86_leaf = x86_feature / 32;
>
> - BUILD_BUG_ON(!__builtin_constant_p(x86_leaf));
> BUILD_BUG_ON(x86_leaf >= ARRAY_SIZE(reverse_cpuid));
> BUILD_BUG_ON(reverse_cpuid[x86_leaf].function == 0);
>
>

Reviewed-by: David Hildenbrand <[email protected]>

--

Thanks,

David