Commit c64115c8 authored by Oliver Upton's avatar Oliver Upton Committed by Marc Zyngier

KVM: arm64: vgic-its: Walk LPI xarray in vgic_its_invall()

The new LPI xarray makes it possible to walk the VM's LPIs without
holding a lock, meaning that vgic_copy_lpi_list() is no longer
necessary. Prepare for the deletion by walking the LPI xarray directly
in vgic_its_invall().
Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
Link: https://lore.kernel.org/r/20240422200158.2606761-4-oliver.upton@linux.devSigned-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent 720f73b7
...@@ -1365,23 +1365,19 @@ static int vgic_its_cmd_handle_inv(struct kvm *kvm, struct vgic_its *its, ...@@ -1365,23 +1365,19 @@ static int vgic_its_cmd_handle_inv(struct kvm *kvm, struct vgic_its *its,
int vgic_its_invall(struct kvm_vcpu *vcpu) int vgic_its_invall(struct kvm_vcpu *vcpu)
{ {
struct kvm *kvm = vcpu->kvm; struct kvm *kvm = vcpu->kvm;
int irq_count, i = 0; struct vgic_dist *dist = &kvm->arch.vgic;
u32 *intids; struct vgic_irq *irq;
unsigned long intid;
irq_count = vgic_copy_lpi_list(kvm, vcpu, &intids);
if (irq_count < 0)
return irq_count;
for (i = 0; i < irq_count; i++) { xa_for_each(&dist->lpi_xa, intid, irq) {
struct vgic_irq *irq = vgic_get_irq(kvm, NULL, intids[i]); irq = vgic_get_irq(kvm, NULL, intid);
if (!irq) if (!irq)
continue; continue;
update_lpi_config(kvm, irq, vcpu, false); update_lpi_config(kvm, irq, vcpu, false);
vgic_put_irq(kvm, irq); vgic_put_irq(kvm, irq);
} }
kfree(intids);
if (vcpu->arch.vgic_cpu.vgic_v3.its_vpe.its_vm) if (vcpu->arch.vgic_cpu.vgic_v3.its_vpe.its_vm)
its_invall_vpe(&vcpu->arch.vgic_cpu.vgic_v3.its_vpe); its_invall_vpe(&vcpu->arch.vgic_cpu.vgic_v3.its_vpe);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment