[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 10/16] vhost-pci-net: send the negotiated feature
From: |
Wei Wang |
Subject: |
[Qemu-devel] [PATCH v2 10/16] vhost-pci-net: send the negotiated feature bits to the master |
Date: |
Fri, 12 May 2017 16:35:42 +0800 |
The slave device actively sends the negotiated feature bits to
the master.
Signed-off-by: Wei Wang <address@hidden>
---
hw/net/vhost-pci-net.c | 18 ++++++++++++++++++
hw/virtio/vhost-pci-slave.c | 22 ++++++++++++++++++++++
include/hw/virtio/vhost-pci-slave.h | 2 ++
3 files changed, 42 insertions(+)
diff --git a/hw/net/vhost-pci-net.c b/hw/net/vhost-pci-net.c
index 0235511..1379204 100644
--- a/hw/net/vhost-pci-net.c
+++ b/hw/net/vhost-pci-net.c
@@ -181,6 +181,24 @@ static uint64_t vpnet_get_features(VirtIODevice *vdev,
uint64_t features,
static void vpnet_set_features(VirtIODevice *vdev, uint64_t features)
{
+ /*
+ * The implementation split the write of the 64-bit "features" into 2
+ * 32-bit writes, so the function is called twice. need_send is used to
+ * detect the second write which finishes the write of "features", and
+ * need to send to the remote device.
+ */
+ static bool need_send;
+ int ret;
+
+ if (need_send) {
+ need_send = 0;
+ ret = vp_slave_send_feature_bits(features);
+ if (ret < 0) {
+ error_report("%s failed to send feature bits", __func__);
+ }
+ } else {
+ need_send = 1;
+ }
}
static void vpnet_get_config(VirtIODevice *vdev, uint8_t *config)
diff --git a/hw/virtio/vhost-pci-slave.c b/hw/virtio/vhost-pci-slave.c
index ab1d06b..6cc9c21 100644
--- a/hw/virtio/vhost-pci-slave.c
+++ b/hw/virtio/vhost-pci-slave.c
@@ -122,6 +122,28 @@ static void vp_slave_set_features(VhostUserMsg *msg)
~(1 << VHOST_USER_F_PROTOCOL_FEATURES);
}
+static int vp_slave_send_u64(int request, uint64_t u64)
+{
+ VhostUserMsg msg = {
+ .request = request,
+ .flags = VHOST_USER_VERSION,
+ .payload.u64 = u64,
+ .size = sizeof(msg.payload.u64),
+ };
+
+ if (vp_slave_write(&vp_slave->chr_be, &msg) < 0) {
+ error_report("%s: failed to send", __func__);
+ return -1;
+ }
+
+ return 0;
+}
+
+int vp_slave_send_feature_bits(uint64_t features)
+{
+ return vp_slave_send_u64(VHOST_USER_SET_FEATURES, features);
+}
+
static void vp_slave_event(void *opaque, int event)
{
switch (event) {
diff --git a/include/hw/virtio/vhost-pci-slave.h
b/include/hw/virtio/vhost-pci-slave.h
index b5bf02a..ab21e70 100644
--- a/include/hw/virtio/vhost-pci-slave.h
+++ b/include/hw/virtio/vhost-pci-slave.h
@@ -56,6 +56,8 @@ extern int vhost_pci_slave_init(QemuOpts *opts);
extern int vhost_pci_slave_cleanup(void);
+extern int vp_slave_send_feature_bits(uint64_t features);
+
VhostPCIDev *get_vhost_pci_dev(void);
#endif
--
2.7.4
- [Qemu-devel] [PATCH v2 01/16] vhost-user: share the vhost-user protocol related structures, (continued)
- [Qemu-devel] [PATCH v2 01/16] vhost-user: share the vhost-user protocol related structures, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 02/16] vl: add the vhost-pci-slave command line option, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 03/16] vhost-pci-slave: create a vhost-user slave to support vhost-pci, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 04/16] vhost-pci-net: add vhost-pci-net, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 07/16] vhost-user: send device id to the slave, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 05/16] vhost-pci-net-pci: add vhost-pci-net-pci, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 06/16] virtio: add inter-vm notification support, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 08/16] vhost-user: send guest physical address of virtqueues to the slave, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 09/16] vhost-user: send VHOST_USER_SET_VHOST_PCI_START/STOP, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 10/16] vhost-pci-net: send the negotiated feature bits to the master,
Wei Wang <=
- [Qemu-devel] [PATCH v2 11/16] vhost-user: add asynchronous read for the vhost-user master, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 12/16] vhost-user: handling VHOST_USER_SET_FEATURES, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 13/16] vhost-pci-slave: add "reset_virtio", Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 14/16] vhost-pci-slave: add support to delete a vhost-pci device, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 15/16] vhost-pci-net: tell the driver that it is ready to send packets, Wei Wang, 2017/05/12
- [Qemu-devel] [PATCH v2 16/16] vl: enable vhost-pci-slave, Wei Wang, 2017/05/12
- Re: [Qemu-devel] [PATCH v2 00/16] Vhost-pci for inter-VM communication, no-reply, 2017/05/12
- Re: [Qemu-devel] [PATCH v2 00/16] Vhost-pci for inter-VM communication, Jason Wang, 2017/05/16