Re: [RFC v8 6/7] KVM: arm/arm64: Enable MSI routing

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

 



2016-07-22 13:46+0000, Eric Auger:
> Up to now, only irqchip routing entries could be set. This patch
> adds the capability to insert MSI routing entries.
> 
> For ARM64, let's also increase KVM_MAX_IRQ_ROUTES to 4096: this
> include SPI irqchip routes plus MSI routes. In the future this
> might be extended.
> 
> Signed-off-by: Eric Auger <eric.auger@xxxxxxxxxx>
> Reviewed-by: Andre Przywara <andre.przywara@xxxxxxx>
> 
> ---
> v7 -> v8:
> - adapt to changes in kvm_kernel_irq_routing_entry and check the
>   user entry flags according to the user entry type
> 
> v6 -> v7:
> - added Andre's R-b
> 
> v2 -> v3:
> - remove any reference to KVM_IRQ_ROUTING_EXTENDED_MSI type
> - unconditionnaly uapi flags and devid downto the kernel
>   routing entry struct
> - handle KVM_MSI_VALID_DEVID flag in kvm_set_irq_routing
> - note about KVM_CAP_MSI_DEVID moved in the first patch file
>   of the series
> 
> v1 -> v2:
> - adapt to new routing entry types
> 
> RFC -> PATCH:
> - move api MSI routing updates into that patch file
> - use new devid field of user api struct
> ---
> diff --git a/virt/kvm/irqchip.c b/virt/kvm/irqchip.c
> @@ -201,23 +202,25 @@ int kvm_set_irq_routing(struct kvm *kvm,
>  			new->chip[i][j] = -1;
>  
>  	for (i = 0; i < nr; ++i) {
> -		struct kvm_kernel_irq_routing_entry *e;
> -
>  		r = -ENOMEM;
>  		e = kzalloc(sizeof(*e), GFP_KERNEL);
>  		if (!e)
>  			goto out;
>  
>  		r = -EINVAL;
> -		if (ue->flags) {
> -			kfree(e);
> -			goto out;
> +		switch (ue->type) {
> +		case KVM_IRQ_ROUTING_IRQCHIP:
> +			if (ue->flags)
> +				goto free_entry;
> +			break;
> +		case KVM_IRQ_ROUTING_MSI:
> +			if (ue->flags & ~KVM_MSI_VALID_DEVID)
> +				goto free_entry;
> +			break;

The function is common for all arches and there are currently two other
routing types (S390_ADAPTER and HV_SINT) that ought to be checked as
well, so "default" instead of "KVM_IRQ_ROUTING_IRQCHIP" would be better.

>  		}
>  		r = setup_routing_entry(new, e, ue);
> -		if (r) {
> -			kfree(e);
> -			goto out;
> -		}
> +		if (r)
> +			goto free_entry;
>  		++ue;
>  	}
>  
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux