[PATCH v2 03/18] KVM: arm64: vgic-v5: Remove use of __assign_bit() with a constant

Joey Gouly joey.gouly at arm.com
Wed May 20 06:26:35 PDT 2026


On Wed, May 20, 2026 at 10:19:34AM +0100, Marc Zyngier wrote:
> Using __assign_bit() is very useful when the value of the bit is
> not known at compile time. In all other cases, __set_bit() and
> __clear_bit() are the correct tool for the job.
> 
> This also fixes an odd case of using VGIC_V5_NR_PRIVATE_IRQS as
> the bit value...
> 
> Signed-off-by: Marc Zyngier <maz at kernel.org>

Reviewed-by: Joey Gouly <joey.gouly at arm.com>

> ---
>  arch/arm64/kvm/vgic/vgic-v5.c | 16 +++++++---------
>  1 file changed, 7 insertions(+), 9 deletions(-)
> 
> diff --git a/arch/arm64/kvm/vgic/vgic-v5.c b/arch/arm64/kvm/vgic/vgic-v5.c
> index 7c146fccc9689..4d62b1c31fe8b 100644
> --- a/arch/arm64/kvm/vgic/vgic-v5.c
> +++ b/arch/arm64/kvm/vgic/vgic-v5.c
> @@ -25,13 +25,13 @@ static void vgic_v5_get_implemented_ppis(void)
>  	 * If we have KVM, we have EL2, which means that we have support for the
>  	 * EL1 and EL2 Physical & Virtual timers.
>  	 */
> -	__assign_bit(GICV5_ARCH_PPI_CNTHP, ppi_caps.impl_ppi_mask, 1);
> -	__assign_bit(GICV5_ARCH_PPI_CNTV, ppi_caps.impl_ppi_mask, 1);
> -	__assign_bit(GICV5_ARCH_PPI_CNTHV, ppi_caps.impl_ppi_mask, 1);
> -	__assign_bit(GICV5_ARCH_PPI_CNTP, ppi_caps.impl_ppi_mask, 1);
> +	__set_bit(GICV5_ARCH_PPI_CNTHP, ppi_caps.impl_ppi_mask);
> +	__set_bit(GICV5_ARCH_PPI_CNTV, ppi_caps.impl_ppi_mask);
> +	__set_bit(GICV5_ARCH_PPI_CNTHV, ppi_caps.impl_ppi_mask);
> +	__set_bit(GICV5_ARCH_PPI_CNTP, ppi_caps.impl_ppi_mask);
>  
>  	/* The SW_PPI should be available */
> -	__assign_bit(GICV5_ARCH_PPI_SW_PPI, ppi_caps.impl_ppi_mask, 1);
> +	__set_bit(GICV5_ARCH_PPI_SW_PPI, ppi_caps.impl_ppi_mask);
>  
>  	/* The PMUIRQ is available if we have the PMU */
>  	__assign_bit(GICV5_ARCH_PPI_PMUIRQ, ppi_caps.impl_ppi_mask, system_supports_pmuv3());
> @@ -146,9 +146,7 @@ int vgic_v5_init(struct kvm *kvm)
>  	/* We only allow userspace to drive the SW_PPI, if it is implemented. */
>  	bitmap_zero(kvm->arch.vgic.gicv5_vm.userspace_ppis,
>  		    VGIC_V5_NR_PRIVATE_IRQS);
> -	__assign_bit(GICV5_ARCH_PPI_SW_PPI,
> -		     kvm->arch.vgic.gicv5_vm.userspace_ppis,
> -		     VGIC_V5_NR_PRIVATE_IRQS);
> +	__set_bit(GICV5_ARCH_PPI_SW_PPI, kvm->arch.vgic.gicv5_vm.userspace_ppis);
>  	bitmap_and(kvm->arch.vgic.gicv5_vm.userspace_ppis,
>  		   kvm->arch.vgic.gicv5_vm.userspace_ppis,
>  		   ppi_caps.impl_ppi_mask, VGIC_V5_NR_PRIVATE_IRQS);
> @@ -197,7 +195,7 @@ int vgic_v5_finalize_ppi_state(struct kvm *kvm)
>  		/* Expose PPIs with an owner or the SW_PPI, only */
>  		scoped_guard(raw_spinlock_irqsave, &irq->irq_lock) {
>  			if (irq->owner || i == GICV5_ARCH_PPI_SW_PPI) {
> -				__assign_bit(i, kvm->arch.vgic.gicv5_vm.vgic_ppi_mask, 1);
> +				__set_bit(i, kvm->arch.vgic.gicv5_vm.vgic_ppi_mask);
>  				__assign_bit(i, kvm->arch.vgic.gicv5_vm.vgic_ppi_hmr,
>  					     irq->config == VGIC_CONFIG_LEVEL);
>  			}
> -- 
> 2.47.3
> 



More information about the linux-arm-kernel mailing list