Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d97594e6 authored by Marc Zyngier's avatar Marc Zyngier
Browse files

KVM: arm64: vgic-its: Generalize use of vgic_get_irq_kref



Instead of sprinkling raw kref_get() calls everytime we cannot
do a normal vgic_get_irq(), use the existing vgic_get_irq_kref(),
which does the same thing and is paired with a vgic_put_irq().

vgic_get_irq_kref is moved to vgic.h in order to be easily shared.

Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
parent 8c828a53
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ static struct vgic_irq *vgic_add_lpi(struct kvm *kvm, u32 intid)
		 * call vgic_put_irq() on the returned pointer once it's
		 * finished with the IRQ.
		 */
		kref_get(&irq->refcount);
		vgic_get_irq_kref(irq);

		goto out_unlock;
	}
+1 −9
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ static struct vgic_irq *vgic_get_lpi(struct kvm *kvm, u32 intid)
		 * This increases the refcount, the caller is expected to
		 * call vgic_put_irq() later once it's finished with the IRQ.
		 */
		kref_get(&irq->refcount);
		vgic_get_irq_kref(irq);
		goto out_unlock;
	}
	irq = NULL;
@@ -106,14 +106,6 @@ struct vgic_irq *vgic_get_irq(struct kvm *kvm, struct kvm_vcpu *vcpu,
	return NULL;
}

static void vgic_get_irq_kref(struct vgic_irq *irq)
{
	if (irq->intid < VGIC_MIN_LPI)
		return;

	kref_get(&irq->refcount);
}

/*
 * We can't do anything in here, because we lack the kvm pointer to
 * lock and remove the item from the lpi_list. So we keep this function
+8 −0
Original line number Diff line number Diff line
@@ -64,6 +64,14 @@ int vgic_v2_map_resources(struct kvm *kvm);
int vgic_register_dist_iodev(struct kvm *kvm, gpa_t dist_base_address,
			     enum vgic_type);

static inline void vgic_get_irq_kref(struct vgic_irq *irq)
{
	if (irq->intid < VGIC_MIN_LPI)
		return;

	kref_get(&irq->refcount);
}

#ifdef CONFIG_KVM_ARM_VGIC_V3
void vgic_v3_process_maintenance(struct kvm_vcpu *vcpu);
void vgic_v3_fold_lr_state(struct kvm_vcpu *vcpu);