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

RE: [Xen-devel] MSI-X interrupts to guests




xen-devel-bounces@xxxxxxxxxxxxxxxxxxx wrote:
>>>> Kieran Mansley <kmansley@xxxxxxxxxxxxxx> 16.04.09 17:47 >>>
>> On Thu, 2009-04-16 at 16:39 +0100, Espen Skoglund wrote:
>>>> 2a) Attempt to map this to the guest using PHYSDEVOP_map_pirq with
>>>> parameters: map_irq.domid = guest_domid;
>>>> map_irq.type = MAP_PIRQ_TYPE_GSI;
>>>> map_irq.index = vector;
>>>> map_irq.pirq = -1;
>>> 
>>>>  => gives an error in the hypervisor:
>>>> (XEN) physdev.c:61: dom1: map invalid irq 510
>>> 
>>> IRQ510?  This definitely sounds wrong.  This can't possibly be the
>>> "PIRQ" assigned to the MSI vector.
>> 
>> It's not - it's the vector itself.  Sadly the code in question (msi-
>> xen.c) seems to confuse the use of pirq and vector in the variable

One tricky thing here is we can't change the definition of msix_entry. BTW, the 
msi_map_vector() is a bit confusing.

>> names, so I'm not exactly sure how to describe it.  It's the returned
>> value from msi_map_vector() when called by pci_enable_msix() in dom0.
> 
> No, there simply cannot be a vector 510 - x86 is limited to 256
> vectors. What you get back here is a (Xen) IRQ number. The question
> is why 
> this is outside
> the default NR_IRQS range - are you building Xen with support
> for more than
> 256 IRQs? See get_free_pirq(), which starts its iteration ar
> NR_IRQS-1 for
> the case you're interested in. Or is 510 perhaps a Linux IRQ
> number rather
> than a Xen one?
> 
> PHYSDEVOP_map_pirq also returns vector information, but I
> strongly believe
> this is actually a mistake, as no guest should ever care about
> the vector Xen
> uses for a particular interrupt.

Agree, this should be wrong. Guest should have no idea of vector. Not sure if 
there are any special reason for it.

> 
>> What is the magic step I'm missing to go from the vector that I get
>> back from pci_enable_msix() to the value for "PIRQ assigned to the
>> MSI vector" to give to PHYSDEVOP_map_pirq?
> 
> I would think your problems begin with
> msi_map_pirq_to_vector() not having
> a way to know that the particular IRQ is to not go to Dom0,
> but to a DomU:
> msi_get_dev_owner() only considers the whole device. You may need to
> somehow undo this for those IRQs that you want to pass through (since
> you want the Xen PIRQ number here in order to pass to the DomU, not
> the Linux one). Whether not undoing the whole operation, but instead
> just obtaining the Xen PIRQ number would work I'm not really
> certain, but would
> assume that would at least have the unintended side effect of
> sharing the
> IRQ between DomU and Dom0.
> 
> Otoh - did you check whether the VMDQ and/or SR-IOV work already
> contains a solution to your problem? I didn't look closely at
> that code yet,
> but would suppose that there passing through IRQs without the whole
> devices should also be used in some way.

I suspect SR-IOV will have no such usage model, since in SR-IOV will have 
different VF for guest. No idea of VMDq.

> 
> Jan
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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