[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] Serial telnet console drops incoming characters on git
From: |
Daniel P. Berrange |
Subject: |
Re: [Qemu-devel] Serial telnet console drops incoming characters on git master |
Date: |
Mon, 8 Feb 2016 13:56:58 +0000 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
On Mon, Feb 08, 2016 at 12:11:53PM +0000, Daniel P. Berrange wrote:
> On Sun, Feb 07, 2016 at 06:38:56PM +0000, Mark Cave-Ayland wrote:
> > Hi Daniel,
> >
> > I found another issue where the latest set of console updates appear to
> > break -serial telnet on qemu-system-sparc. What I see is that while
> > incoming serial telnet appears fine, outgoing serial telnet traffic
> > caused by typing over the serial connection results in every other
> > character being dropped.
> >
> > A quick session with git bisect points to the following commit:
> >
> > commit f2001a7e0555b66d6db25a3ff1801540814045bb
> > Author: Daniel P. Berrange <address@hidden>
> > Date: Tue Jan 19 11:14:30 2016 +0000
> >
> > char: don't assume telnet initialization will not block
> >
> > The current code for doing telnet initialization is writing to
> > a socket without checking the return status. While it is highly
> > unlikely to be a problem when writing to a bare socket, as the
> > buffers are large enough to prevent blocking, this cannot be
> > assumed safe with TLS sockets. So write the telnet initialization
> > code into a memory buffer and then use an I/O watch to fully
> > send the data.
> >
> > Signed-off-by: Daniel P. Berrange <address@hidden>
> > Message-Id: <address@hidden>
> > Signed-off-by: Paolo Bonzini <address@hidden>
> >
> > I can reproduce this with git master as follows (built on Debian Wheezy
> > x86-64):
> >
> > './configure' '--target-list=sparc-softmmu' --enable-trace-backends=stderr
> > make install
> >
> > Next download a copy of the SS-20 PROM from
> > http://home.earthlink.net/~reif/ss20_v2.25_rom and then start QEMU with
> > the command line below:
> >
> > ./qemu-system-sparc -bios ./ss20_v2.25_rom -M SS-20 -nographic -boot c
> > -serial telnet:0.0.0.0:3000,server -cpu "TI SuperSparc 60" -m 64
> >
> > Now telnet to port 3000 and wait for the PROM to boot all the way to the
> > "ok" prompt. At this point if you type over the telnet connection, you
> > should see that every alternate character typed is being lost.
>
> Thanks for the instructions to reproduce - I can reproduce it myself too
>
> This is a bit of a strange bug - it only happens when QEMU is told to block
> at startup. If you add 'nowait' to the -serial arg then everything appears
> to work fine. The data sent over the wire to initialize telnet is identical
> in both cases, and data forwarded to the hardware backend is the same.
>
> It is something todo with the fact that when we initialize the chardev in
> blocking mode with telnet, the 'tcp_chr_connect' call now happens from the
> main loop, since of from main initialization. I'm still investigating why
> this would make any difference...
Finally found out the problem - we ended up registering I/O watches
twice, so 1/2 the characters ended up in a blackhole. I've just copied
you on a suitable patch.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|