Bug 1324551
| Summary: | Hotplug of memory/rng device fails after unplugging device of the same type that is not last | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Peter Krempa <pkrempa> |
| Component: | libvirt | Assignee: | Peter Krempa <pkrempa> |
| Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> |
| Severity: | unspecified | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 7.2 | CC: | dyuan, lhuang, mzhan, pzhang, rbalakri |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | libvirt-1.3.4-1.el7 | Doc Type: | Bug Fix |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2016-11-03 18:41:11 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: | |||
|
Description
Peter Krempa
2016-04-06 15:31:27 UTC
Fixed upstream:
commit be6e92f541ab27019de530f1f08ec9b2912765a9
Author: Peter Krempa <pkrempa>
Date: Wed Apr 6 17:32:12 2016 +0200
qemu: alias: Fix calculation of memory device aliases
For device hotplug, the new alias ID needs to be checked in the list
rather than using the count of devices. Unplugging a device that is not
last in the array will make further hotplug impossible due to alias
collision.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1324551
commit bd19b4b25beb22335571b80d6a4a32f7012b87e1
Author: Peter Krempa <pkrempa>
Date: Wed Apr 6 17:32:12 2016 +0200
qemu: alias: Fix calculation of RNG device aliases
For device hotplug, the new alias ID needs to be checked in the list
rather than using the count of devices. Unplugging a device that is not
last in the array will make further hotplug impossible due to alias
collision.
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1324551
Verify version :
libvirt-2.0.0-6.el7.x86_64
qemu-kvm-rhev-2.6.0-22.el7.x86_64
Verify steps :
1. hot-unplug memory device, hot-plug same type deice.
1.1 start a guest with multiple memory deivces like following :
#virsh dumpxml vm1 | grep memory -A 9
......
<memory model='dimm'>
<target>
<size unit='KiB'>131072</size>
<node>1</node>
</target>
<alias name='dimm0'/>
<address type='dimm' slot='0' base='0x440000000'/>
</memory>
<memory model='dimm'>
<target>
<size unit='KiB'>131072</size>
<node>2</node>
</target>
<alias name='dimm1'/>
<address type='dimm' slot='1' base='0x448000000'/>
</memory>
1.2 prepare a memory device like following(as same as the first one in guest).
# cat de-mem.xml
<memory model='dimm'>
<target>
<size unit='KiB'>131072</size>
<node>1</node>
</target>
<alias name='dimm0'/>
<address type='dimm' slot='0' base='0x440000000'/>
</memory>
1.3 detach memory device successfully.
# virsh detach-device vm1 mem.xml
Device detached successfully
#virsh dumpxml vm1 | grep memory -A 8
......
<memory model='dimm'>
<target>
<size unit='KiB'>131072</size>
<node>2</node>
</target>
<alias name='dimm1'/>
<address type='dimm' slot='1' base='0x448000000'/>
</memory>
......
1.4 re-plug memory device again, check the alias name
it won't use the count of device, it will use a new one
in the list.
# virsh attach-device vm1 mem.xml
Device attached successfully
# virsh dumpxml vm1 | grep memory -A 7
......
<memory model='dimm'>
<target>
<size unit='KiB'>131072</size>
<node>2</node>
</target>
<alias name='dimm1'/>
<address type='dimm' slot='1' base='0x448000000'/>
</memory>
<memory model='dimm'>
<target>
<size unit='KiB'>131072</size>
<node>1</node>
</target>
<alias name='dimm2'/>
<address type='dimm' slot='0' base='0x440000000'/>
</memory>
# virsh attach-device vm1 mem.xml
Device attached successfully
# virsh dumpxml vm1 | grep memory -A 7
......
<memory model='dimm'>
<target>
<size unit='KiB'>131072</size>
<node>2</node>
</target>
<alias name='dimm1'/>
<address type='dimm' slot='1' base='0x448000000'/>
</memory>
<memory model='dimm'>
<target>
<size unit='KiB'>131072</size>
<node>1</node>
</target>
<alias name='dimm2'/>
<address type='dimm' slot='0' base='0x440000000'/>
</memory>
<memory model='dimm'>
<target>
<size unit='KiB'>131072</size>
<node>2</node>
</target>
<alias name='dimm3'/>
<address type='dimm' slot='3' base='0x458000000'/>
</memory>
2. hot-unplug rng device, replug
2.1 start a guest with multiple rng devices like following:
# virsh dumpxml vm1 | grep rng -A 8
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</rng>
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</rng>
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
</rng>
2.2 prepare a xml like following (as same as the first rng device in guest)
# cat rng.xml
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</rng>
2.3 detach device successfully
# virsh detach-device vm1 rng.xml
Device detached successfully
check guest xml
# virsh dumpxml vm1 | grep rng -A 8
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</rng>
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
</rng>
2.4 re-plug the device
# virsh attach-device vm1 rng.xml
Device attached successfully
# virsh dumpxml vm1 | grep rng -A 8
......
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
</rng>
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng3'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</rng>
# virsh attach-device vm1 rng.xml
Device attached successfully
# virsh dumpxml vm1 | grep rng -A 8
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
</rng>
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng3'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</rng>
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<alias name='rng4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</rng>
Now, for the memory/rng device the alias name can be checked in the list, not using the count of devices.
Move 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. https://rhn.redhat.com/errata/RHSA-2016-2577.html |