diff options
| author | Marc Zyngier <marc.zyngier@arm.com> | 2016-07-17 11:27:23 +0100 | 
|---|---|---|
| committer | Marc Zyngier <marc.zyngier@arm.com> | 2016-07-18 18:15:16 +0100 | 
| commit | d97594e6bc1b4aaad3ccae3ef678513b63dd5221 (patch) | |
| tree | 921513cb42ad71bfb73eb1652d4158e3492f60df /virt | |
| parent | 8c828a535e29f50282f1a49a52c3b20ccaa039aa (diff) | |
| download | linux-d97594e6bc1b4aaad3ccae3ef678513b63dd5221.tar.bz2 | |
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: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'virt')
| -rw-r--r-- | virt/kvm/arm/vgic/vgic-its.c | 2 | ||||
| -rw-r--r-- | virt/kvm/arm/vgic/vgic.c | 10 | ||||
| -rw-r--r-- | virt/kvm/arm/vgic/vgic.h | 8 | 
3 files changed, 10 insertions, 10 deletions
| diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c index d8e8f14135b4..f427fa2f7263 100644 --- a/virt/kvm/arm/vgic/vgic-its.c +++ b/virt/kvm/arm/vgic/vgic-its.c @@ -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;  	} diff --git a/virt/kvm/arm/vgic/vgic.c b/virt/kvm/arm/vgic/vgic.c index 424cb9ceebd9..39f3358c6d91 100644 --- a/virt/kvm/arm/vgic/vgic.c +++ b/virt/kvm/arm/vgic/vgic.c @@ -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 diff --git a/virt/kvm/arm/vgic/vgic.h b/virt/kvm/arm/vgic/vgic.h index 9d40d7bb89f7..1d8e21d5c13f 100644 --- a/virt/kvm/arm/vgic/vgic.h +++ b/virt/kvm/arm/vgic/vgic.h @@ -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); |