summaryrefslogtreecommitdiffstats
path: root/virt/kvm/arm/vgic/vgic-its.c
diff options
context:
space:
mode:
authorMarc Zyngier <maz@kernel.org>2019-11-07 16:04:11 +0000
committerMarc Zyngier <maz@kernel.org>2019-11-08 11:13:24 +0000
commit5bd90b0989731520f2cdcfbbe467f1271f3cc803 (patch)
treef54a4b2b5212fa7916d6ecdf90c8eabf9ae9bff8 /virt/kvm/arm/vgic/vgic-its.c
parent9090825fa99740f0c794f94b9cbd57ad79101228 (diff)
downloadlinux-stable-5bd90b0989731520f2cdcfbbe467f1271f3cc803.tar.gz
linux-stable-5bd90b0989731520f2cdcfbbe467f1271f3cc803.tar.bz2
linux-stable-5bd90b0989731520f2cdcfbbe467f1271f3cc803.zip
KVM: vgic-v4: Track the number of VLPIs per vcpu
In order to find out whether a vcpu is likely to be the target of VLPIs (and to further optimize the way we deal with those), let's track the number of VLPIs a vcpu can receive. This gets implemented with an atomic variable that gets incremented or decremented on map, unmap and move of a VLPI. Signed-off-by: Marc Zyngier <maz@kernel.org> Reviewed-by: Zenghui Yu <yuzenghui@huawei.com> Reviewed-by: Christoffer Dall <christoffer.dall@arm.com> Link: https://lore.kernel.org/r/20191107160412.30301-2-maz@kernel.org
Diffstat (limited to 'virt/kvm/arm/vgic/vgic-its.c')
-rw-r--r--virt/kvm/arm/vgic/vgic-its.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c
index 2be6b66b3856..98c7360d9fb7 100644
--- a/virt/kvm/arm/vgic/vgic-its.c
+++ b/virt/kvm/arm/vgic/vgic-its.c
@@ -360,7 +360,10 @@ static int update_affinity(struct vgic_irq *irq, struct kvm_vcpu *vcpu)
if (ret)
return ret;
+ if (map.vpe)
+ atomic_dec(&map.vpe->vlpi_count);
map.vpe = &vcpu->arch.vgic_cpu.vgic_v3.its_vpe;
+ atomic_inc(&map.vpe->vlpi_count);
ret = its_map_vlpi(irq->host_irq, &map);
}