Bug 981546
| Summary: | the vfs should be clear up while there isn't any vfs on the host | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Xuesong Zhang <xuzhang> |
| Component: | libvirt | Assignee: | Laine Stump <laine> |
| Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> |
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | 7.0 | CC: | dyuan, honzhang, mzhan, rbalakri, shyu |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | libvirt-1.2.16-1.el7 | Doc Type: | Bug Fix |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2015-11-19 05:43:29 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
Sigh. caching device information at libvirtd start turns out to not be a very good idea. A tiny amount of time is saved and in return we run the risk of providing stale data.(There has already been at least one other bug due to this caching - see Bug 979290. The virtual fuinctions list will need to be updated from the function update_caps(). *** Bug 1142642 has been marked as a duplicate of this bug. *** The following patches have been pushed upstream to resolve the issue:
commit ffc40b63b50ecb2c60fbd27372daf00f71071958
Author: Laine Stump <laine>
Date: Fri May 8 12:55:00 2015 -0400
conf: make virNodeDevCapData an official type
commit 3c93419b7771bf42ba7b56803f5b2ce480854791
Author: Laine Stump <laine>
Date: Wed May 6 13:51:47 2015 -0400
nodedev: change if-else if in update_caps to switch
commit d2a57815aa2a1a299a690f6622e1c77f46c883bb
Author: Laine Stump <laine>
Date: Wed May 6 16:40:39 2015 -0400
node device: prepare node_device_linux_sysfs.c to add more functions
commit 7349fa2ebef2f26946c8280ed4c6cc1ef7e2e3cc
Author: Laine Stump <laine>
Date: Mon May 11 13:35:50 2015 -0400
node_device: new functions to get sriov/iommu info from sysfs
commit 601b0fa872136951cd7d0745d99cfb1359367b0f
Author: Laine Stump <laine>
Date: Mon May 11 13:40:21 2015 -0400
node_device: update sriov/iommu info before dumpxml of a device
commit d52d7a64b083645cbd355a34476963d1623b617a
Author: Laine Stump <laine>
Date: Mon May 11 13:50:37 2015 -0400
node_device: replace duplicated code in hal and udev backends
Verify this bug with libvirt-1.2.17-2.el7.x86_64
Steps:
1.
#lspci|grep 82576
03:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
03:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
03:10.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
03:10.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
03:10.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
03:10.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01)
2.
# virsh nodedev-dumpxml pci_0000_03_10_0
<device>
<name>pci_0000_03_10_0</name>
<path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:10.0</path>
<parent>pci_0000_00_01_0</parent>
<driver>
<name>vfio-pci</name>
</driver>
<capability type='pci'>
<domain>0</domain>
<bus>3</bus>
<slot>16</slot>
<function>0</function>
<product id='0x10ca'>82576 Virtual Function</product>
..
# virsh nodedev-dumpxml pci_0000_03_10_1
<device>
<name>pci_0000_03_10_1</name>
<path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:10.1</path>
<parent>pci_0000_00_01_0</parent>
<driver>
<name>igbvf</name>
</driver>
<capability type='pci'>
<domain>0</domain>
<bus>3</bus>
<slot>16</slot>
<function>1</function>
<product id='0x10ca'>82576 Virtual Function</product>
..
# virsh nodedev-dumpxml pci_0000_03_10_2
<device>
<name>pci_0000_03_10_2</name>
<path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:10.2</path>
<parent>pci_0000_00_01_0</parent>
<driver>
<name>vfio-pci</name>
</driver>
<capability type='pci'>
<domain>0</domain>
<bus>3</bus>
<slot>16</slot>
<function>2</function>
<product id='0x10ca'>82576 Virtual Function</product>
..
# virsh nodedev-dumpxml pci_0000_03_10_3
<device>
<name>pci_0000_03_10_3</name>
<path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:10.3</path>
<parent>pci_0000_00_01_0</parent>
<driver>
<name>igbvf</name>
</driver>
<capability type='pci'>
<domain>0</domain>
<bus>3</bus>
<slot>16</slot>
<function>3</function>
<product id='0x10ca'>82576 Virtual Function</product>
..
3.
#rmmod igb
#lspci|grep 82576
03:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
03:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
4.
#virsh nodedev-dumpxml pci_0000_03_10_3
error: Could not find matching device 'pci_0000_03_10_3'
error: Node device not found: no node device with matching name 'pci_0000_03_10_3'
#virsh nodedev-dumpxml pci_0000_03_10_2
error: Could not find matching device 'pci_0000_03_10_2'
error: Node device not found: no node device with matching name 'pci_0000_03_10_2'
#virsh nodedev-dumpxml pci_0000_03_10_1
error: Could not find matching device 'pci_0000_03_10_1'
error: Node device not found: no node device with matching name 'pci_0000_03_10_1'
#virsh nodedev-dumpxml pci_0000_03_10_0
error: Could not find matching device 'pci_0000_03_10_0'
error: Node device not found: no node device with matching name 'pci_0000_03_10_0'
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHBA-2015-2202.html |
Description of problem: The VFs in nodedev-dumpxml should be clear up while the VFs are not exist in the host. Version-Release number of selected component (if applicable): libvirt-1.1.0-1.el7.x86_64 qemu-kvm-1.5.0-2.el7.x86_64 3.10.0-0.rc5.61.el7.x86_64 How reproducible: 100% Steps: 1. prepare one SR-IOV, check the vfs and pfs on this host. # lspci|grep 82576 03:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 03:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 03:10.0 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01) 03:10.1 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01) 03:10.2 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01) 03:10.3 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01) 03:10.4 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01) 03:10.5 Ethernet controller: Intel Corporation 82576 Virtual Function (rev 01) 2. check the vfs of pf "03:00.0" with command nodedev-dumpxml. # virsh nodedev-dumpxml pci_0000_03_00_0 <device> <name>pci_0000_03_00_0</name> <path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:00.0</path> <parent>pci_0000_00_01_0</parent> <driver> <name>igb</name> </driver> <capability type='pci'> <domain>0</domain> <bus>3</bus> <slot>0</slot> <function>0</function> <product id='0x10c9'>82576 Gigabit Network Connection</product> <vendor id='0x8086'>Intel Corporation</vendor> <capability type='virt_functions'>------------------------------------------Here are the VFs of this PF. <address domain='0x0000' bus='0x03' slot='0x10' function='0x0'/> <address domain='0x0000' bus='0x03' slot='0x10' function='0x2'/> <address domain='0x0000' bus='0x03' slot='0x10' function='0x4'/> </capability> <iommuGroup number='14'> <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/> </iommuGroup> </capability> </device> 3. delete these vfs, there aren't any vfs on this host now. # rmmod igb # lspci|grep 82576 03:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 03:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 4. check the dumpxml of this PF again. # virsh nodedev-dumpxml pci_0000_03_00_0 <device> <name>pci_0000_03_00_0</name> <path>/sys/devices/pci0000:00/0000:00:01.0/0000:03:00.0</path> <parent>pci_0000_00_01_0</parent> <capability type='pci'> <domain>0</domain> <bus>3</bus> <slot>0</slot> <function>0</function> <product id='0x10c9'>82576 Gigabit Network Connection</product> <vendor id='0x8086'>Intel Corporation</vendor> <capability type='virt_functions'>---------------------------------------should not exist any vfs. <address domain='0x0000' bus='0x03' slot='0x10' function='0x0'/> <address domain='0x0000' bus='0x03' slot='0x10' function='0x2'/> <address domain='0x0000' bus='0x03' slot='0x10' function='0x4'/> </capability> <iommuGroup number='14'> <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/> </iommuGroup> </capability> </device> Actual results: in step4, the vfs are still existed in the nodedev-dumpxml while there isn't any vfs. Expected results: The VFs in the node-dumpxml should not be shown up while there isn't any VFs on the host.