See vhost-user.txt protocol documentation for details. Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- contrib/libvhost-user/libvhost-user.h | 1 + include/hw/virtio/vhost-backend.h | 1 + hw/virtio/vhost-user.c | 15 +++++++++++++++ docs/interop/vhost-user.txt | 8 ++++++++ 4 files changed, 25 insertions(+)
diff --git a/contrib/libvhost-user/libvhost-user.h b/contrib/libvhost-user/libvhost-user.h index 42e227cce6..9f30e05bd1 100644 --- a/contrib/libvhost-user/libvhost-user.h +++ b/contrib/libvhost-user/libvhost-user.h @@ -93,6 +93,7 @@ typedef enum VhostUserRequest { VHOST_USER_POSTCOPY_END = 30, VHOST_USER_INPUT_GET_CONFIG = 31, VHOST_USER_GPU_SET_SOCKET = 32, + VHOST_USER_GPU_GET_NUM_CAPSETS = 33, VHOST_USER_MAX } VhostUserRequest; diff --git a/include/hw/virtio/vhost-backend.h b/include/hw/virtio/vhost-backend.h index daf9180c33..730e24c33b 100644 --- a/include/hw/virtio/vhost-backend.h +++ b/include/hw/virtio/vhost-backend.h @@ -164,5 +164,6 @@ int vhost_backend_handle_iotlb_msg(struct vhost_dev *dev, int vhost_user_input_get_config(struct vhost_dev *dev, struct virtio_input_config **config); int vhost_user_gpu_set_socket(struct vhost_dev *dev, int fd); +int vhost_user_gpu_get_num_capsets(struct vhost_dev *dev, uint32_t *num); #endif /* VHOST_BACKEND_H */ diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c index 8c1a1742b0..bfec6528f2 100644 --- a/hw/virtio/vhost-user.c +++ b/hw/virtio/vhost-user.c @@ -91,6 +91,7 @@ typedef enum VhostUserRequest { VHOST_USER_POSTCOPY_END = 30, VHOST_USER_INPUT_GET_CONFIG = 31, VHOST_USER_GPU_SET_SOCKET = 32, + VHOST_USER_GPU_GET_NUM_CAPSETS = 33, VHOST_USER_MAX } VhostUserRequest; @@ -922,6 +923,20 @@ static int vhost_user_get_u64(struct vhost_dev *dev, int request, uint64_t *u64) return 0; } +int vhost_user_gpu_get_num_capsets(struct vhost_dev *dev, uint32_t *num) +{ + uint64_t u64; + + if (vhost_user_get_u64(dev, VHOST_USER_GPU_GET_NUM_CAPSETS, &u64) < 0) { + return -1; + } + if (u64 > INT32_MAX) { + return -1; + } + *num = u64; + return 0; +} + static int vhost_user_get_features(struct vhost_dev *dev, uint64_t *features) { return vhost_user_get_u64(dev, VHOST_USER_GET_FEATURES, features); diff --git a/docs/interop/vhost-user.txt b/docs/interop/vhost-user.txt index c4c063a8c0..ba5e37d714 100644 --- a/docs/interop/vhost-user.txt +++ b/docs/interop/vhost-user.txt @@ -777,6 +777,14 @@ Master message types ancillary data. The GPU protocol is used to inform the master of rendering state and updates. See vhost-user-gpu.rst for details. + * VHOST_USER_GPU_GET_NUM_CAPSETS + Id: 33 + Master payload: N/A + Slave payload: u64 + + Get the virtio-gpu 'num_capsets' config value. For non-virgl + rendering, the value can be 0. + Slave message types ------------------- -- 2.18.0.129.ge3331758f1