Remove the gpu-socket feature just introduced, since it doesn't work
well with cargo feature unification.
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Remove the gpu-socket feature just introduced, since it doesn't work
well with cargo feature unification.
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
relax the requirement of the trait when implementing
the `set_gpu_socket` method, make the `set_gpu_socket`
method optional, and ensure that the function `set_gpu_socket`
returns an error if the backend does not implement it.
Fixes#265
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Remove conditional compilation because when multiple crates
that are in thesame workspace set different features,
cargo feature unification already defeats the purpose of
the `gpu-socket` feature flag since cargo merges all the
feature flags specified by dependent crates into a single
set when compiling shared dependencies. for reference see:
[feature-unification](https://doc.rust-lang.org/cargo/reference/features.html#feature-unification)
Fixes: #265
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
By centralizing rust-vmm crates to workspace root, effectively reduce
places to look around when updating dependencies manually.
Signed-off-by: Ruoqing He <heruoqing@iscas.ac.cn>
It can be useful to debug the various address mappings sent to a vhost
user device backend. impl Debug for both the postcopy and non-postcopy
versions of AddrMapping.
Signed-off-by: Tyler Fanelli <tfanelli@redhat.com>
cargo recently complains about our cargo configuration file name:
$ cargo build
warning: `vhost/.cargo/config` is deprecated in favor of
`config.toml`
note: if you need to support cargo 1.38 or earlier, you can
symlink `config` to `config.toml`
As suggested, let's update the file name. We don't create the symlink
since 2021 edition is not supported by 1.38 toolchain:
$ cargo +1.38.0 build
error: failed to parse manifest at `vhost/Cargo.toml`
Caused by:
failed to parse the `edition` key
Caused by:
supported edition values are `2015` or `2018`, but `2021` is unknown
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
This release has the following changes:
1. Move the set of event_idx property from set_vring_base callback to set_features one
2. Add shared objects support
3. Add support for `VHOST_USER_GPU_SET_SOCKET`
4. Update virtio-queue version from 0.12.0 to 0.13.0 and vm-memory from 0.14.0 to 0.15.0.
Signed-off-by: Muminul Islam <muislam@microsoft.com>
This release has the following changes:
1. Bump vm-memory crate from 0.14.0 to 0.15.0
2. Add shared objects support
3. Remove support for FS_* requests
4. Add support for `VHOST_USER_GPU_SET_SOCKET`
5. Ignore unknown bits in `VHOST_USER_GET_PROTOCOL_FEATURES` response.
Signed-off-by: Muminul Islam <muislam@microsoft.com>
The latest toolchain update in rust-vmm-ci increased the coverage,
causing the following CI error:
Current code coverage (78.40%) deviates by 5.36% from the previous code
coverage 73.04%
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
The new clippy in rust-vmm-ci complain about this:
error: unnecessary use of `get(&uuid.uuid).is_some()`
--> vhost/src/vhost_user/frontend_req_handler.rs:393:36
|
393 | if self.shared_objects.get(&uuid.uuid).is_some() {
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `contains(&uuid.uuid)`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_get_then_check
= note: `-D clippy::unnecessary-get-then-check` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_get_then_check)]`
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
The new clippy in rust-vmm-ci complain about this:
error: doc list item missing indentation
--> vhost/src/vhost_user/connection.rs:305:9
|
305 | /// In other words, recvmsg() operations must not cross the packet boundary, other...
| ^
|
= help: if this is supposed to be its own paragraph, add a blank line
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#doc_lazy_continuation
= note: `-D clippy::doc-lazy-continuation` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::doc_lazy_continuation)]`
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
The new clippy in rust-vmm-ci complain about this:
error: match can be simplified with `.unwrap_or_default()`
--> vhost/src/vhost_user/connection.rs:138:20
|
138 | let rfds = match fds {
| ____________________^
139 | | Some(rfds) => rfds,
140 | | _ => &[],
141 | | };
| |_________^ help: replace it with: `fds.unwrap_or_default()`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_unwrap_or_default
= note: `-D clippy::manual-unwrap-or-default` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::manual_unwrap_or_default)]`
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
The latest toolchain update in rust-vmm-ci caused the following
error:
error: unexpected `cfg` condition value: `cargo-clippy`
--> vhost/src/vhost_user/message.rs:758:16
|
758 | #[cfg_attr(feature = "cargo-clippy", allow(clippy::useless_conversion))]
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
As suggested in [1], today is no longer needed to check the
`cargo-clippy` feature (which has been deprecated), but we can
just use `#[allow(clippy::lint_name)]`.
[1] https://blog.rust-lang.org/2024/02/28/Clippy-deprecating-feature-cargo-clippy.html
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Add methods to send cursor related messages: 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.
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Add get_protocol_features method to send
VHOST_USER_GPU_GET_PROTOCOL_FEATURES and receive the reply. Also add
a method to send SET_PROTOCOL_FEATURES.
Introduce VhostUserGpuProtocolFeatures bitmap that defines possible feature
flags.
Signed-off-by: Dorinda Bassey <dbassey@redhat.com>
Add 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>
Add a method and related struct to send VHOST_USER_GPU_UPDATE.
The data part of the message 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>
Add a get_display_info() method and the related reply 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>
Introduce 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.
The VHOST_USER_GPU_UPDATE and VHOST_USER_GPU_CURSOR_UPDATE contain image
data and are larger than the existing MAX_MSG_SIZE.
The existing MAX_MSG_SIZE wasn't really a limitation of the protocol,
just an implementation detail limitation in this crate.
Signed-off-by: Matej Hrica <mhrica@redhat.com>
The VHOST_USER_GPU_SET_SOCKET is only handled when the feature gpu-socket
is enabled. This also introduces a GpuBackend for handling comunication
over the socket.
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>
Move the enum_value macro into vhost_user module and make it public within
this module. This will be used in the next commit for defining gpu message
enum.
Signed-off-by: Matej Hrica <mhrica@redhat.com>
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>
virtiofsd 1.11.0 added support for VHOST_USER_PROTOCOL_F_DEVICE_STATE.
Upgrading virtiofsd meant that the latest released version of Cloud
Hypervisor (39.0) was no longer able to communicate with it, because
rather than just ignoring the unsupported feature, it got an
unrecoverable "invalid message" error. This demonstrates that it's
better for frontends to just ignore offers of unsupported features.
If the backend requires some feature, it'll get a chance to know that
when we send VHOST_USER_SET_PROTOCOL_FEATURES anyway.
Signed-off-by: Alyssa Ross <hi@alyssa.is>
Since these non-standard backend request
message types are confirmed not to be used
anymore, let's just remove them.
```
pub enum BackendReq {
...
/// Virtio-fs draft: map file content into the window.
FS_MAP = 100,
/// Virtio-fs draft: unmap file content from the window.
FS_UNMAP = 1001,
/// Virtio-fs draft: sync file content.
FS_SYNC = 1002,
/// Virtio-fs draft: perform a read/write from an fd directly to GPA.
FS_IO = 1003,
...
}
```
Closes: #213
Signed-off-by: Albert Esteve <aesteve@redhat.com>
Check for VHOST_USER_PROTOCOL_F_SHARED_OBJECT flag
before allowing the backend to send SHARED_OBJECT_*
requests.
If it does have negotiated the protocol feature,
avoid sending the message and return error code
(i.e., !=0).
Signed-off-by: Albert Esteve <aesteve@redhat.com>
Add SHARED_OBJECT_* vhost-user request
IDs to align with standard. Implement
backend functions to send these
requests.
Add SHARED_OBJECT protocol feature.
Add GET_SHARED_OBJECT to the frontend
requests (not implemented, this is just to
have the placeholder and align with current
standard).
Signed-off-by: Albert Esteve <aesteve@redhat.com>
Assertion fails on the frontend thread in tests
can go unnoticed.
To avoid that the main thread finishes before
and solve this issue, let's `join()` the thread
at the end of the test.
Signed-off-by: Albert Esteve <aesteve@redhat.com>
FS_* vhost-user backend request messages in
BackendReq enum did not make it into the
standard yet. Actually, currently there
are already SHARED_OBJECT_* messages that
use the message type IDs for FS_* types.
To fix this and avoid the issue for future
message IDs, let's move FS_* types further
away and prevent collision to occur.
This way we only need to change it once.
Signed-off-by: Albert Esteve <aesteve@redhat.com>
A frontend can skip the call to set_vring_base, assuming the ring will
be initialized at 0. If that frontend acknowledge EVENT_IDX vring and
VhostUserHandler backend will never know they need to use event idx.
Move the features configuration of the vring and the backend to set_features method.
Signed-off-by: Eugenio Pérez <eperezma@redhat.com>