Bug 822373
Summary: | libvirtd will crash when tight loop of hotplug/unplug PCI device to guest without managed=yes | ||||||
---|---|---|---|---|---|---|---|
Product: | Red Hat Enterprise Linux 6 | Reporter: | EricLee <bili> | ||||
Component: | libvirt | Assignee: | Peter Krempa <pkrempa> | ||||
Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> | ||||
Severity: | high | Docs Contact: | |||||
Priority: | high | ||||||
Version: | 6.3 | CC: | acathrow, ajia, dallan, dyasny, dyuan, mzhan, rwu, syeghiay, veillard, weizhan, whuang | ||||
Target Milestone: | rc | Keywords: | ZStream | ||||
Target Release: | 6.3 | ||||||
Hardware: | x86_64 | ||||||
OS: | Linux | ||||||
Whiteboard: | |||||||
Fixed In Version: | libvirt-0.9.13-2.el6 | Doc Type: | Bug Fix | ||||
Doc Text: | Story Points: | --- | |||||
Clone Of: | Environment: | ||||||
Last Closed: | 2013-02-21 07:14:31 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: | |||||||
Bug Depends On: | |||||||
Bug Blocks: | 836916 | ||||||
Attachments: |
|
Fixed upstream: commit db19417fc012416639c2230e5f19717b84245ce5 Author: Peter Krempa <pkrempa> Date: Mon May 21 16:31:53 2012 +0200 qemu_hotplug: Don't free the PCI device structure after hot-unplug The pciDevice structure corresponding to the device being hot-unplugged was freed after it was "stolen" from activeList. The pointer was still used for eg-inactive list. This patch removes the free of the structure and frees it only if reset fails on the device. Verified pass with versions: # rpm -qa libvirt qemu-kvm kernel libvirt-0.9.13-2.el6.x86_64 qemu-kvm-0.12.1.2-2.295.el6.x86_64 kernel-2.6.32-279.el6.x86_64 As the steps of Description. 300 times loop attach/detach all successfully. So set status to VERIFIED. 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. http://rhn.redhat.com/errata/RHSA-2013-0276.html |
Created attachment 585138 [details] libvirtd crash log Description of problem: libvirtd will crash when tight loop of hotplug/unplug PCI device to guest without managed=yes Version-Release number of selected component (if applicable): qemu-kvm-rhev-0.12.1.2-2.292.el6.x86_64 libvirt-0.9.10-20.el6.x86_64 kernel-2.6.32-272.el6.x86_64 How reproducible: 100% Steps to Reproduce: Setup 1. Enable VT-d on your host 2. edit the /boot/grub/grub.conf like this Add the kernel option 'intel_iommu=on' Reset machine. 3. Run command: modprobe -r kvm_intel modprobe -r kvm modprobe kvm allow_unsafe_assigned_interrupts=1 modprobe kvm_intel Actions 1. Start a guest (RHEL6) 2. # lspci |grep Eth 3. Select one PCI device # lspci -n | grep 02:00.0 4. # virsh nodedev-dettach pci_0000_02_00_0 Detach both of nic device in the same bus: # virsh nodedev-dettach pci_0000_02_00_1 5. # virsh nodedev-reset pci_0000_02_00_0 6. # virsh nodedev-dumpxml pci_0000_02_00_0 7. Edit vtd.xml (according to the bus,slot,function number you got from nodedev-dumpxml command) <hostdev mode='subsystem' type='pci'> <source> <address bus='0x02' slot='0' function='0'/> </source> </hostdev> 8.run the following script: # cat script.sh #!/bin/sh for ((i=0; i < 300; i++)) do echo $i virsh attach-device test vtd.xml sleep 5 virsh detach-device test vtd.xml sleep 5 done # sh script.sh Actual results: First 1,2 or more times will succeed. But for 3 or later: 3 Device attached successfully error: Failed to detach device from vtd.xml error: End of file while reading data: Input/output error 4 error: Failed to reconnect to the hypervisor error: no valid connection error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Connection refused and # service libvirtd status libvirtd dead but pid file exists Expected results: loop hotplug/unhotplug successfully and libvirtd is alive Additional info: