qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 23/27] vhost-user: add VHOST_USER_GPU_QEMU_DBUS_LISTENER


From: marcandre . lureau
Subject: [PATCH 23/27] vhost-user: add VHOST_USER_GPU_QEMU_DBUS_LISTENER
Date: Fri, 12 Mar 2021 14:01:04 +0400

From: Marc-André Lureau <marcandre.lureau@redhat.com>

Add a new feature & message to register a QEMU DBus console listener.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 docs/interop/vhost-user.rst               | 10 ++++++++++
 include/hw/virtio/vhost-backend.h         |  2 ++
 subprojects/libvhost-user/libvhost-user.h |  5 +++++
 hw/virtio/vhost-user.c                    | 23 +++++++++++++++++++++++
 4 files changed, 40 insertions(+)

diff --git a/docs/interop/vhost-user.rst b/docs/interop/vhost-user.rst
index d6085f7045..13515fb948 100644
--- a/docs/interop/vhost-user.rst
+++ b/docs/interop/vhost-user.rst
@@ -834,6 +834,7 @@ Protocol features
   #define VHOST_USER_PROTOCOL_F_INBAND_NOTIFICATIONS 14
   #define VHOST_USER_PROTOCOL_F_CONFIGURE_MEM_SLOTS  15
   #define VHOST_USER_PROTOCOL_F_STATUS               16
+  #define VHOST_USER_PROTOCOL_F_GPU_QEMU_DBUS_LISTENER 17
 
 Master message types
 --------------------
@@ -1347,6 +1348,15 @@ Master message types
   query the backend for its device status as defined in the Virtio
   specification.
 
+``VHOST_USER_GPU_QEMU_DBUS_LISTENER``
+  :id: 41
+  :equivalent ioctl: N/A
+  :request payload: ``u32`` the scanout to listen for
+
+  When the ``VHOST_USER_PROTOCOL_F_GPU_QEMU_DBUS_LISTENER`` protocol feature 
has
+  been successfully negotiated, this message is submitted by the frontend to
+  register a graphical listener using a currently private QEMU DBus protocol.
+
 
 Slave message types
 -------------------
diff --git a/include/hw/virtio/vhost-backend.h 
b/include/hw/virtio/vhost-backend.h
index 8a6f8e2a7a..a64b92b863 100644
--- a/include/hw/virtio/vhost-backend.h
+++ b/include/hw/virtio/vhost-backend.h
@@ -190,5 +190,7 @@ int vhost_backend_handle_iotlb_msg(struct vhost_dev *dev,
                                           struct vhost_iotlb_msg *imsg);
 
 int vhost_user_gpu_set_socket(struct vhost_dev *dev, int fd);
+int vhost_user_gpu_register_dbus_listener(struct vhost_dev *dev,
+                                          uint8_t idx, int fd);
 
 #endif /* VHOST_BACKEND_H */
diff --git a/subprojects/libvhost-user/libvhost-user.h 
b/subprojects/libvhost-user/libvhost-user.h
index 3d13dfadde..d4152acde1 100644
--- a/subprojects/libvhost-user/libvhost-user.h
+++ b/subprojects/libvhost-user/libvhost-user.h
@@ -64,6 +64,8 @@ enum VhostUserProtocolFeature {
     VHOST_USER_PROTOCOL_F_INFLIGHT_SHMFD = 12,
     VHOST_USER_PROTOCOL_F_INBAND_NOTIFICATIONS = 14,
     VHOST_USER_PROTOCOL_F_CONFIGURE_MEM_SLOTS = 15,
+    VHOST_USER_PROTOCOL_F_STATUS = 16,
+    VHOST_USER_PROTOCOL_F_GPU_QEMU_DBUS_LISTENER = 17,
 
     VHOST_USER_PROTOCOL_F_MAX
 };
@@ -109,6 +111,9 @@ typedef enum VhostUserRequest {
     VHOST_USER_GET_MAX_MEM_SLOTS = 36,
     VHOST_USER_ADD_MEM_REG = 37,
     VHOST_USER_REM_MEM_REG = 38,
+    VHOST_USER_SET_STATUS = 39,
+    VHOST_USER_GET_STATUS = 40,
+    VHOST_USER_GPU_QEMU_DBUS_LISTENER = 41,
     VHOST_USER_MAX
 } VhostUserRequest;
 
diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c
index 2fdd5daf74..45758c84f9 100644
--- a/hw/virtio/vhost-user.c
+++ b/hw/virtio/vhost-user.c
@@ -79,6 +79,8 @@ enum VhostUserProtocolFeature {
     VHOST_USER_PROTOCOL_F_RESET_DEVICE = 13,
     /* Feature 14 reserved for VHOST_USER_PROTOCOL_F_INBAND_NOTIFICATIONS. */
     VHOST_USER_PROTOCOL_F_CONFIGURE_MEM_SLOTS = 15,
+    VHOST_USER_PROTOCOL_F_STATUS = 16,
+    VHOST_USER_PROTOCOL_F_GPU_QEMU_DBUS_LISTENER = 17,
     VHOST_USER_PROTOCOL_F_MAX
 };
 
@@ -124,6 +126,9 @@ typedef enum VhostUserRequest {
     VHOST_USER_GET_MAX_MEM_SLOTS = 36,
     VHOST_USER_ADD_MEM_REG = 37,
     VHOST_USER_REM_MEM_REG = 38,
+    VHOST_USER_SET_STATUS = 39,
+    VHOST_USER_GET_STATUS = 40,
+    VHOST_USER_GPU_QEMU_DBUS_LISTENER = 41,
     VHOST_USER_MAX
 } VhostUserRequest;
 
@@ -407,6 +412,24 @@ int vhost_user_gpu_set_socket(struct vhost_dev *dev, int 
fd)
     return vhost_user_write(dev, &msg, &fd, 1);
 }
 
+int vhost_user_gpu_register_dbus_listener(struct vhost_dev *dev, uint8_t idx, 
int fd)
+{
+    VhostUserMsg msg = {
+        .hdr.request = VHOST_USER_GPU_QEMU_DBUS_LISTENER,
+        .hdr.flags = VHOST_USER_VERSION,
+        .payload.u64 = idx,
+        .hdr.size = sizeof(msg.payload.u64),
+    };
+
+    if (!(dev->protocol_features &
+          (1ULL << VHOST_USER_PROTOCOL_F_GPU_QEMU_DBUS_LISTENER))) {
+        return -1;
+    }
+
+    return vhost_user_write(dev, &msg, &fd, 1);
+}
+
+
 static int vhost_user_set_log_base(struct vhost_dev *dev, uint64_t base,
                                    struct vhost_log *log)
 {
-- 
2.29.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]