From: Wei Wang <wei.w.wang@intel.com>
To: stefanha@gmail.com, marcandre.lureau@gmail.com, mst@redhat.com,
jasowang@redhat.com, pbonzini@redhat.com,
virtio-dev@lists.oasis-open.org, qemu-devel@nongnu.org
Cc: Wei Wang <wei.w.wang@intel.com>
Subject: [Qemu-devel] [PATCH v2 13/16] vhost-pci-slave: add "reset_virtio"
Date: Fri, 12 May 2017 16:35:45 +0800 [thread overview]
Message-ID: <1494578148-102868-14-git-send-email-wei.w.wang@intel.com> (raw)
In-Reply-To: <1494578148-102868-1-git-send-email-wei.w.wang@intel.com>
After the vhost-pci-net device being hotplugged to the VM, the device
uses the features bits that have been negotiated with the remote virtio
device to negotiate with the driver. If the driver accepts a subset of
the feature bits, it implies that the vhost-pci-net can only suppoort
a subset of the features supported by the remote virtio device. In this
case, the remote virtio_device will be reset, and re-start the vhost-user
protocol.
Add the "reset_virtio" field as an indicator to the slave in this case.
Signed-off-by: Wei Wang <wei.w.wang@intel.com>
---
hw/net/vhost-pci-net.c | 11 +++++++++++
hw/virtio/vhost-pci-slave.c | 15 +++++++++++++--
include/hw/virtio/vhost-pci-slave.h | 1 +
3 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/hw/net/vhost-pci-net.c b/hw/net/vhost-pci-net.c
index 1379204..a2dca50 100644
--- a/hw/net/vhost-pci-net.c
+++ b/hw/net/vhost-pci-net.c
@@ -189,8 +189,19 @@ static void vpnet_set_features(VirtIODevice *vdev, uint64_t features)
*/
static bool need_send;
int ret;
+ VhostPCIDev *vp_dev = get_vhost_pci_dev();
if (need_send) {
+ /*
+ * If the remote negotiated feature bits are not equal to the
+ * feature bits that have been negotiated between the device and
+ * driver, the remote virtio device needs a reset. Set reset_virtio
+ * to indicate to the slave about this case.
+ */
+ if (vp_dev->feature_bits != features) {
+ vp_dev->feature_bits = features;
+ vp_dev->reset_virtio = 1;
+ }
need_send = 0;
ret = vp_slave_send_feature_bits(features);
if (ret < 0) {
diff --git a/hw/virtio/vhost-pci-slave.c b/hw/virtio/vhost-pci-slave.c
index 6cc9c21..a7d3c8d 100644
--- a/hw/virtio/vhost-pci-slave.c
+++ b/hw/virtio/vhost-pci-slave.c
@@ -171,8 +171,15 @@ static void vp_slave_set_device_type(VhostUserMsg *msg)
switch (vp_dev->dev_type) {
case VIRTIO_ID_NET:
- vp_dev->feature_bits |= VHOST_PCI_FEATURE_BITS |
- VHOST_PCI_NET_FEATURE_BITS;
+ /*
+ * The setting of reset_virtio implies that the feature_bits has been
+ * remotely negotiated. So, skip adding the supported features to
+ * feature_bits in this case.
+ */
+ if (!vp_dev->reset_virtio) {
+ vp_dev->feature_bits |= VHOST_PCI_FEATURE_BITS |
+ VHOST_PCI_NET_FEATURE_BITS;
+ }
break;
default:
error_report("%s: device type %d is not supported",
@@ -400,6 +407,9 @@ static int vp_slave_set_vhost_pci(VhostUserMsg *msg)
switch (cmd) {
case VHOST_USER_SET_VHOST_PCI_START:
+ if (vp_dev->reset_virtio) {
+ vp_dev->reset_virtio = 0;
+ }
ret = vp_slave_device_create(vp_dev->dev_type);
if (ret < 0) {
return ret;
@@ -585,6 +595,7 @@ static void vp_dev_init(VhostPCIDev *vp_dev)
vp_dev->vdev = NULL;
QLIST_INIT(&vp_dev->remoteq_list);
vp_dev->remoteq_num = 0;
+ vp_dev->reset_virtio = 0;
}
int vhost_pci_slave_init(QemuOpts *opts)
diff --git a/include/hw/virtio/vhost-pci-slave.h b/include/hw/virtio/vhost-pci-slave.h
index ab21e70..594917f 100644
--- a/include/hw/virtio/vhost-pci-slave.h
+++ b/include/hw/virtio/vhost-pci-slave.h
@@ -29,6 +29,7 @@ typedef struct RemoteMem {
typedef struct VhostPCIDev {
/* Ponnter to the slave device */
VirtIODevice *vdev;
+ bool reset_virtio;
uint16_t dev_type;
uint64_t feature_bits;
/* Records the end (offset to the BAR) of the last mapped region */
--
2.7.4
next prev parent reply other threads:[~2017-05-12 8:41 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-12 8:35 [Qemu-devel] [PATCH v2 00/16] Vhost-pci for inter-VM communication Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 01/16] vhost-user: share the vhost-user protocol related structures Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 02/16] vl: add the vhost-pci-slave command line option Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 03/16] vhost-pci-slave: create a vhost-user slave to support vhost-pci Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 04/16] vhost-pci-net: add vhost-pci-net Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 05/16] vhost-pci-net-pci: add vhost-pci-net-pci Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 06/16] virtio: add inter-vm notification support Wei Wang
2017-05-15 0:21 ` [Qemu-devel] [virtio-dev] " Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 07/16] vhost-user: send device id to the slave Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 08/16] vhost-user: send guest physical address of virtqueues " Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 09/16] vhost-user: send VHOST_USER_SET_VHOST_PCI_START/STOP Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 10/16] vhost-pci-net: send the negotiated feature bits to the master Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 11/16] vhost-user: add asynchronous read for the vhost-user master Wei Wang
2017-05-12 8:51 ` Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 12/16] vhost-user: handling VHOST_USER_SET_FEATURES Wei Wang
2017-05-12 8:35 ` Wei Wang [this message]
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 14/16] vhost-pci-slave: add support to delete a vhost-pci device Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 15/16] vhost-pci-net: tell the driver that it is ready to send packets Wei Wang
2017-05-12 8:35 ` [Qemu-devel] [PATCH v2 16/16] vl: enable vhost-pci-slave Wei Wang
2017-05-12 9:30 ` [Qemu-devel] [PATCH v2 00/16] Vhost-pci for inter-VM communication no-reply
2017-05-16 15:21 ` Michael S. Tsirkin
2017-05-16 6:46 ` Jason Wang
2017-05-16 7:12 ` [Qemu-devel] [virtio-dev] " Wei Wang
2017-05-17 6:16 ` Jason Wang
2017-05-17 6:22 ` Jason Wang
2017-05-18 3:03 ` Wei Wang
2017-05-19 3:10 ` [Qemu-devel] [virtio-dev] " Jason Wang
2017-05-19 9:00 ` Wei Wang
2017-05-19 9:53 ` Jason Wang
2017-05-19 20:44 ` Michael S. Tsirkin
2017-05-23 11:09 ` Wei Wang
2017-05-23 15:15 ` Michael S. Tsirkin
2017-05-19 15:33 ` Stefan Hajnoczi
2017-05-22 2:27 ` Jason Wang
2017-05-22 11:46 ` Wang, Wei W
2017-05-23 2:08 ` Jason Wang
2017-05-23 5:47 ` Wei Wang
2017-05-23 6:32 ` Jason Wang
2017-05-23 10:48 ` Wei Wang
2017-05-24 3:24 ` Jason Wang
2017-05-24 8:31 ` Wei Wang
2017-05-25 7:59 ` Jason Wang
2017-05-25 12:01 ` Wei Wang
2017-05-25 12:22 ` Jason Wang
2017-05-25 12:31 ` [Qemu-devel] [virtio-dev] " Jason Wang
2017-05-25 17:57 ` Michael S. Tsirkin
2017-06-04 10:34 ` Wei Wang
2017-06-05 2:21 ` Michael S. Tsirkin
2017-05-25 14:35 ` [Qemu-devel] " Eric Blake
2017-05-26 4:26 ` Jason Wang
2017-05-19 16:49 ` Michael S. Tsirkin
2017-05-22 2:22 ` Jason Wang
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=1494578148-102868-14-git-send-email-wei.w.wang@intel.com \
--to=wei.w.wang@intel.com \
--cc=jasowang@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=virtio-dev@lists.oasis-open.org \
/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).