From: Tetsuya Mukawa <mukawa@igel.co.jp>
To: Nikolay Nikolaev <n.nikolaev@virtualopensystems.com>
Cc: VirtualOpenSystems Technical Team <tech@virtualopensystems.com>,
qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH] vhost-user: Add ability to know vhost-user backend disconnection
Date: Thu, 23 Apr 2015 13:17:58 +0900 [thread overview]
Message-ID: <55387276.3070802@igel.co.jp> (raw)
In-Reply-To: <CADDJ2=NcEsRXv9Kiw7zm-4XM0WHBqq+mWw9sDb_MntyLWnAaog@mail.gmail.com>
On 2015/04/22 5:19, Nikolay Nikolaev wrote:
> On Tue, Apr 21, 2015 at 9:36 AM, Tetsuya Mukawa <mukawa@igel.co.jp> wrote:
>> 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>
>> ---
>> net/vhost-user.c | 14 ++++++++++++++
>> 1 file changed, 14 insertions(+)
>>
>> diff --git a/net/vhost-user.c b/net/vhost-user.c
>> index 1d86a2b..55c05a5 100644
>> --- a/net/vhost-user.c
>> +++ b/net/vhost-user.c
>> @@ -19,6 +19,7 @@ typedef struct VhostUserState {
>> NetClientState nc;
>> CharDriverState *chr;
>> VHostNetState *vhost_net;
>> + int watch;
>> } VhostUserState;
>>
>> typedef struct VhostUserChardevProps {
>> @@ -113,12 +114,23 @@ static void net_vhost_link_down(VhostUserState *s, bool link_down)
>> }
>> }
>>
>> +static gboolean net_vhost_user_watch(GIOChannel *chan, GIOCondition cond,
>> + void *opaque)
>> +{
>> + VhostUserState *s = opaque;
>> + uint8_t buf[1];
>> +
>> + qemu_chr_fe_read_all(s->chr, buf, sizeof(buf));
> So you read the date from the buffer and just discard it?
> Are you going to miss messages this way?
>
> Please clarify.
Hi Nikolay,
Thanks for comment.
Yes, some messages might be lost, but it will be only happened after
unix domain socket is closed by vhost-user backend.
So I guess there is no side effect.
Anyway, I just want to know vhost-user disconnection, so other ways are
also nice.
Do you have any suggestions about how to implement?
Regards,
Tetsuya
> regards,
> Nikolay Nikolaev
>
>> + return FALSE;
>> +}
>> +
>> static void net_vhost_user_event(void *opaque, int event)
>> {
>> VhostUserState *s = opaque;
>>
>> switch (event) {
>> case CHR_EVENT_OPENED:
>> + s->watch = qemu_chr_fe_add_watch(s->chr, G_IO_HUP, net_vhost_user_watch, s);
>> vhost_user_start(s);
>> net_vhost_link_down(s, false);
>> error_report("chardev \"%s\" went up", s->chr->label);
>> @@ -126,6 +138,8 @@ static void net_vhost_user_event(void *opaque, int event)
>> case CHR_EVENT_CLOSED:
>> net_vhost_link_down(s, true);
>> vhost_user_stop(s);
>> + g_source_remove(s->watch);
>> + s->watch = 0;
>> error_report("chardev \"%s\" went down", s->chr->label);
>> break;
>> }
>> --
>> 1.9.1
>>
>>
prev parent reply other threads:[~2015-04-23 4:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-21 6:36 [Qemu-devel] [PATCH] vhost-user: Add ability to know vhost-user backend disconnection Tetsuya Mukawa
2015-04-21 20:19 ` Nikolay Nikolaev
2015-04-23 4:17 ` Tetsuya Mukawa [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=55387276.3070802@igel.co.jp \
--to=mukawa@igel.co.jp \
--cc=n.nikolaev@virtualopensystems.com \
--cc=qemu-devel@nongnu.org \
--cc=tech@virtualopensystems.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.