From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46571) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSmJP-0006Fx-25 for qemu-devel@nongnu.org; Mon, 08 Feb 2016 08:57:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aSmJK-0007rv-Mr for qemu-devel@nongnu.org; Mon, 08 Feb 2016 08:57:06 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53292) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aSmJK-0007rr-F8 for qemu-devel@nongnu.org; Mon, 08 Feb 2016 08:57:02 -0500 Date: Mon, 8 Feb 2016 13:56:58 +0000 From: "Daniel P. Berrange" Message-ID: <20160208135658.GC20236@redhat.com> References: <56B78F40.1060204@ilande.co.uk> <20160208121153.GB20236@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <20160208121153.GB20236@redhat.com> Subject: Re: [Qemu-devel] Serial telnet console drops incoming characters on git master Reply-To: "Daniel P. Berrange" List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Mark Cave-Ayland Cc: qemu-devel 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 > > 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 > > Message-Id: <1453202071-10289-4-git-send-email-berrange@redhat.com> > > Signed-off-by: Paolo Bonzini > > > > 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 :|