Bug 863754 - virtio_serialport data loss when hot-unplugging and re-plugging the port (host->guest)
Summary: virtio_serialport data loss when hot-unplugging and re-plugging the port (hos...
Keywords:
Status: CLOSED DUPLICATE of bug 863753
Alias: None
Product: Fedora
Classification: Fedora
Component: virtio-win
Version: 17
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Gal Hammer
QA Contact: Virtualization Bugs
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2012-10-07 08:31 UTC by Lukáš Doktor
Modified: 2013-07-02 15:10 UTC (History)
16 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2013-07-02 15:10:14 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)
host sender script (sends A, B, C, D..., resends when send fails) (430 bytes, text/x-python)
2012-10-07 08:32 UTC, Lukáš Doktor
no flags Details
guest receiver script (reads the port and verifies A, B, C, D, ... is received correctly. Reopens the port when read fails) (809 bytes, text/x-python)
2012-10-07 08:32 UTC, Lukáš Doktor
no flags Details

Description Lukáš Doktor 2012-10-07 08:31:31 UTC
Description of problem:
Hi guys,

this is bz contain the opposite direction of the same problem from:
https://bugzilla.redhat.com/show_bug.cgi?id=863753

I'm developing an interrupted loopback test. I managed to go around the problem with hot-plugging of the incorrectly uninitialized port ( https://bugzilla.redhat.com/show_bug.cgi?id=796048 ) but some data are lost between port replugs even thought the send/recv commands passed (I'm resending data in case send fails).

I created simple reproducers in pyton for each direction, this one is for host->guest (data loss or guest failure)
I'm sending data from host to guest, than I unplug the port. This usually causes qemu to fail.

Version-Release number of selected component (if applicable):
HOST:
kernel-3.5.3-1.fc17.x86_64
qemu-kvm-1.0.1-1.fc17.x86_64
GUEST:
kernel-3.5.4-2.fc17.x86_64

How reproducible:
10-20% (see the log for details)

Steps to Reproduce:
1) start sending data from host (run sender.py on host)
2) start receiving data on guest (run listener.py on guest)
3) unplug/replug the port (eg. MON=/tmp/monitor-hmp1-20121004-115412-sLj47KEF ; while :; do echo device_del vs1 | sudo socat $MON - ; sleep 5 ; echo 'device_add virtserialport,id=vs1,chardev=devvs1,nr=1,name=com.redhat.spice.0' | sudo socat $MON - ; sleep 5 ; done )
4) if VM survives see the error messages
  
Actual results:
Error messages informing about how much data were successfully sent from host, but were not received on guest.

Expected results:
send/recv should report failure for all data which were not transferred. So no data loss should be visible using the simple reproducer.

Comment 1 Lukáš Doktor 2012-10-07 08:32:14 UTC
Created attachment 622917 [details]
host sender script (sends A, B, C, D..., resends when send fails)

Comment 2 Lukáš Doktor 2012-10-07 08:32:59 UTC
Created attachment 622918 [details]
guest receiver script (reads the port and verifies A, B, C, D, ... is received correctly. Reopens the port when read fails)

Comment 3 Lukáš Doktor 2012-10-07 08:34:45 UTC
HOST->GUEST


[10s between replug]
Opened
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)
3
Opened
skipped A (waiting for B)
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)


[5s between replug]
3
Opened
Closing ([Errno 19] No such device)
3
Opened
skipped A (waiting for B)
Closing ([Errno 19] No such device)
3
Opened
skipped 34 (waiting for 5)
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)




[2s between replug]
3
Opened
skipped H (waiting for I)
Closing ([Errno 19] No such device)
3
Opened
skipped 6 (waiting for 7)
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)
3
Opened
Closing ([Errno 19] No such device)


[1s between replug]
3
Opened
Closing ([Errno 19] No such device)
3
Opened
skipped S (waiting for T)
Closing ([Errno 19] No such device)
3
Opened
skipped Y (waiting for Z)
Closing ([Errno 19] No such device)
3


[VM died]

The error rate is visible from reconnections (keep in mind this was generated with 0.001s sleep between each send() cmds). Without this sleeps VM always crashed.

Comment 4 Lukáš Doktor 2012-10-07 08:43:57 UTC
Sorry, I forgot to add qemu-cmdline, it was generated by autotest:

/usr/bin/qemu-kvm -S -name 'vm1' -nodefaults -chardev socket,id=hmp_id_hmp1,path=/tmp/monitor-hmp1-20121004-115412-sLj47KEF,server,nowait -mon chardev=hmp_id_hmp1,mode=readline -chardev socket,id=serial_id_serial1,path=/tmp/serial-serial1-20121004-115412-sLj47KEF,server,nowait -device isa-serial,chardev=serial_id_serial1 -device virtio-serial-pci,id=virtio_serial_pci0 -chardev socket,id=devvs1,path=/tmp/virtio_port-vs1-20121004-115412-sLj47KEF,server,nowait -device virtserialport,chardev=devvs1,name=com.redhat.spice.0,id=vs1,bus=virtio_serial_pci0.0 -chardev socket,id=devvs2,path=/tmp/virtio_port-vs2-20121004-115412-sLj47KEF,server,nowait -device virtserialport,chardev=devvs2,name=com.redhat.spice.1,id=vs2,bus=virtio_serial_pci0.0 -chardev socket,id=devvs3,path=/tmp/virtio_port-vs3-20121004-115412-sLj47KEF,server,nowait -device virtserialport,chardev=devvs3,name=com.redhat.spice.2,id=vs3,bus=virtio_serial_pci0.0 -chardev socket,id=devvs4,path=/tmp/virtio_port-vs4-20121004-115412-sLj47KEF,server,nowait -device virtserialport,chardev=devvs4,name=com.redhat.spice.3,id=vs4,bus=virtio_serial_pci0.0 -chardev socket,id=seabioslog_id_20121004-115412-sLj47KEF,path=/tmp/seabios-20121004-115412-sLj47KEF,server,nowait -device isa-debugcon,chardev=seabioslog_id_20121004-115412-sLj47KEF,iobase=0x402 -device ich9-usb-uhci1,id=usb1 -drive file='/tmp/kvm_autotest_root/images/f17-64.qcow2',index=0,if=ide,cache=none,snapshot=on -device virtio-net-pci,netdev=idbjSa34,mac='9a:13:14:15:16:17',id='idCjnNs4' -netdev tap,id=idbjSa34,fd=21 -m 512 -smp 1,cores=1,threads=1,sockets=1 -cpu 'Penryn' -device usb-tablet,id=usb-tablet1,bus=usb1.0,port=1 -vnc :0 -vga std -rtc base=utc,clock=host,driftfix=none -boot order=cdn,once=c,menu=off -enable-kvm

Comment 5 Cole Robinson 2013-07-02 15:10:14 UTC

*** This bug has been marked as a duplicate of bug 863753 ***


Note You need to log in before you can comment on or make changes to this bug.