Re: [PATCH v3] arm/arm64: KVM: vgic: kick the specific vcpu instead of iterating through all

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Shannon,

On 19/11/14 10:11, Shannon Zhao wrote:
> When call kvm_vgic_inject_irq to inject interrupt, we can known which
> vcpu the interrupt for by the irq_num and the cpuid. So we should just
> kick this vcpu to avoid iterating through all.
> 
> Signed-off-by: Shannon Zhao <zhaoshenglong@xxxxxxxxxx>
> ---
>  virt/kvm/arm/vgic.c |   15 ++++++++++-----
>  1 files changed, 10 insertions(+), 5 deletions(-)
> 
> diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c
> index 82db9d6..a032c79 100644
> --- a/virt/kvm/arm/vgic.c
> +++ b/virt/kvm/arm/vgic.c
> @@ -1607,7 +1607,7 @@ static int vgic_validate_injection(struct kvm_vcpu *vcpu, int irq, int level)
>  	}
>  }
>  
> -static bool vgic_update_irq_pending(struct kvm *kvm, int cpuid,
> +static int vgic_update_irq_pending(struct kvm *kvm, int cpuid,
>  				  unsigned int irq_num, bool level)
>  {
>  	struct vgic_dist *dist = &kvm->arch.vgic;
> @@ -1672,7 +1672,7 @@ static bool vgic_update_irq_pending(struct kvm *kvm, int cpuid,
>  out:
>  	spin_unlock(&dist->lock);
>  
> -	return ret;
> +	return ret ? cpuid : -EINVAL;
>  }
>  
>  /**
> @@ -1692,9 +1692,14 @@ out:
>  int kvm_vgic_inject_irq(struct kvm *kvm, int cpuid, unsigned int irq_num,
>  			bool level)
>  {
> -	if (likely(vgic_initialized(kvm)) &&
> -	    vgic_update_irq_pending(kvm, cpuid, irq_num, level))
> -		vgic_kick_vcpus(kvm);
> +	int vcpu_id;
> +
> +	if (likely(vgic_initialized(kvm))) {
> +		vcpu_id = vgic_update_irq_pending(kvm, cpuid, irq_num, level);
> +		if (vcpu_id >= 0)
> +			/* kick the specified vcpu */
> +			kvm_vcpu_kick(kvm_get_vcpu(kvm, vcpu_id));
> +	}
>  
>  	return 0;
>  }
> 

This looks much better. Do you have actual data showing how much
improvement this brings?

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm




[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux