mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
vhost-vsock: add virtio sockets device
Implement the new virtio sockets device for host<->guest communication using the Sockets API. Most of the work is done in a vhost kernel driver so that virtio-vsock can hook into the AF_VSOCK address family. The QEMU vhost-vsock device handles configuration and live migration while the rx/tx happens in the vhost_vsock.ko Linux kernel driver. The vsock device must be given a CID (host-wide unique address): # qemu -device vhost-vsock-pci,id=vhost-vsock-pci0,guest-cid=3 ... For more information see: http://qemu-project.org/Features/VirtioVsock [Endianness fixes and virtio-ccw support by Claudio Imbrenda <imbrenda@linux.vnet.ibm.com>] Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> [mst: rebase to master] Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
947b205fdb
commit
fc0b9b0e1c
11 changed files with 631 additions and 0 deletions
|
@ -1658,6 +1658,57 @@ static const TypeInfo virtio_ccw_9p_info = {
|
|||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_VHOST_VSOCK
|
||||
|
||||
static Property vhost_vsock_ccw_properties[] = {
|
||||
DEFINE_PROP_CSS_DEV_ID("devno", VirtioCcwDevice, parent_obj.bus_id),
|
||||
DEFINE_PROP_UINT32("max_revision", VirtioCcwDevice, max_rev,
|
||||
VIRTIO_CCW_MAX_REV),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
static void vhost_vsock_ccw_realize(VirtioCcwDevice *ccw_dev, Error **errp)
|
||||
{
|
||||
VHostVSockCCWState *dev = VHOST_VSOCK_CCW(ccw_dev);
|
||||
DeviceState *vdev = DEVICE(&dev->vdev);
|
||||
Error *err = NULL;
|
||||
|
||||
qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
|
||||
object_property_set_bool(OBJECT(vdev), true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
}
|
||||
}
|
||||
|
||||
static void vhost_vsock_ccw_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
|
||||
|
||||
k->realize = vhost_vsock_ccw_realize;
|
||||
k->exit = virtio_ccw_exit;
|
||||
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
|
||||
dc->props = vhost_vsock_ccw_properties;
|
||||
dc->reset = virtio_ccw_reset;
|
||||
}
|
||||
|
||||
static void vhost_vsock_ccw_instance_init(Object *obj)
|
||||
{
|
||||
VHostVSockCCWState *dev = VHOST_VSOCK_CCW(obj);
|
||||
|
||||
virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
|
||||
TYPE_VHOST_VSOCK);
|
||||
}
|
||||
|
||||
static const TypeInfo vhost_vsock_ccw_info = {
|
||||
.name = TYPE_VHOST_VSOCK_CCW,
|
||||
.parent = TYPE_VIRTIO_CCW_DEVICE,
|
||||
.instance_size = sizeof(VHostVSockCCWState),
|
||||
.instance_init = vhost_vsock_ccw_instance_init,
|
||||
.class_init = vhost_vsock_ccw_class_init,
|
||||
};
|
||||
#endif
|
||||
|
||||
static void virtio_ccw_register(void)
|
||||
{
|
||||
type_register_static(&virtio_ccw_bus_info);
|
||||
|
@ -1674,6 +1725,9 @@ static void virtio_ccw_register(void)
|
|||
#ifdef CONFIG_VIRTFS
|
||||
type_register_static(&virtio_ccw_9p_info);
|
||||
#endif
|
||||
#ifdef CONFIG_VHOST_VSOCK
|
||||
type_register_static(&vhost_vsock_ccw_info);
|
||||
#endif
|
||||
}
|
||||
|
||||
type_init(virtio_ccw_register)
|
||||
|
|
|
@ -23,6 +23,9 @@
|
|||
#include "hw/virtio/virtio-balloon.h"
|
||||
#include "hw/virtio/virtio-rng.h"
|
||||
#include "hw/virtio/virtio-bus.h"
|
||||
#ifdef CONFIG_VHOST_VSOCK
|
||||
#include "hw/virtio/vhost-vsock.h"
|
||||
#endif /* CONFIG_VHOST_VSOCK */
|
||||
|
||||
#include "hw/s390x/s390_flic.h"
|
||||
#include "hw/s390x/css.h"
|
||||
|
@ -197,4 +200,16 @@ typedef struct V9fsCCWState {
|
|||
|
||||
#endif /* CONFIG_VIRTFS */
|
||||
|
||||
#ifdef CONFIG_VHOST_VSOCK
|
||||
#define TYPE_VHOST_VSOCK_CCW "vhost-vsock-ccw"
|
||||
#define VHOST_VSOCK_CCW(obj) \
|
||||
OBJECT_CHECK(VHostVSockCCWState, (obj), TYPE_VHOST_VSOCK_CCW)
|
||||
|
||||
typedef struct VHostVSockCCWState {
|
||||
VirtioCcwDevice parent_obj;
|
||||
VHostVSock vdev;
|
||||
} VHostVSockCCWState;
|
||||
|
||||
#endif /* CONFIG_VHOST_VSOCK */
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue