qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Chris Friesen <chris.friesen@windriver.com>
To: "Richard W.M. Jones" <rjones@redhat.com>
Cc: Amit Shah <amit.shah@redhat.com>,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] questions about host side of virtio-serial
Date: Thu, 31 Jul 2014 08:45:09 -0600	[thread overview]
Message-ID: <53DA5675.6010607@windriver.com> (raw)
In-Reply-To: <20140731093224.GB14001@redhat.com>

On 07/31/2014 03:32 AM, Richard W.M. Jones wrote:
> On Wed, Jul 30, 2014 at 12:52:41PM -0600, Chris Friesen wrote:

>> In particular, assuming that the host side is using a chardev mapped
>> to a unix socket:
>>
>> 1) Is there any way for the host app to get information about
>> whether or not the guest is reading the messages?  (i.e. logically
>> equivalent to getting POLLHUP in the guest when the host app
>> disconnects.)
>
> No, I don't believe that is possible.  It acts like a real serial port
> and throws away bytes when no one is listening (on both ends).

With qemu 1.4.2 it blocks or returns EAGAIN if the guest tries to write 
to the char device, but the behaviour is different if the host tries to 
write to the unix socket.  See 4 below.


>> 4) If nothing in the guest is reading the data, how much data can
>> the host send before it will get an error?
>
> It won't get an error - the sender will block.  Except on ARM where
> there is a race condition in virtio-mmio causing writes to be thrown
> away (https://bugs.launchpad.net/qemu/+bug/1224444).

I'm seeing behaviour that doesn't match what you describe.  With nothing 
listening in the guest I can send a packet to the unix socket on the 
host and it gets accepted:

connect(7, {sa_family=AF_FILE, 
sun_path="/var/lib/libvirt/qemu/cgcs.messaging.instance-00000004.sock"}, 
61) = 0
sendto(7, "\r\360\255\272N\0instcgcs.server_grp\0cgcs.s"..., 78, 0, 
NULL, 0) = 78


Then, up in the guest I start a new process to read from the device and 
I can read the data that was sent in by the host.

open("/dev/virtio-ports/cgcs.messaging", O_RDWR|O_NONBLOCK) = 3
read(3, "\r\360\255\272N\0instcgcs.server_grp\0cgcs.s"..., 10000) = 78



This is a VM started by openstack, the pertinent parameters are:

-device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x4 -chardev 
socket,id=charchannel0,path=/var/lib/libvirt/qemu/cgcs.messaging.instance-00000004.sock,server,nowait 
-device 
virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=cgcs.messaging


Chris

  reply	other threads:[~2014-07-31 14:45 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-30 18:52 [Qemu-devel] questions about host side of virtio-serial Chris Friesen
2014-07-31  9:32 ` Richard W.M. Jones
2014-07-31 14:45   ` Chris Friesen [this message]
2014-07-31 15:07     ` Paolo Bonzini

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=53DA5675.6010607@windriver.com \
    --to=chris.friesen@windriver.com \
    --cc=amit.shah@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rjones@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).