Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gpu socket final2 #7

Draft
wants to merge 15 commits into
base: main
Choose a base branch
from
Draft

Gpu socket final2 #7

wants to merge 15 commits into from

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 <[email protected]>
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 <[email protected]>
@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 <[email protected]>
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 <[email protected]>
Signed-off-by: Matej Hrica <[email protected]>
Adds a method and related structs to send VHOST_USER_GPU_GET_EDID and
receive the reply.

Signed-off-by: Dorinda Bassey <[email protected]>
Adds a method that sends VHOST_USER_GPU_SCANOUT and doesn't wait for
a reply.

Signed-off-by: Dorinda Bassey <[email protected]>
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 <[email protected]>
Signed-off-by: Matej Hrica <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
Adds a method and related struct to send the VHOST_USER_GPU_DMABUF_SCANOUT2
messege.

Signed-off-by: Matej Hrica <[email protected]>
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 <[email protected]>
@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 <[email protected]>
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.

1 participant