[libvirt] [PATCH] expose SR IOV physical/virtual function relationships
Dave Allan
dallan at redhat.com
Fri Dec 4 15:30:46 UTC 2009
Daniel P. Berrange wrote:
> On Tue, Dec 01, 2009 at 12:03:49PM -0500, Dave Allan wrote:
>> Daniel P. Berrange wrote:
>>> On Tue, Dec 01, 2009 at 10:33:08AM -0500, Dave Allan wrote:
>>>> Attached is a patch that exposes the relationships between physical and
>>>> virtual functions on SR IOV capable devices.
>>>>
>>>
>>>> + if (data->pci_dev.physical_function) {
>>>> + virBufferEscapeString(&buf, "
>>>> <physical_function>%s</physical_function>\n",
>>>> + data->pci_dev.physical_function);
>>>> + }
>>>> + if (data->pci_dev.num_virtual_functions > 0) {
>>>> + for (i = 0 ; i < data->pci_dev.num_virtual_functions ;
>>>> i++) {
>>>> + virBufferEscapeString(&buf, "
>>>> <virtual_function>%s</virtual_function>\n",
>>>> +
>>>> data->pci_dev.virtual_functions[i]);
>>>> + }
>>>> + }
>>>
>>> What is the actual content of those two new elements ? Are they
>>> the names of the corresponding device, suitble for a
>>> virNodeDevLooupByName() ?
>> They are the PCI device BDF or config address, e.g.:
>>
>> <virtual_function>0000:01:10.0</virtual_function>
>>
>> so, no, they aren't suitable for lookup by name. Using the names of the
>> corresponding devices was my first attempt, but there is a dependency
>> problem there. At the time that we process one device, the others
>> aren't necessarily created in libvirt, so it's not possible to look them
>> up. If we wanted to go that route, we'd have to do additional work at
>> the time of dumping the xml, which I think is a little kludgy. I'd
>> rather we created an API to lookup a libvirt device by its BDF.
>
> I don't much like including the raw BDF format, because it is effectively
> adding a 3rd way of specifying PCI addresses in libvirt XML. We already
> have 2 different ways, which is 1 too many
>
> Node dev XML
>
> <capability type='pci'>
> <domain>0</domain>
> <bus>0</bus>
> <slot>31</slot>
> <function>1</function>
> </capability>
>
>
> Domain XML for host devices & guest addresses
>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x5'/>
>
> Yes, my bad for screwing up the nodedev XML format when I designed
> it, stupidly choosing decimal instead of hex :-(
>
> I think we should make the virtual/physical function follow the domain
> XML style, with an <address/> element. Perhaps also use nested capabilities
> in the way we did for NPIV host/vport stuff
>
> <capability type='physical_function'>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x1'/>
> </capability>
>
> <capability type='virtual_functions'>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x3'/>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x4'/>
> </capability>
>
>
> I'd even be inclined to retro-fit the existing <capability type='pci'>
> XML to duplicate the address info in this saner format eg
>
> <capability type='pci'>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x1' />
> <domain>0</domain>
> <bus>0</bus>
> <slot>31</slot>
> <function>1</function>
> </capability>
>
>
> So, a PCI card with SR-IOV would end up looking like
>
> <capability type='pci'>
> <domain>0</domain>
> <bus>0</bus>
> <slot>31</slot>
> <function>1</function>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x1' />
>
> <capability type='virtual_functions'>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x3'/>
> <address domain='0x0000' bus='0x00' slot='0x1f' function='0x4'/>
> </capability>
> </capability>
>
> The nice thing about this kind of nesting is that it would let us show
> that a card is capable of exposing virtual functions, even if it does
> not currently have any enabled
>
>
> Regards,
> Daniel
Here's an updated patch reflecting the above suggestions.
Dave
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0001-Add-SR-IOV-physical-and-virtual-function-relationshi.patch
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20091204/f79fe299/attachment-0001.ksh>
More information about the libvir-list
mailing list