Message ID | 20241120111516.304250-1-maz@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | KVM: arm64: Mark set_sysreg_masks() as inline to avoid build failure | expand |
On Wed, Nov 20, 2024 at 11:15:16AM +0000, Marc Zyngier wrote: > When compiling with CONFIG_CC_OPTIMIZE_FOR_SIZE=y, set_sysreg_masks() > fails to compile thanks to: > > BUILD_BUG_ON(!__builtin_constant_p(sr)); > > as the compiler doesn't identify sr as a constant, despite all the > callers passing constants. > > Fix the issue by always inlining this function, which allows GCC to > do the right thing. > > Reported-by: kernel test robot <lkp@intel.com> > Closes: https://lore.kernel.org/oe-kbuild-all/202411201857.ZNudtGJl-lkp@intel.com/ > Fixes: a0162020095e2 ("KVM: arm64: Extend masking facility to arbitrary registers") > Signed-off-by: Marc Zyngier <maz@kernel.org> > --- > arch/arm64/kvm/nested.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c > index aeaa6017ffd89..9b36218b48def 100644 > --- a/arch/arm64/kvm/nested.c > +++ b/arch/arm64/kvm/nested.c > @@ -951,7 +951,7 @@ u64 kvm_vcpu_apply_reg_masks(const struct kvm_vcpu *vcpu, > return v; > } > > -static void set_sysreg_masks(struct kvm *kvm, int sr, u64 res0, u64 res1) > +static __always_inline void set_sysreg_masks(struct kvm *kvm, int sr, u64 res0, u64 res1) > { > int i = sr - __SANITISED_REG_START__; > Reviewed-by: Joey Gouly <joey.gouly@arm.com>
On Wed, 20 Nov 2024 11:15:16 +0000, Marc Zyngier wrote: > When compiling with CONFIG_CC_OPTIMIZE_FOR_SIZE=y, set_sysreg_masks() > fails to compile thanks to: > > BUILD_BUG_ON(!__builtin_constant_p(sr)); > > as the compiler doesn't identify sr as a constant, despite all the > callers passing constants. > > [...] Applied to fixes, thanks! [1/1] KVM: arm64: Mark set_sysreg_masks() as inline to avoid build failure https://git.kernel.org/kvmarm/kvmarm/c/0f3a0f23f562 -- Best, Oliver
diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c index aeaa6017ffd89..9b36218b48def 100644 --- a/arch/arm64/kvm/nested.c +++ b/arch/arm64/kvm/nested.c @@ -951,7 +951,7 @@ u64 kvm_vcpu_apply_reg_masks(const struct kvm_vcpu *vcpu, return v; } -static void set_sysreg_masks(struct kvm *kvm, int sr, u64 res0, u64 res1) +static __always_inline void set_sysreg_masks(struct kvm *kvm, int sr, u64 res0, u64 res1) { int i = sr - __SANITISED_REG_START__;
When compiling with CONFIG_CC_OPTIMIZE_FOR_SIZE=y, set_sysreg_masks() fails to compile thanks to: BUILD_BUG_ON(!__builtin_constant_p(sr)); as the compiler doesn't identify sr as a constant, despite all the callers passing constants. Fix the issue by always inlining this function, which allows GCC to do the right thing. Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202411201857.ZNudtGJl-lkp@intel.com/ Fixes: a0162020095e2 ("KVM: arm64: Extend masking facility to arbitrary registers") Signed-off-by: Marc Zyngier <maz@kernel.org> --- arch/arm64/kvm/nested.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)