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

Re: [Xen-devel] [PATCH V2 19/25] x86/vioapic: extend vioapic_get_vector() to support remapping format RTE



On Wed, Aug 09, 2017 at 04:34:20PM -0400, Lan Tianyu wrote:
> From: Chao Gao <chao.gao@xxxxxxxxx>
> 
> When IOAPIC RTE is in remapping format, it doesn't contain the vector of
> interrupt. For this case, the RTE contains an index of interrupt remapping
> table where the vector of interrupt is stored. This patchs gets the vector
> through a vIOMMU interface.
> 
> Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx>
> Signed-off-by: Lan Tianyu <tianyu.lan@xxxxxxxxx>
> ---
>  xen/arch/x86/hvm/vioapic.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c
> index 322f33c..ff0742d 100644
> --- a/xen/arch/x86/hvm/vioapic.c
> +++ b/xen/arch/x86/hvm/vioapic.c
> @@ -565,11 +565,27 @@ int vioapic_get_vector(const struct domain *d, unsigned 
> int gsi)
>  {
>      unsigned int pin;
>      const struct hvm_vioapic *vioapic = gsi_vioapic(d, gsi, &pin);
> +    struct IO_APIC_route_remap_entry rte = { { vioapic->redirtbl[pin].bits } 
> };

Designated initialization and const.

>  
>      if ( !vioapic )
>          return -EINVAL;
>  
> -    return vioapic->redirtbl[pin].fields.vector;
> +    if ( rte.format )
> +    {
> +        int err;
> +        struct irq_remapping_request request;
> +        struct irq_remapping_info info;
> +
> +        irq_request_ioapic_fill(&request, vioapic->id, rte.val);
> +        /* Currently, only viommu 0 is supported */

This seems to be hardcoded in a bunch of places, which makes me wonder
whether having an array of vIOMMUs is the correct choice. I think that
you should remove the array and have a single vIOMMU per domain.

> +        err = viommu_get_irq_info(vioapic->domain, 0, &request, &info);
> +        return !err ? info.vector : -1;

maybe:

return err ?: info.vector;

?

> +    }
> +    else
> +    {
> +        return vioapic->redirtbl[pin].fields.vector;
> +    }
> +
>  }
>  
>  int vioapic_get_trigger_mode(const struct domain *d, unsigned int gsi)
> -- 
> 1.8.3.1
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> https://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.