Bug 1052041
| Summary: | Rubbish serial port device is generated once failed to hotplug a serial port | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Qunfang Zhang <qzhang> |
| Component: | qemu-kvm-rhev | Assignee: | Amit Shah <amit.shah> |
| Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> |
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | 7.0 | CC: | amit.shah, flang, hhuang, juzhang, mdeng, michen, mrezanin, qzhang, rbalakri, virt-maint |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | qemu-kvm-rhev-2.1 | Doc Type: | Bug Fix |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2015-03-05 09:43:39 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: | |||
Please see bug 1040334. This is a dup of that one, which is a dup of bug 1003773. However, the fix is in 1.5.3-23, and you're using a newer version (-31). Can you try with -23 to see if we regressed again? (In reply to Amit Shah from comment #2) > Please see bug 1040334. This is a dup of that one, which is a dup of bug > 1003773. However, the fix is in 1.5.3-23, and you're using a newer version > (-31). > > Can you try with -23 to see if we regressed again? Hi, Amit This bug could be reproduced on -23 as well. In bug 1040334, which has the same problem, Mike said build qemu-kvm-rhev-1.5.3-39.el7.x86_64 works fine for him. Can you confirm? Just tested on qemu-kvm-1.5.3-41.el7.x86_64, still have problem.
CLI:
/usr/libexec/qemu-kvm ...... -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x7 -chardev socket,id=channel2,path=/tmp/helloworld2,server,nowait -device virtserialport,chardev=channel2,name=port2,bus=virtio-serial0.0,id=port2
(1) (qemu) info qtree
dev: virtserialport, id "port2"
chardev = channel2
nr = 2
name = "port2"
port 2, guest off, host off, throttle off
(2) Hot-plug port2 to channel2:
{"execute":"device_add","arguments":{"driver":"virtserialport","bus":"virtio-serial0.0","chardev":"channel2","name":"port3","id":"port3"}}
{"error": {"class": "GenericError", "desc": "Property 'virtserialport.chardev' can't take value 'channel2', it's in use"}}
(qemu)info qtree
dev: virtserialport, id ""
chardev = <null>
nr = 4294967295
name = "port3"
port -1, guest off, host off, throttle off
dev: virtserialport, id "port2"
chardev = channel2
nr = 2
name = "port2"
port 2, guest off, host off, throttle off
(3) (qemu) device_del port3
(qemu) info qtree
dev: virtserialport, id "p"
chardev = <null>
nr = 4294967295
name = "port3"
port -1, guest off, host off, throttle off
(4) re-hotplug port3 to channel2:
{"execute":"device_add","arguments":{"driver":"virtserialport","bus":"virtio-serial0.0","chardev":"channel2","name":"port3","id":"port3"}}
{"return": {}}
(qemu) info qtree:
type virtio-serial-bus
dev: virtserialport, id "port3"
chardev = channel2
nr = 2
name = "port3"
port 2, guest off, host off, throttle off
dev: virtserialport, id "port>"
chardev = <null>
nr = 4294967295
name = "port3"
port -1, guest off, host off, throttle off
Hi, Amit I just confirmed qemu-kvm-rhev-1.5.3-39.el7.x86_64 still have the problem. Thanks. The difference between this bug steps and bcao's bug 1040334: <qzhang> amit, bcao hotplugs a virtserialport with nr=0, first time failed and "info qtree" is normal, the second time succeeds but "info qtree" shows a weird input for that port. My issue is hot-plug a port the first time to make it fail (eg, to an in-use chardev), there's a weird data in the "info qtree" output. <amit> qzhang: so you're using an invalid chardev the first time itself, whereas bcao uses a valid one <amit> qzhang: (invalid I mean one that cannot be used) <qzhang> amit, yes~ Can't reproduce this upstream:
./x86_64-softmmu/qemu-system-x86_64 -m 512 -cpu host -enable-kvm -device virtio-serial-pci -chardev socket,id=channel2,path=/var/tmp/helloworld2,server,nowait -device virtserialport,chardev=channel2,name=port2,id=port2 -monitor stdio
(qemu) device_add virtserialport,id=port3,chardev=channel2,name=port3
Property 'virtserialport.chardev' can't take value 'channel2', it's in use
(qemu) info qtree
<snip>
dev: virtio-serial-pci, id ""
ioeventfd = true
vectors = 2 (0x2)
class = 1920 (0x780)
indirect_desc = true
event_idx = true
max_ports = 31 (0x1f)
addr = 04.0
romfile = ""
rombar = 1 (0x1)
multifunction = false
command_serr_enable = true
class Class 0780, addr 00:04.0, pci id 1af4:1003 (sub 1af4:0003)
bar 0: i/o at 0xc040 [0xc05f]
bar 1: mem at 0xfebf1000 [0xfebf1fff]
bus: virtio-bus
type virtio-pci-bus
dev: virtio-serial-device, id ""
max_ports = 31 (0x1f)
bus: virtio-serial-bus.0
type virtio-serial-bus
dev: virtserialport, id "port2"
chardev = "channel2"
nr = 1 (0x1)
name = "port2"
port 1, guest off, host off, throttle off
<snip>
(qemu) device_del port2
(qemu) device_add virtserialport,id=port3,chardev=channel2,name=port3
(qemu) info qtree
<snip>
dev: virtio-serial-pci, id ""
ioeventfd = true
vectors = 2 (0x2)
class = 1920 (0x780)
indirect_desc = true
event_idx = true
max_ports = 31 (0x1f)
addr = 04.0
romfile = ""
rombar = 1 (0x1)
multifunction = false
command_serr_enable = true
class Class 0780, addr 00:04.0, pci id 1af4:1003 (sub 1af4:0003)
bar 0: i/o at 0xc040 [0xc05f]
bar 1: mem at 0xfebf1000 [0xfebf1fff]
bus: virtio-bus
type virtio-pci-bus
dev: virtio-serial-device, id ""
max_ports = 31 (0x1f)
bus: virtio-serial-bus.0
type virtio-serial-bus
dev: virtserialport, id "port3"
chardev = "channel2"
nr = 1 (0x1)
name = "port3"
port 1, guest off, host off, throttle off
<snip>
Reproduce this bug as follow version:
Host:
# uname -r
3.10.0-144.el7.x86_64
qemu-kvm-rhev-1.5.3-30.el7.x86_64
Steps:
1.Boot guest with
...-vga std -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x7 -chardev socket,id=channel2,path=/tmp/helloworld2,server,nowait -device virtserialport,chardev=channel2,name=port2,bus=virtio-serial0.0,id=port2 ...
2. Hotplug a port2 on chardev "channel2"
{"execute":"device_add","arguments":{"driver":"virtserialport","bus":"virtio-serial0.0","chardev":"channel2","name":"port3","id":"port3"}}
{"error": {"class": "GenericError", "desc": "Property 'virtserialport.chardev' can't take value 'channel2', it's in use"}}
3.(qemu) info qtree
4. Remove port2 and re-plug port3
{"execute":"device_del","arguments":{"id":"port2"}}
{"timestamp": {"seconds": 1389598901, "microseconds": 373473}, "event": "DEVICE_DELETED", "data": {"device": "port2", "path": "/machine/peripheral/port2"}}
{"return": {}}
{"execute":"device_add","arguments":{"driver":"virtserialport","bus":"virtio-serial0.0","chardev":"channel2","name":"port3","id":"port3"}}
{"return": {}}
5. (qemu) info qtree
Results:
after step 3
bus: virtio-bus
type virtio-pci-bus
dev: virtio-serial-device, id ""
max_ports = 31
bus: virtio-serial0.0
type virtio-serial-bus
dev: virtserialport, id "`�_w�"
chardev = <null>
nr = 4294967295
name = "port3"
port -1, guest off, host off, throttle off
dev: virtserialport, id "port2"
chardev = channel2
nr = 1
name = "port2"
port 1, guest off, host off, throttle off
after step 5
bus: virtio-bus
type virtio-pci-bus
dev: virtio-serial-device, id ""
max_ports = 31
bus: virtio-serial0.0
type virtio-serial-bus
dev: virtserialport, id "port3"
chardev = channel2
nr = 1
name = "port3"
port 1, guest off, host off, throttle off
dev: virtserialport, id "�������������������������������������������?"
chardev = <null>
nr = 4294967295
name = "port3"
port -1, guest off, host off, throttle off
Test on latest version:
# uname -r
3.10.0-144.el7.x86_64
# rpm -q qemu-kvm-rhev
qemu-kvm-rhev-2.1.0-3.el7.x86_64
Steps as same as reproduce
Resutls:
After step3
..
bus: virtio-bus
type virtio-pci-bus
dev: virtio-serial-device, id ""
max_ports = 31 (0x1f)
bus: virtio-serial0.0
type virtio-serial-bus
dev: virtserialport, id "port2"
chardev = "channel2"
nr = 1 (0x1)
name = "port2"
port 1, guest off, host off, throttle off
..
After step5
...
bus: virtio-bus
type virtio-pci-bus
dev: virtio-serial-device, id ""
max_ports = 31 (0x1f)
bus: virtio-serial0.0
type virtio-serial-bus
dev: virtserialport, id "port3"
chardev = "channel2"
nr = 1 (0x1)
name = "port3"
port 1, guest off, host off, throttle off
..
According to above test ,this bug has been fixed.
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-2015-0624.html |
Description of problem: Execute a "failed" serial port hotplug opearation, for example, hotplug a port to the chardev which is already in use. Will generate a rubbish serial port with weird name. Version-Release number of selected component (if applicable): kernel-3.10.0-65.el7.x86_64 qemu-kvm-rhev-1.5.3-31.el7.x86_64 How reproducible: Always Steps to Reproduce: 1. Boot up a guest with virtio serial bus and port. /usr/libexec/qemu-kvm ...... -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x7 -chardev socket,id=channel2,path=/tmp/helloworld2,server,nowait -device virtserialport,chardev=channel2,name=port2,bus=virtio-serial0.0,id=port2 2. Hotplug a port2 on chardev "channel2" {"execute":"device_add","arguments":{"driver":"virtserialport","bus":"virtio-serial0.0","chardev":"channel2","name":"port3","id":"port3"}} {"error": {"class": "GenericError", "desc": "Property 'virtserialport.chardev' can't take value 'channel2', it's in use"}} 3.(qemu) info qtree 4. Remove port2 and re-plug port3 {"execute":"device_del","arguments":{"id":"port2"}} {"timestamp": {"seconds": 1389598901, "microseconds": 373473}, "event": "DEVICE_DELETED", "data": {"device": "port2", "path": "/machine/peripheral/port2"}} {"return": {}} {"execute":"device_add","arguments":{"driver":"virtserialport","bus":"virtio-serial0.0","chardev":"channel2","name":"port3","id":"port3"}} {"return": {}} 5. (qemu) info qtree Actual results: After step 3: type virtio-pci-bus dev: virtio-serial-device, id "" max_ports = 31 bus: virtio-serial0.0 type virtio-serial-bus dev: virtserialport, id "�'B�" chardev = <null> nr = 4294967295 name = "port3" port -1, guest off, host off, throttle off dev: virtserialport, id "channel0" chardev = charchannel0 nr = 3 name = "com.redhat.spice.0" port 3, guest on, host on, throttle off dev: virtserialport, id "port2" chardev = channel2 nr = 2 name = "port2" port 2, guest off, host off, throttle off dev: virtserialport, id "port1" chardev = channel1 nr = 1 name = "port1" port 1, guest off, host off, throttle off After step 5: dev: virtio-serial-device, id "" max_ports = 31 bus: virtio-serial0.0 type virtio-serial-bus dev: virtserialport, id "port3" chardev = channel2 nr = 2 name = "port3" port 2, guest off, host on, throttle off dev: virtserialport, id "device_del port2" chardev = <null> nr = 4294967295 name = "port3" port -1, guest off, host off, throttle off dev: virtserialport, id "channel0" chardev = charchannel0 nr = 3 name = "com.redhat.spice.0" port 3, guest on, host on, throttle off dev: virtserialport, id "port1" chardev = channel1 nr = 1 name = "port1" port 1, guest off, host off, throttle off Expected results: No incorrect port device generated. Additional info: