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

Re: [Xen-devel] PCI passthrough problems after legacy update of xen 4.1



>>> On 14.05.13 at 21:30, Gordan Bobic <gordan@xxxxxxxxxx> wrote:
> Bad news, I'm afraid - I still get error "22, invalid argument" with 
> this patch.

It would of course help to know precisely where this error is being
observed, the more that the xend change alone was reported to
convert the original EINVAL into EEXIST in another place.

Jan

> On 05/14/2013 03:01 PM, Jan Beulich wrote:
>>>>> On 05.05.13 at 21:33, Andreas Falck <falck.andreas.lists@xxxxxxxxx> wrote:
>>> I tried adding some debugging statements in physdev_map_pirq. I have
>>> attached the physdev.c with my debug statements, a hypervisor log from
>>> testing, and the output of lspci -vv for my three devices.
>>
>> Since I didn't hear anything from either of you anymore, I went
>> through the (not very familiar to me) tool stack code again, and
>> found that qemu and xend/libxl fundamentally disagree about the
>> model to be used. Qemu wants to allocate PIRQs while xend/libxl
>> want a 1:1 mapping. Allocating after having created a 1:1 mapping
>> works by returning the 1:1 mapping as allocation result, so as long
>> as libxl completes its setup before launching qemu, it would be
>> obvious why things work there. Consequently I assume that xend
>> launches qemu quite a bit earlier in the process of creating a new
>> domain, and the result of an attempt to establish a 1:1 mapping
>> when a different mapping was already established is dependent on
>> the specific interrupt numbers (i.e. also explains the observations
>> one of you made).
>>
>> Since the tool stack as a whole really ought to use a consistent
>> model, and since the 1:1 mapping model for non-MSI IRQs seems
>> quite natural, the below/attached patch takes care of enforcing
>> a 1:1 mapping in libxc when allocation is being requested by the
>> caller. Ian, Ian - do you foresee any problem with this?
>>
>> Please both of you give this a try and let us know of the results
>> (patch applies cleanly to all of -unstable, 4.2, and 4.1).
>>
>> Jan
>>
>> --- a/tools/libxc/xc_physdev.c
>> +++ b/tools/libxc/xc_physdev.c
>> @@ -49,7 +49,7 @@ int xc_physdev_map_pirq(xc_interface *xc
>>       map.domid = domid;
>>       map.type = MAP_PIRQ_TYPE_GSI;
>>       map.index = index;
>> -    map.pirq = *pirq;
>> +    map.pirq = *pirq < 0 ? index : *pirq;
>>
>>       rc = do_physdev_op(xch, PHYSDEVOP_map_pirq, &map, sizeof(map));
>>
>> --- a/tools/python/xen/xend/server/pciif.py
>> +++ b/tools/python/xen/xend/server/pciif.py
>> @@ -340,7 +340,7 @@ class PciController(DevController):
>>                   raise VmError(('pci: failed to configure I/O memory on 
> device '+
>>                               '%s - errno=%d')%(dev.name,rc))
>>
>> -        if not self.vm.info.is_hvm() and dev.irq:
>> +        if dev.irq > 0:
>>               rc = xc.physdev_map_pirq(domid = fe_domid,
>>                                      index = dev.irq,
>>                                      pirq  = dev.irq)
>>
>>




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


 


Rackspace

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