From: "Daniel P. Berrange" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: Amit Shah <amit.shah@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] virtio-console: set frontend open permanently for console devs
Date: Fri, 29 Jul 2016 16:25:42 +0100 [thread overview]
Message-ID: <20160729152542.GL4485@redhat.com> (raw)
In-Reply-To: <1469791063-28222-1-git-send-email-berrange@redhat.com>
On Fri, Jul 29, 2016 at 12:17:43PM +0100, Daniel P. Berrange wrote:
> The virtio-console.c file handles both serial consoles
> and interactive consoles, since they're backed by the
> same device model.
>
> Since serial devices are expected to be reliable and
> need to notify the guest when the backend is opened
> or closed, the virtio-console.c file wires up support
> for chardev events. This affects both serial consoles
> and interactive consoles, using a network connection
> based chardev backend such as 'socket', but not when
> using a PTY based backend or plain 'file' backends.
>
> When a device is open, however, the behaviour is
> different - if the backend chardev returns EAGAIN or
> a short write, the serial console will block and
> setup a watch to poll for writability, ensuring no
> data is lost. The interactive consoles meanwhile
> will simply discard data.
>
> This means that the interactive consoles have different
> blocking behaviour depending on whether the chardev is
> open or not. If open, data may be discarded if not
> consumed, where as if closed, data will always be queued
> pending an open.
>
> This behaviour is unhelpful in general - applications
> outputting messages on the guest console should not be
> blocked simply because no client is conencted to the host
> side.
>
> Consider for example, configuring a x86_64 guest with a
> plain UART serial port
>
> -chardev socket,id=charserial1,host=127.0.0.1,port=9001,server,nowait,logfile=console1.log,logappend=on
> -device isa-serial,chardev=charserial1,id=serial1
>
> vs a s390 guest which has to use the virtio-console port
>
> -chardev socket,id=charconsole1,host=127.0.0.1,port=9000,server,nowait,logfile=console2.log,logappend=on
> -device virtconsole,chardev=charconsole1,id=console1
>
> The isa-serial one gets data written to the log regardless
> of whether a client is connected, while the virtioconsole
> one only gets data written to the log when a client is
> connected.
>
> This patch changes the behaviour so that virtconsole
> devices work in same way as other traditional console
> devices. Specifically, the frontend will now be marked
> as permanently open, so data flows regardless of the
> backend status.
>
> NB, the behaviour of virtserialport devices is *not*
> changed, only virtconsole.
>
> Fixes bug: https://bugs.launchpad.net/qemu/+bug/1599214
>
> Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
> ---
> hw/char/virtio-console.c | 25 +++++++++++++++++++++----
> 1 file changed, 21 insertions(+), 4 deletions(-)
>
> NB If there is a concern about backends compatibility with
> this change, we could instead add a boolean property to
> the virtio-console device 'explicit-open' which controls
> whether the virtconsole device has the old behaviour or
> the new behaviour and default to old. Personally I think
> it is fine to just change behaviour for virtconsole
> unconditionally though
Ignore this patch for now. Looking around the users of chardev
code I've noticed more inconsistency. So I want to analyse the
broad usage and report on semantics across all, before proposing
potential multiple fixes.
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 :|
prev parent reply other threads:[~2016-07-29 15:25 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-29 11:17 [Qemu-devel] [PATCH] virtio-console: set frontend open permanently for console devs Daniel P. Berrange
2016-07-29 15:25 ` Daniel P. Berrange [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160729152542.GL4485@redhat.com \
--to=berrange@redhat.com \
--cc=amit.shah@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.