ARM: KVM: vgic: simplify vgic_get_target_reg
PATCH 1/1 ARM: KVM: vgic: simplify vgic_get_target_reg
vgic_get_target_reg is quite complicated, for no good reason. Actually, it is fairly easy to write it in a much more efficient way by using the target CPU array instead of the bitmap.
Signed-off-by Marc Zyngier <[email protected]>
--- arch/arm/kvm/vgic.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
arch/arm/kvm/vgic.c +3 -9
@@ -432,19 +432,13 @@ static bool handle_mmio_priority_reg(struct kvm_vcpu *vcpu,static u32 vgic_get_target_reg (struct kvm *kvm,int irq) {struct vgic_dist *dist = &kvm->arch.vgic; -struct kvm_vcpu *vcpu; -int i, c; -unsigned long *bmap; +int i;u32 val =0 ; irq -=VGIC_NR_PRIVATE_IRQS ; -kvm_for_each_vcpu (c, vcpu, kvm) { - bmap =vgic_bitmap_get_shared_map (&dist->irq_spi_target[c]); -for (i =0 ; i <GICD_IRQS_PER_ITARGETSR ; i++) -if (test_bit (irq + i, bmap)) - val |=1 << (c + i *8 ); - } +for (i =0 ; i <GICD_IRQS_PER_ITARGETSR ; i++) + val |=1 << (dist->irq_spi_cpu[irq + i] + i *8 );return val; }
Signature · 1 line
1.8.2.3
PATCH 1/1 ARM: KVM: vgic: simplify vgic_get_target_reg
Quoted 39 lines · Marc Zyngier
vgic_get_target_regis quite complicated, for no good reason. Actually, it is fairly easy to write it in a much more efficient way by using the target CPU array instead of the bitmap.Signed-off-by Marc Zyngier <[email protected]>--- arch/arm/kvm/vgic.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)arch/arm/kvm/vgic.c +3
-9@@ -432,19 +432,13 @@ static bool handle_mmio_priority_reg(struct kvm_vcpu *vcpu,static u32 vgic_get_target_reg (struct kvm *kvm,int irq) {struct vgic_dist *dist = &kvm->arch.vgic; -struct kvm_vcpu *vcpu; -int i, c; -unsigned long *bmap; +int i;u32 val =0 ; irq -=VGIC_NR_PRIVATE_IRQS ; -kvm_for_each_vcpu (c, vcpu, kvm) { - bmap =vgic_bitmap_get_shared_map (&dist->irq_spi_target[c]); -for (i =0 ; i <GICD_IRQS_PER_ITARGETSR ; i++) -if (test_bit (irq + i, bmap)) - val |=1 << (c + i *8 ); - } +for (i =0 ; i <GICD_IRQS_PER_ITARGETSR ; i++) + val |=1 << (dist->irq_spi_cpu[irq + i] + i *8 );return val; }Signature · 1 line
1.8.2.3
ack