Skip to content

Conversation

@mtjhrc
Copy link
Owner

@mtjhrc mtjhrc commented May 15, 2024

No description provided.

The Endpoint was previusly generic only over the Request.
This commit allows Endpoint to be used with a protocol with a slightly
different header such as the QEMU GPU protocol on the socket from
VHOST_USER_GPU_SET_SOCKET.
https://www.qemu.org/docs/master/interop/vhost-user-gpu.html

Signed-off-by: Matej Hrica <mhrica@redhat.com>
This commit adds the basic definitions of GPU commands on the socket
obtained from VHOST_USER_GPU_SET_SOCKET. This also introduces a new
feature flag `gpu-socket` in the vhost crate.

Signed-off-by: Matej Hrica <mhrica@redhat.com>
@mtjhrc mtjhrc force-pushed the gpu-socket-final2 branch from 159f51e to c61ae84 Compare May 15, 2024 09:37
mtjhrc and others added 12 commits May 15, 2024 11:38
The VHOST_USER_GPU_SET_SOCKET is only handled when the feature
gpu-set-socket is enabled. This also introduces a GpuBackend
for handling comunication over the socket.
Signed-off-by: Matej Hrica <mhrica@redhat.com>
The VHOST_USER_GPU_UPDATE and VHOST_USER_GPU_CURSOR_UPDATE contain image
data and are larger than MAX_MSG_SIZE.

Current value of MAX_MSG_SIZE isn't really a limitation of the protocol,
just an implementation detail limitation in this crate.

This commit introduces another constant MAX_MSG_SIZE that is part of
the MsgHeader trait. For now this is only used for sending messages.
Consider using the more specific trait constant everywhere.
Adds a method and related structs to send VHOST_USER_GPU_GET_DISPLAY_INFO
and receive the reply.

Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Signed-off-by: Matej Hrica <mhrica@redhat.com>
Adds a method and related structs to send VHOST_USER_GPU_GET_EDID and
receive the reply.

Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Adds a method that sends VHOST_USER_GPU_SCANOUT and doesn't wait for
a reply.

Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Adds a method and related struct to send VHOST_USER_GPU_UPDATE.

The data part of the messege is not part of the struct like sugested by
the spec but a separate argument to update_scanout. This is necessary
because of limitations of having an unsized array inside of struct in Rust.
But this aproach seems preferable anyway, because it allows the consumer of
the crate to store the array in a diferent location than the struct.

Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Signed-off-by: Matej Hrica <mhrica@redhat.com>
Adds methods and related structs to send the VHOST_USER_GPU_DMABUF_SCANOUT
and VHOST_USER_GPU_DMABUF_UPDATE update messages.

Signed-off-by: Matej Hrica <mhrica@redhat.com>
Adds a method to send VHOST_USER_GPU_GET_PROTOCOL_FEATURES and receive
the reply. Also adds a method to send SET_PROTOCOL_FEATURES.
The VhostUserGpuProtocolFeatures bitmap defines possible feature flags.

Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Adds methods to send cursor related messeges: VHOST_USER_GPU_CURSOR_POS,
VHOST_USER_GPU_CURSOR_POS_HIDE and VHOST_USER_GPU_CURSOR_UPDATE.

VhostUserGpuCursorUpdate's `data` field is passed as a separate argument
into cursor_update method. The type is also an u8 array instead of u32
array like in the spec. Having the type be u8 array makes it easier to work
with the data without unsafe code for the consumer of this crate. Having it
be a separate argument is useful, because the user of the method doesn't
have to copy the array into a struct. They just have to provide a reference
to it.

Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Adds a method and related struct to send the VHOST_USER_GPU_DMABUF_SCANOUT2
messege.

Signed-off-by: Matej Hrica <mhrica@redhat.com>
The tests just cover the message sending implementation, but not the actual
public methods, as these just call the tested methods with specific
arguments.

Signed-off-by: Matej Hrica <mhrica@redhat.com>
Signed-off-by: Matej Hrica <mhrica@redhat.com>
@mtjhrc mtjhrc force-pushed the gpu-socket-final2 branch from c61ae84 to 372453b Compare May 15, 2024 09:44
Compile and test with `gpu-socket` feature enabled.

Signed-off-by: Matej Hrica <mhrica@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants