From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O9KwB-0003ZS-Vs for qemu-devel@nongnu.org; Tue, 04 May 2010 12:25:36 -0400 Received: from [140.186.70.92] (port=37986 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O9KwA-0003Yw-P7 for qemu-devel@nongnu.org; Tue, 04 May 2010 12:25:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O9Kw8-0000A5-JX for qemu-devel@nongnu.org; Tue, 04 May 2010 12:25:34 -0400 Received: from mail-pw0-f45.google.com ([209.85.160.45]:39185) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O9Kw8-00009v-9f for qemu-devel@nongnu.org; Tue, 04 May 2010 12:25:32 -0400 Received: by pwi6 with SMTP id 6so1857441pwi.4 for ; Tue, 04 May 2010 09:25:31 -0700 (PDT) Message-ID: <4BE04A78.6070505@codemonkey.ws> Date: Tue, 04 May 2010 11:25:28 -0500 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] [RESEND] Make char muxer more robust wrt small FIFOs References: <1271782566-16420-1-git-send-email-agraf@suse.de> <4BE024A9.2040904@codemonkey.ws> <16E7906F-F39B-4121-B540-E2F0E67D405E@suse.de> <4BE0307C.1010305@codemonkey.ws> <0D8C0E80-5325-4E50-A2EF-E73BB95AD8DA@suse.de> In-Reply-To: <0D8C0E80-5325-4E50-A2EF-E73BB95AD8DA@suse.de> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Graf Cc: Bastian Blank , Jan Kiszka , qemu-devel Developers , Aurelien Jarno On 05/04/2010 11:01 AM, Alexander Graf wrote: > > Am 04.05.2010 um 16:34 schrieb Anthony Liguori : > >> On 05/04/2010 09:30 AM, Alexander Graf wrote: >>> >>> >>> Am 04.05.2010 um 15:44 schrieb Anthony Liguori : >>> >>>> On 04/20/2010 11:56 AM, Alexander Graf wrote: >>>>> Virtio-Console can only process one character at a time. Using it >>>>> on S390 >>>>> gave me strage "lags" where I got the character I pressed before when >>>>> pressing one. So I typed in "abc" and only received "a", then >>>>> pressed "d" >>>>> but the guest received "b" and so on. >>>>> >>>>> While the stdio driver calls a poll function that just processes >>>>> on its >>>>> queue in case virtio-console can't take multiple characters at >>>>> once, the >>>>> muxer does not have such callbacks, so it can't empty its queue. >>>>> >>>>> To work around that limitation, I introduced a new timer that only >>>>> gets >>>>> active when the guest can not receive any more characters. In that >>>>> case >>>>> it polls again after a while to check if the guest is now >>>>> receiving input. >>>>> >>>>> This patch fixes input when using -nographic on s390 for me. >>>>> >>>> >>>> I think this is really a kvm issue. I assume it's because s390 >>>> idles in the kernel so you never drop to userspace to repoll the >>>> descriptor. >>> >>> There is no polling for the muxer. That's why it never knows when >>> virtio-console can receive again. >> >> Maybe I'm missing something simple, but it looks to me like the muxer >> is polling. mux_chr_can_read() is going to eventually poll the muxed >> devices to figure this out. >> >> If the root of the problem is that mux_chr_can_read() isn't being >> invoked for a prolonged period of time, the real issue is the problem >> I described. > > The problem is that the select list of fds includes the stdio fd, so > that gets notified and is coupled with virtio-console, but there's > nothing passing that on to mux and I don't think it'd be clever to > expose internal data to the muxer to tell it about the backend fds. When stdio is readable, it should invoke qemu_chr_read() with the read data which in turn ought to invoke mux_chr_read(). I'm not sure I understand what signalling is missing. Jan, does the problem Alex describes ring a bell? I seem to recall you saying that mux was still fundamentally broken but ought to work most of the time... Regards, Anthony Liguori > Alex