From: Matej Hrica <[email protected]> Add a 'hostmem' property to the vhost-user-gpu which enables the shared memory in the parent object.
Register a container MR in the shmem_list for SHMEM_MAP/UNMAP operations. A container MR is used so that SHMEM_MAP FD-backed subregions each get their own KVM memory slot with the correct backing fd. Signed-off-by: Matej Hrica <[email protected]> Signed-off-by: Dorinda Bassey <[email protected]> --- hw/display/vhost-user-gpu.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c index 06549c98e07..7e4580aa895 100644 --- a/hw/display/vhost-user-gpu.c +++ b/hw/display/vhost-user-gpu.c @@ -655,6 +655,21 @@ vhost_user_gpu_device_realize(DeviceState *qdev, Error **errp) } g->vhost_gpu_fd = -1; + + /* + * If shared memory is enabled, register the hostmem region for + * SHMEM_MAP/UNMAP operations. + */ + if (virtio_gpu_hostmem_enabled(g->parent_obj.conf)) { + VirtioSharedMemory *shmem = g_new0(VirtioSharedMemory, 1); + shmem->shmid = VIRTIO_GPU_SHM_ID_HOST_VISIBLE; + memory_region_init(&shmem->mr, OBJECT(vdev), + "vhost-user-gpu-shmem", + g->parent_obj.conf.hostmem); + memory_region_add_subregion(&g->parent_obj.hostmem, 0, &shmem->mr); + QTAILQ_INIT(&shmem->mmaps); + QSIMPLEQ_INSERT_TAIL(&vdev->shmem_list, shmem, entry); + } } static struct vhost_dev *vhost_user_gpu_get_vhost(VirtIODevice *vdev) @@ -665,6 +680,7 @@ static struct vhost_dev *vhost_user_gpu_get_vhost(VirtIODevice *vdev) static const Property vhost_user_gpu_properties[] = { VIRTIO_GPU_BASE_PROPERTIES(VhostUserGPU, parent_obj.conf), + DEFINE_PROP_SIZE("hostmem", VhostUserGPU, parent_obj.conf.hostmem, 0), }; static void -- 2.52.0
