[libvirt] [PATCH] node_device: udev driver does not handle SR-IOV devices
Dave Allan
dallan at redhat.com
Mon Jan 3 02:50:40 UTC 2011
On Fri, Dec 24, 2010 at 10:41:52AM -0800, Chris Wright wrote:
> The udev driver does not update a PCI device with its SR-IOV capabilities,
> when applicable, the way the hal driver does. As a result, dumping the
> device's XML will not include the relevant physical or virtual function
> information.
Doh, that's an oversight. Thanks for the patch. I don't have an
SRIOV card handy, but other PCI device XML is unchanged by it, and
from code inspection it appears to be correct.
ACK
Dave
> With this patch, the XML is correct:
>
> # virsh nodedev-dumpxml pci_0000_09_00_0
> <device>
> <name>pci_0000_09_00_0</name>
> <parent>pci_0000_00_1c_0</parent>
> <driver>
> <name>vxge</name>
> </driver>
> <capability type='pci'>
> <domain>0</domain>
> <bus>9</bus>
> <slot>0</slot>
> <function>0</function>
> <product id='0x5833'>X3100 Series 10 Gigabit Ethernet PCIe</product>
> <vendor id='0x17d5'>Neterion Inc.</vendor>
> <capability type='virt_functions'>
> <address domain='0x0000' bus='0x0a' slot='0x00' function='0x1'/>
> <address domain='0x0000' bus='0x0a' slot='0x00' function='0x2'/>
> <address domain='0x0000' bus='0x0a' slot='0x00' function='0x3'/>
> </capability>
> </capability>
> </device>
>
> # virsh nodedev-dumpxml pci_0000_0a_00_1
> <device>
> <name>pci_0000_0a_00_1</name>
> <parent>pci_0000_00_1c_0</parent>
> <driver>
> <name>vxge</name>
> </driver>
> <capability type='pci'>
> <domain>0</domain>
> <bus>10</bus>
> <slot>0</slot>
> <function>1</function>
> <product id='0x5833'>X3100 Series 10 Gigabit Ethernet PCIe</product>
> <vendor id='0x17d5'>Neterion Inc.</vendor>
> <capability type='phys_function'>
> <address domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
> </capability>
> </capability>
> </device>
>
> Cc: Dave Allan <dallan at redhat.com>
> Signed-off-by: Chris Wright <chrisw at redhat.com>
> ---
> src/node_device/node_device_udev.c | 9 ++++++---
> 1 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
> index 02e44a1..379af86 100644
> --- a/src/node_device/node_device_udev.c
> +++ b/src/node_device/node_device_udev.c
> @@ -419,11 +419,11 @@ out:
> static int udevProcessPCI(struct udev_device *device,
> virNodeDeviceDefPtr def)
> {
> - const char *devpath = NULL;
> + const char *syspath = NULL;
> union _virNodeDevCapData *data = &def->caps->data;
> int ret = -1;
>
> - devpath = udev_device_get_devpath(device);
> + syspath = udev_device_get_syspath(device);
>
> if (udevGetUintProperty(device,
> "PCI_CLASS",
> @@ -432,7 +432,7 @@ static int udevProcessPCI(struct udev_device *device,
> goto out;
> }
>
> - char *p = strrchr(devpath, '/');
> + char *p = strrchr(syspath, '/');
>
> if ((p == NULL) || (udevStrToLong_ui(p+1,
> &p,
> @@ -487,6 +487,9 @@ static int udevProcessPCI(struct udev_device *device,
> goto out;
> }
>
> + get_physical_function(syspath, data);
> + get_virtual_functions(syspath, data);
> +
> ret = 0;
>
> out:
More information about the libvir-list
mailing list