mirror of
https://github.com/torvalds/linux.git
synced 2026-11-10 17:11:02 +01:00
KVM: arm64: vgic-its: Walk LPI xarray in vgic_its_cmd_handle_movall()
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_cmd_handle_movall(). Signed-off-by: Oliver Upton <oliver.upton@linux.dev> Link: https://lore.kernel.org/r/20240422200158.2606761-5-oliver.upton@linux.dev Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
parent
c64115c80f
commit
11f4f8f3e6
|
|
@ -1420,10 +1420,10 @@ static int vgic_its_cmd_handle_invall(struct kvm *kvm, struct vgic_its *its,
|
||||||
static int vgic_its_cmd_handle_movall(struct kvm *kvm, struct vgic_its *its,
|
static int vgic_its_cmd_handle_movall(struct kvm *kvm, struct vgic_its *its,
|
||||||
u64 *its_cmd)
|
u64 *its_cmd)
|
||||||
{
|
{
|
||||||
|
struct vgic_dist *dist = &kvm->arch.vgic;
|
||||||
struct kvm_vcpu *vcpu1, *vcpu2;
|
struct kvm_vcpu *vcpu1, *vcpu2;
|
||||||
struct vgic_irq *irq;
|
struct vgic_irq *irq;
|
||||||
u32 *intids;
|
unsigned long intid;
|
||||||
int irq_count, i;
|
|
||||||
|
|
||||||
/* We advertise GITS_TYPER.PTA==0, making the address the vcpu ID */
|
/* We advertise GITS_TYPER.PTA==0, making the address the vcpu ID */
|
||||||
vcpu1 = kvm_get_vcpu_by_id(kvm, its_cmd_get_target_addr(its_cmd));
|
vcpu1 = kvm_get_vcpu_by_id(kvm, its_cmd_get_target_addr(its_cmd));
|
||||||
|
|
@ -1435,12 +1435,8 @@ static int vgic_its_cmd_handle_movall(struct kvm *kvm, struct vgic_its *its,
|
||||||
if (vcpu1 == vcpu2)
|
if (vcpu1 == vcpu2)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
irq_count = vgic_copy_lpi_list(kvm, vcpu1, &intids);
|
xa_for_each(&dist->lpi_xa, intid, irq) {
|
||||||
if (irq_count < 0)
|
irq = vgic_get_irq(kvm, NULL, intid);
|
||||||
return irq_count;
|
|
||||||
|
|
||||||
for (i = 0; i < irq_count; i++) {
|
|
||||||
irq = vgic_get_irq(kvm, NULL, intids[i]);
|
|
||||||
if (!irq)
|
if (!irq)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
@ -1451,7 +1447,6 @@ static int vgic_its_cmd_handle_movall(struct kvm *kvm, struct vgic_its *its,
|
||||||
|
|
||||||
vgic_its_invalidate_cache(kvm);
|
vgic_its_invalidate_cache(kvm);
|
||||||
|
|
||||||
kfree(intids);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user