diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-backend.h index 00881a0bd4..d878d7b733 100644 --- a/include/hw/virtio/vhost-backend.h +++ b/include/hw/virtio/vhost-backend.h @@ -162,6 +162,15 @@ typedef int (*vhost_set_device_state_fd_op)(struct vhost_dev *dev, int *reply_fd, Error **errp); typedef int (*vhost_check_device_state_op)(struct vhost_dev *dev, Error **errp); +/* + * Max regions is VIRTIO_MAX_SHMEM_REGIONS, so that is the maximum + * number of memory_sizes that will be accepted. + */ +typedef int (*vhost_get_shmem_config_op)(struct vhost_dev *dev, + int *nregions, + uint64_t *memory_sizes, + Error **errp); + typedef struct VhostOps { VhostBackendType backend_type; @@ -220,6 +229,7 @@ typedef struct VhostOps { vhost_supports_device_state_op vhost_supports_device_state; vhost_set_device_state_fd_op vhost_set_device_state_fd; vhost_check_device_state_op vhost_check_device_state; + vhost_get_shmem_config_op vhost_get_shmem_config; } VhostOps; int vhost_user_gpu_set_socket(struct vhost_dev *dev, int fd); diff --git a/include/hw/virtio/vhost-user.h b/include/hw/virtio/vhost-user.h index 5ab70dab7e..06c360af18 100644 --- a/include/hw/virtio/vhost-user.h +++ b/include/hw/virtio/vhost-user.h @@ -35,6 +35,7 @@ enum VhostUserProtocolFeature { VHOST_USER_PROTOCOL_F_DEVICE_STATE = 19, VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT = 20, VHOST_USER_PROTOCOL_F_GPA_ADDRESSES = 21, + VHOST_USER_PROTOCOL_F_SHMEM = 22, VHOST_USER_PROTOCOL_F_MAX }; diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 3f745e3b67..c99cb19d88 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -82,6 +82,8 @@ typedef struct VirtQueueElement #define VIRTIO_NO_VECTOR 0xffff +#define VIRTIO_MAX_SHMEM_REGIONS 256 + /* special index value used internally for config irqs */ #define VIRTIO_CONFIG_IRQ_IDX -1 diff --git a/subprojects/libvhost-user/libvhost-user.h b/subprojects/libvhost-user/libvhost-user.h index 6a2d0f9fae..a534d70771 100644 --- a/subprojects/libvhost-user/libvhost-user.h +++ b/subprojects/libvhost-user/libvhost-user.h @@ -70,7 +70,9 @@ enum VhostUserProtocolFeature { /* Feature 17 reserved for VHOST_USER_PROTOCOL_F_XEN_MMAP. */ VHOST_USER_PROTOCOL_F_SHARED_OBJECT = 18, /* Feature 19 is reserved for VHOST_USER_PROTOCOL_F_DEVICE_STATE */ - VHOST_USER_PROTOCOL_F_SHMEM = 20, + /* Feature 20 is reserved for VHOST_USER_PROTOCOL_F_GET_VRING_BASE_INFLIGHT */ + /* Feature 21 is reserved for VHOST_USER_PROTOCOL_F_GPA_ADDRESSES */ + VHOST_USER_PROTOCOL_F_SHMEM = 22, VHOST_USER_PROTOCOL_F_MAX };