This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


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

Oh.  I just noticed that you map the MSI directly to the guest.  You
should first map it into dom0 as an MSI (to set up the MSI-X
descriptor) and then map it to domU as a GSI.


[Espen Skoglund]
> Do you also map the vector to domU before requesting it?  You should
> be able to map it as a GSI.  You'll also need c/s 791 or newer for the
> domU kernel.

>       eSk

> [Kieran Mansley]
>> Some recent changes from Espen Skoglund
>> http://markmail.org/thread/76szuiywgd5dn2x4 suggest that it should now
>> be possible to map an MSI-X interrupt direct to a guest.  However, when
>> trying to do this, I get errors, and before I delve too deep I wondered
>> if there was something obvious I'm doing wrong.

>> My approach is that dom0 does something like this:

>>      struct physdev_map_pirq map_irq;

>>      map_irq.domid = guest_domid;
>>      map_irq.type = MAP_PIRQ_TYPE_MSI;
>>      map_irq.index = -1;
>>      map_irq.pirq = -1;
>>      map_irq.bus = pci_dev->bus->number;
>>      map_irq.devfn = pci_dev->devfn;
>>      map_irq.entry_nr = msix_entry;
>>      map_irq.table_base = msix_table;

>>      rc = HYPERVISOR_physdev_op(PHYSDEVOP_map_pirq, &map_irq);

>> This call succeeds.  dom0 then tells the guest the value of map_irq.pirq
>> (which seems to have a sensible value given the other interrupts mapped
>> to that domain) that it gets back from this hypercall, and the guest
>> tries to call request_irq() using that value.  The call to request_irq()
>> returns -38 (ENOSYS).

>> Any ideas what the problem could be?  I'm happy to investigate.

>> Kieran

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

Xen-devel mailing list