Bug 1083973
Summary: | vectors >32 cause migration fail from RHEL6.5 to RHEL7.0 | |||
---|---|---|---|---|
Product: | Red Hat Enterprise Linux 7 | Reporter: | FuXiangChun <xfu> | |
Component: | qemu-kvm | Assignee: | Michael S. Tsirkin <mst> | |
Status: | CLOSED WONTFIX | QA Contact: | Virtualization Bugs <virt-bugs> | |
Severity: | high | Docs Contact: | ||
Priority: | medium | |||
Version: | 7.0 | CC: | bcao, dgilbert, hhuang, jherrman, juzhang, knoel, michen, mst, pbonzini, qzhang, rbalakri, rhod, virt-maint, xfu | |
Target Milestone: | rc | |||
Target Release: | --- | |||
Hardware: | x86_64 | |||
OS: | Linux | |||
Whiteboard: | ||||
Fixed In Version: | Doc Type: | Bug Fix | ||
Doc Text: |
If a virtio device is created where the number of vectors is set to a value higher than 32, the device behaves as if it was set to a zero value on Red Hat Enterprise Linux 6, but not on Enterprise Linux 7. The resulting vector setting mismatch causes a migration error if the number of vectors on any virtio device on either platform is set to 33 or higher. It is, therefore, not recommended to set the "vector" value to be greater than 32.
|
Story Points: | --- | |
Clone Of: | ||||
: | 1159611 1159613 (view as bug list) | Environment: | ||
Last Closed: | 2014-12-03 22:08:58 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: | 1159611, 1159613 |
Description
FuXiangChun
2014-04-03 10:32:28 UTC
I tested qemu-kvm-1.5.3-50.el7.x86_64 as well, hit this issue as well. So, this might not a regression. If you need qe test more earlier qemu-kvm version, please let us know. I've had a look at this, but I'm hitting the limits of my PCI knowledge; using a testbed consisting of a RHEL6 qemu build (on RHEL7) and a rhel7 qemu: rhel6/qemu-system-x86_64 -nographic -nodefaults -device virtio-serial-pci,id=virtio-serial0,vectors=33,bus=pci.0,addr=0x5 -M rhel6.5.0 --chardev socket,port=4000,host=localhost,id=mon,server,nowait,telnet -mon chardev=mon,id=mon rhel7/qemu-kvm -nographic -nodefaults -device virtio-serial-pci,id=virtio-serial0,vectors=33,bus=pci.0,addr=0x5 -M rhel6.5.0 --chardev socket,port=4001,host=localhost,id=mon,server,nowait,telnet -mon chardev=mon,id=mon -incoming tcp:localhost:4444 vmstate_load_state loop for PCIDevice/config get_pci_config_device: EINVAL for 6 config=0 s->config=10 cmask=10 wmask=0 w1cmask=0 vmstate_load_state loop exit(a) for PCIDevice/config ret=-22 qemu: warning: error while loading state for instance 0x0 of device '0000:00:05.0/virtio-console' If I'm reading that right it's objecting to bit 4 in PCI status register which I think is the 'new capabilities' bit. Is this something like a previous limit of 32 interrupts/msi's that RHEL6 didn't check for? This bit is added automatically when a capability is added to the device. Can you dump the whole contents of config and s->config? OK, I'll add some code to dump the full configs; however my guess was something like that 'more than 32 interrupts' was itself the thing that required the capability. no, msi always requires a capability. This dump is with 33: get_pci_config_device: EINVAL for 6 config=0 s->config=10 cmask=10 wmask=0 w1cmask=0 config: 0000: f4 1a 03 10 03 00 00 00 00 00 80 07 00 00 00 00 config: 0010: 21 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 0020: 00 00 00 00 00 00 00 00 00 00 00 00 f4 1a 03 00 config: 0030: 00 00 00 00 00 00 00 00 00 00 00 00 0a 01 00 00 config: 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 00d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 00e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 config: 00f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 0000: f4 1a 03 10 00 00 10 00 00 00 80 07 00 00 00 00 s->config: 0010: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 0020: 00 00 00 00 00 00 00 00 00 00 00 00 f4 1a 03 00 s->config: 0030: 00 00 00 00 40 00 00 00 00 00 00 00 00 01 00 00 s->config: 0040: 11 00 20 00 01 00 00 00 01 08 00 00 00 00 00 00 s->config: 0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 00b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 00c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 00d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 00e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 s->config: 00f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 vmstate_load_state loop exit(a) for PCIDevice/config ret=-22 okay so the limitation is in virtio blk in rhel6 that one can not support 33 vectors and disables msix. we could just document the limitation for rhel6. alternatively we could add code to make it exit immediately fo rhel6 machine type and > 32 vectors. As this didn't work properly in rhel6, let's just document this limitation: - in rhel6, attempts to use more than 32 vectors per device cause msix to be disabled - additionally, migration to rhel7 will fail |