From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Tetsuya Mukawa" <mukawa@igel.co.jp>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Yuanhan Liu" <yuanhan.liu@linux.intel.com>,
"Victor Kaplansky" <victork@redhat.com>,
"Jason Wang" <jasowang@redhat.com>
Subject: [Qemu-devel] [PULL v3 02/15] vhost-user: add ability to know vhost-user backend disconnection
Date: Fri, 17 Jun 2016 03:30:10 +0300 [thread overview]
Message-ID: <20160617033010-mutt-send-email-mst@redhat.com> (raw)
In-Reply-To: <1466123354-22896-1-git-send-email-mst@redhat.com>
From: Tetsuya Mukawa <mukawa@igel.co.jp>
Current QEMU cannot detect vhost-user backend disconnection. The
patch adds ability to know it.
To know disconnection, add watcher to detect G_IO_HUP event. When
G_IO_HUP event is detected, the disconnected socket will be read
to cause a CHR_EVENT_CLOSED.
Signed-off-by: Tetsuya Mukawa <mukawa@igel.co.jp>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Tested-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: Victor Kaplansky <victork@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
net/vhost-user.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/net/vhost-user.c b/net/vhost-user.c
index 1b9e73a..4a7fd5f 100644
--- a/net/vhost-user.c
+++ b/net/vhost-user.c
@@ -22,6 +22,7 @@ typedef struct VhostUserState {
NetClientState nc;
CharDriverState *chr;
VHostNetState *vhost_net;
+ int watch;
} VhostUserState;
typedef struct VhostUserChardevProps {
@@ -167,6 +168,20 @@ static NetClientInfo net_vhost_user_info = {
.has_ufo = vhost_user_has_ufo,
};
+static gboolean net_vhost_user_watch(GIOChannel *chan, GIOCondition cond,
+ void *opaque)
+{
+ VhostUserState *s = opaque;
+ uint8_t buf[1];
+
+ /* We don't actually want to read anything, but CHR_EVENT_CLOSED will be
+ * raised as a side-effect of the read.
+ */
+ qemu_chr_fe_read_all(s->chr, buf, sizeof(buf));
+
+ return FALSE;
+}
+
static void net_vhost_user_event(void *opaque, int event)
{
const char *name = opaque;
@@ -184,6 +199,8 @@ static void net_vhost_user_event(void *opaque, int event)
trace_vhost_user_event(s->chr->label, event);
switch (event) {
case CHR_EVENT_OPENED:
+ s->watch = qemu_chr_fe_add_watch(s->chr, G_IO_HUP,
+ net_vhost_user_watch, s);
if (vhost_user_start(queues, ncs) < 0) {
exit(1);
}
@@ -192,6 +209,8 @@ static void net_vhost_user_event(void *opaque, int event)
case CHR_EVENT_CLOSED:
qmp_set_link(name, false, &err);
vhost_user_stop(queues, ncs);
+ g_source_remove(s->watch);
+ s->watch = 0;
break;
}
--
MST
next prev parent reply other threads:[~2016-06-17 0:30 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1466123354-22896-1-git-send-email-mst@redhat.com>
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 01/15] pci: fix pci_requester_id() Michael S. Tsirkin
2016-06-17 0:30 ` Michael S. Tsirkin [this message]
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 03/15] tests/vhost-user-bridge: add client mode Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 04/15] tests/vhost-user-bridge: workaround stale vring base Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 05/15] qemu-char: add qemu_chr_disconnect to close a fd accepted by listen fd Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 06/15] vhost-user: disconnect on start failure Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 07/15] vhost-net: do not crash if backend is not present Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 08/15] vhost-net: save & restore vhost-user acked features Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 09/15] vhost-net: save & restore vring enable state Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 10/15] tests: append i386 tests Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 11/15] test: start vhost-user reconnect test Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 12/15] pci core: assert ENOSPC when add capability Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 13/15] fix some coding style problems Michael S. Tsirkin
2016-06-17 0:30 ` [Qemu-devel] [PULL v3 14/15] msi_init: change return value to 0 on success Michael S. Tsirkin
2016-06-17 0:31 ` [Qemu-devel] [PULL v3 15/15] MAINTAINERS: add Marcel to PCI Michael S. Tsirkin
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=20160617033010-mutt-send-email-mst@redhat.com \
--to=mst@redhat.com \
--cc=jasowang@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mukawa@igel.co.jp \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=victork@redhat.com \
--cc=yuanhan.liu@linux.intel.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).