From: Jamie Lokier <jamie@shareable.org>
To: Amit Shah <amit.shah@redhat.com>
Cc: qemu list <qemu-devel@nongnu.org>,
Juan Quintela <quintela@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Luiz Capitulino <lcapitulino@redhat.com>
Subject: Re: [Qemu-devel] Re: [PATCH 10/15] virtio-serial: Add QMP events for failed port/device add
Date: Fri, 26 Mar 2010 05:23:25 +0000 [thread overview]
Message-ID: <20100326052325.GZ19308@shareable.org> (raw)
In-Reply-To: <20100326045607.GJ8111@amit-x200.redhat.com>
Amit Shah wrote:
> > Sure. Does the host app see an EOF on its input when that happens?
> > (I.e. *not* like a real serial port).
>
> If it's an in-qemu app, it gets the guest_closed() callback. So I guess
> qmp events for non-qemu apps is what you're looking for?
See below.
> > But what I really meant was, if the guest resets, and then it boots up
> > before the host apps manage to process their events (e.g. due to
> > timing, remoteness, swapping or whatever), it's important that the
> > virtio-serial using host app knows where the discontinuity in the byte
> > stream is. Otherwise the app needs to use a silly overcomplicated
> > protocol just to provide a reliable layer over the byte stream.
>
> I'd rather that the apps used the existing QMP notifications for guest
> reset so that we don't have to do anything special for virtio-serial
> (and for other devices as well).
I'm trying to understand how to avoid the race condition with that.
1. guest sends a big blob of data to virtio-serial
2. qemu writes to socket for host app
-> wakes up host app (outside qemu) listening for virtio-serial data
3. guest resets or its kernel crashes
-> the big blob is only partially sent
4. qemu sends QMP notification
5. -> wakes up host app listening for QMP events
6. guest boots up.
7. guest opens virtio-serial, and starts by sending a message.
8. -> host app gets to run, sees the event sent in step 2.
9. -> host app reads available data from virtio-serial
data includes bytes sent in step 1 and step 7
Can the host app tell which bytes to discard because they were a
truncated message sent prior to the reset, so that it can find the
start of the new message sent in step 7?
A QMP event has that race condition.
If communication with the external host app is over a local socket
(AF_UNIX or AF_INET or mkpipe), qemu could just disconnect and
reconnect whenever the guest does, which is perfectly logical and
solves this.
If the external host app is fork+exec'd from qemu with a pair of pipes
(",exec="), closing the writing pipe, waiting for EOF from the
reading pipe, and then re-exec-ing the external app would do as well.
If neither of those are used, then a bit more context from QMP is
needed, such as the exact number of bytes transmitted prior to the
reset, presumably in a virtio-serial close event.
-- Jamie
next prev parent reply other threads:[~2010-03-26 5:23 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-24 14:49 [Qemu-devel] [PATCH 00/15] v3: virtio-serial-bus fixes, new abi for port discovery Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 01/15] virtio-serial: save/load: Ensure target has enough ports Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 02/15] virtio-serial: save/load: Ensure nr_ports on src and dest are same Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 03/15] virtio-serial: save/load: Ensure we have hot-plugged ports instantiated Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 04/15] virtio-serial: save/load: Send target host connection status if different Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 05/15] virtio-serial: Use control messages to notify guest of new ports Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 06/15] virtio-serial: whitespace: match surrounding code Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 07/15] virtio-serial: Remove redundant check for 0-sized write request Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 08/15] virtio-serial: Update copyright year to 2010 Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 09/15] virtio-serial: Propagate errors in initialising ports / devices in guest Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 10/15] virtio-serial: Add QMP events for failed port/device add Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 11/15] virtio-serial: Send out guest data to ports only if port is opened Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 12/15] iov: Introduce a new file for helpers around iovs, add iov_from_buf() Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 13/15] iov: Add iov_to_buf and iov_size helpers Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 14/15] virtio-serial: Handle scatter-gather buffers for control messages Amit Shah
2010-03-24 14:49 ` [Qemu-devel] [PATCH 15/15] virtio-serial: Handle scatter/gather input from the guest Amit Shah
2010-03-30 13:44 ` [Qemu-devel] Re: [PATCH 14/15] virtio-serial: Handle scatter-gather buffers for control messages Juan Quintela
2010-03-30 13:47 ` Amit Shah
2010-03-24 20:34 ` [Qemu-devel] Re: [PATCH 10/15] virtio-serial: Add QMP events for failed port/device add Luiz Capitulino
2010-03-25 3:47 ` Amit Shah
2010-03-25 18:34 ` Luiz Capitulino
2010-03-26 1:17 ` Jamie Lokier
2010-03-26 2:07 ` Amit Shah
2010-03-26 4:07 ` Jamie Lokier
2010-03-26 4:56 ` Amit Shah
2010-03-26 5:23 ` Jamie Lokier [this message]
2010-03-26 13:49 ` Amit Shah
2010-03-26 14:44 ` Jamie Lokier
2010-03-26 14:57 ` Amit Shah
2010-03-28 15:01 ` Jamie Lokier
2010-03-26 13:05 ` Luiz Capitulino
2010-03-26 13:24 ` Amit Shah
2010-03-26 1:57 ` Amit Shah
2010-03-25 18:55 ` Luiz Capitulino
2010-03-26 2:16 ` Amit Shah
2010-03-26 13:14 ` Luiz Capitulino
2010-03-26 13:26 ` Amit Shah
2010-03-26 14:29 ` Luiz Capitulino
2010-03-26 14:43 ` Amit Shah
2010-03-26 17:52 ` Luiz Capitulino
2010-03-27 8:03 ` Amit Shah
2010-03-29 13:34 ` Luiz Capitulino
2010-03-26 16:51 ` Anthony Liguori
2010-03-26 1:09 ` [Qemu-devel] [PATCH 02/15] virtio-serial: save/load: Ensure nr_ports on src and dest are same Jamie Lokier
2010-03-26 2:03 ` Amit Shah
2010-03-26 4:08 ` Jamie Lokier
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=20100326052325.GZ19308@shareable.org \
--to=jamie@shareable.org \
--cc=amit.shah@redhat.com \
--cc=kraxel@redhat.com \
--cc=lcapitulino@redhat.com \
--cc=mst@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@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 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.