* [PATCH] resend slave fd to vhost when reconnect to vhost
@ 2020-04-17 5:14 ni.xun.intel
2020-04-14 10:02 ` Raphael Norwitz
0 siblings, 1 reply; 3+ messages in thread
From: ni.xun.intel @ 2020-04-17 5:14 UTC (permalink / raw)
To: raphael.norwitz, mst, kwolf, mreitz, qemu-block
Cc: Yan Miao, lucascye, Lu Zhigang, qemu-devel, Ni Xun
From: Ni Xun <richardni@tencent.com>
when reconnecting to vhost server, it doesn't send slave fd to vhost
as the slave fd is only sent in vhost_user_init. also resend the slave fd
in vhost reconnect.
Signed-off-by: Ni Xun <richardni@tencent.com>
Signed-off-by: Lu Zhigang <tonnylu@tencent.com>
Signed-off-by: Yan Miao <leomyan@tencent.com>
Signed-off-by: lucascye <lucascye@tencent.com>
---
hw/block/vhost-user-blk.c | 6 ++++++
hw/virtio/vhost-user.c | 2 +-
include/hw/virtio/vhost.h | 1 +
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
index 17df5338e7..59650a570b 100644
--- a/hw/block/vhost-user-blk.c
+++ b/hw/block/vhost-user-blk.c
@@ -138,6 +138,12 @@ static int vhost_user_blk_start(VirtIODevice *vdev)
error_report("Error get inflight: %d", -ret);
goto err_guest_notifiers;
}
+ } else {
+ ret = vhost_setup_slave_channel(&s->dev);
+ if (ret < 0) {
+ error_report("Error setting vhost slave channel: %d", -ret);
+ return ret;
+ }
}
ret = vhost_dev_set_inflight(&s->dev, s->inflight);
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index 08e7e63790..0da4a12787 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -1115,7 +1115,7 @@ err:
return;
}
-static int vhost_setup_slave_channel(struct vhost_dev *dev)
+int vhost_setup_slave_channel(struct vhost_dev *dev)
{
VhostUserMsg msg = {
.hdr.request = VHOST_USER_SET_SLAVE_REQ_FD,
diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
index 085450c6f8..cad60ad521 100644
--- a/include/hw/virtio/vhost.h
+++ b/include/hw/virtio/vhost.h
@@ -100,6 +100,7 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev);
void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev);
int vhost_dev_enable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev);
void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev);
+int vhost_setup_slave_channel(struct vhost_dev *hdev);
/* Test and clear masked event pending status.
* Should be called after unmask to avoid losing events.
--
2.24.1 (Apple Git-126)
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] resend slave fd to vhost when reconnect to vhost
2020-04-17 5:14 [PATCH] resend slave fd to vhost when reconnect to vhost ni.xun.intel
@ 2020-04-14 10:02 ` Raphael Norwitz
2020-04-18 10:42 ` xun ni
0 siblings, 1 reply; 3+ messages in thread
From: Raphael Norwitz @ 2020-04-14 10:02 UTC (permalink / raw)
To: ni.xun.intel, tonnylu, leomyan, lucascye; +Cc: qemu-devel, mst
On Fri, Apr 17, 2020 at 01:14:00PM +0800, ni.xun.intel@gmail.com wrote:
>
> From: Ni Xun <richardni@tencent.com>
>
> when reconnecting to vhost server, it doesn't send slave fd to vhost
> as the slave fd is only sent in vhost_user_init. also resend the slave fd
> in vhost reconnect.
>
I don’t think that’s correct. See vhost_user_init() here:
https://git.qemu.org/?p=qemu.git;a=blob;f=hw/virtio/vhost-user.c;h=08e7e63790e5bcfae6cd31bf9ccd32c3a7347f4e;hb=HEAD#l1898
Rather, vhost_setup_slave_channel() is called by vhost_user_backend_init(),
which is called on every reconnect inside vhost_dev_init().
see vhost_user_blk_connect(): https://git.qemu.org/?p=qemu.git;a=blob;f=hw/block/vhost-user-blk.c;h=17df5338e77c684175a86e882b508849c246e78a;hb=HEAD#l297
and vhost_dev_init():https://git.qemu.org/?p=qemu.git;a=blob;f=hw/virtio/vhost.c;h=01ebe12f28e9d7e3150375dda6f55b6b8f04a42a;hb=HEAD#l1224
Note that the dev->vq_index is also set to 0 right before the
vhost_dev_init() call.
I tested myself and saw a VHOST_USER_SET_SLAVE_REQ_FD message sent on each
reconnect with the vhost-user-blk sample.
Are you seeing different behavior? If so, please provide more details on
your setup?
>
> diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
> index 17df5338e7..59650a570b 100644
> --- a/hw/block/vhost-user-blk.c
> +++ b/hw/block/vhost-user-blk.c
> @@ -138,6 +138,12 @@ static int vhost_user_blk_start(VirtIODevice *vdev)
> error_report("Error get inflight: %d", -ret);
> goto err_guest_notifiers;
> }
What's the justification for sending the slave fd here? Please elaborate.
> + } else {
> + ret = vhost_setup_slave_channel(&s->dev);
> + if (ret < 0) {
> + error_report("Error setting vhost slave channel: %d", -ret);
> + return ret;
> + }
> }
> diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
> index 085450c6f8..cad60ad521 100644
> --- a/include/hw/virtio/vhost.h
> +++ b/include/hw/virtio/vhost.h
Why expose this through vhost.h? This is vhost-user specific.
> @@ -100,6 +100,7 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev);
> void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev);
> int vhost_dev_enable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev);
> void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev);
> +int vhost_setup_slave_channel(struct vhost_dev *hdev);
>
> /* Test and clear masked event pending status.
> * Should be called after unmask to avoid losing events.
> --
> 2.24.1 (Apple Git-126)
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] resend slave fd to vhost when reconnect to vhost
2020-04-14 10:02 ` Raphael Norwitz
@ 2020-04-18 10:42 ` xun ni
0 siblings, 0 replies; 3+ messages in thread
From: xun ni @ 2020-04-18 10:42 UTC (permalink / raw)
To: Raphael Norwitz; +Cc: mst, Yan Miao, lucascye, Ni Xun, qemu-devel, Lu Zhigang
oh, yes, there is some mis-config here, thanks for pointing that out.
looks like the upstream has fixed it.
Thanks,
Xun
Raphael Norwitz <raphael.norwitz@nutanix.com> 于2020年4月18日周六 上午9:46写道:
>
> On Fri, Apr 17, 2020 at 01:14:00PM +0800, ni.xun.intel@gmail.com wrote:
> >
> > From: Ni Xun <richardni@tencent.com>
> >
> > when reconnecting to vhost server, it doesn't send slave fd to vhost
> > as the slave fd is only sent in vhost_user_init. also resend the slave fd
> > in vhost reconnect.
> >
>
> I don’t think that’s correct. See vhost_user_init() here:
>
> https://git.qemu.org/?p=qemu.git;a=blob;f=hw/virtio/vhost-user.c;h=08e7e63790e5bcfae6cd31bf9ccd32c3a7347f4e;hb=HEAD#l1898
>
> Rather, vhost_setup_slave_channel() is called by vhost_user_backend_init(),
> which is called on every reconnect inside vhost_dev_init().
>
> see vhost_user_blk_connect(): https://git.qemu.org/?p=qemu.git;a=blob;f=hw/block/vhost-user-blk.c;h=17df5338e77c684175a86e882b508849c246e78a;hb=HEAD#l297
> and vhost_dev_init():https://git.qemu.org/?p=qemu.git;a=blob;f=hw/virtio/vhost.c;h=01ebe12f28e9d7e3150375dda6f55b6b8f04a42a;hb=HEAD#l1224
>
> Note that the dev->vq_index is also set to 0 right before the
> vhost_dev_init() call.
>
> I tested myself and saw a VHOST_USER_SET_SLAVE_REQ_FD message sent on each
> reconnect with the vhost-user-blk sample.
>
> Are you seeing different behavior? If so, please provide more details on
> your setup?
>
> >
> > diff --git a/hw/block/vhost-user-blk.c b/hw/block/vhost-user-blk.c
> > index 17df5338e7..59650a570b 100644
> > --- a/hw/block/vhost-user-blk.c
> > +++ b/hw/block/vhost-user-blk.c
> > @@ -138,6 +138,12 @@ static int vhost_user_blk_start(VirtIODevice *vdev)
> > error_report("Error get inflight: %d", -ret);
> > goto err_guest_notifiers;
> > }
>
> What's the justification for sending the slave fd here? Please elaborate.
>
> > + } else {
> > + ret = vhost_setup_slave_channel(&s->dev);
> > + if (ret < 0) {
> > + error_report("Error setting vhost slave channel: %d", -ret);
> > + return ret;
> > + }
> > }
> > diff --git a/include/hw/virtio/vhost.h b/include/hw/virtio/vhost.h
> > index 085450c6f8..cad60ad521 100644
> > --- a/include/hw/virtio/vhost.h
> > +++ b/include/hw/virtio/vhost.h
>
> Why expose this through vhost.h? This is vhost-user specific.
>
> > @@ -100,6 +100,7 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev);
> > void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev);
> > int vhost_dev_enable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev);
> > void vhost_dev_disable_notifiers(struct vhost_dev *hdev, VirtIODevice *vdev);
> > +int vhost_setup_slave_channel(struct vhost_dev *hdev);
> >
> > /* Test and clear masked event pending status.
> > * Should be called after unmask to avoid losing events.
> > --
> > 2.24.1 (Apple Git-126)
> >
> >
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-04-18 10:43 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-17 5:14 [PATCH] resend slave fd to vhost when reconnect to vhost ni.xun.intel
2020-04-14 10:02 ` Raphael Norwitz
2020-04-18 10:42 ` xun ni
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).