forked from rust-vmm/vhost
-
Notifications
You must be signed in to change notification settings - Fork 0
Shmem #8
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
Draft
mtjhrc
wants to merge
51
commits into
main
Choose a base branch
from
shmem
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `09aef99` to `2d733b0`. - [Commits](rust-vmm/rust-vmm-ci@09aef99...2d733b0) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `2d733b0` to `8ae03e5`. - [Commits](rust-vmm/rust-vmm-ci@2d733b0...8ae03e5) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Our CI is being upgraded to Rust 1.85 and this will produce new warnings
from clippy like this one:
error: this `map_or` can be simplified
--> vhost/src/vhost_kern/mod.rs:79:12
|
79 | if GuestAddress(config_data.desc_table_addr)
| ____________^
80 | | .checked_add(desc_table_size)
81 | | .map_or(true, |v| !m.address_in_range(v))
| |_____________________________________________________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or
= note: `-D clippy::unnecessary-map-or` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(clippy::unnecessary_map_or)]`
help: use is_none_or instead
|
79 ~ if GuestAddress(config_data.desc_table_addr)
80 + .checked_add(desc_table_size).is_none_or(|v| !m.address_in_range(v))
|
Apply the advice using `cargo clippy --fix`.
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `8ae03e5` to `c3ef897`. - [Commits](rust-vmm/rust-vmm-ci@8ae03e5...c3ef897) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
This resolves a rustdoc warning, and makes the links appear as links in the rendered documentation. Signed-off-by: Alyssa Ross <hi@alyssa.is>
Signed-off-by: Alyssa Ross <hi@alyssa.is>
For use in QEMU, I would like GuestMemoryRegion to return a BitmapSlice
instead of a &Bitmap. This adds some flexibility that QEMU needs in
order to support a single global dirty bitmap that is sliced by the
various GuestMemoryRegions.
However, this removes access to the BitmapReplace trait, because it is of
course not possible to replace a slice of the bitmap only. Fortunately,
vhost is built around the GM<> type alias, which has a pluggable bitmap
type but hardcodes the backend:
type GM<B> = GuestMemoryAtomic<GuestMemoryMmap<B>>;
and therefore `region` is known to be a GuestRegionMmap. Adding a
single dereference of the GuestRegionMmap returns the MmapRegion to
which the bitmap is attached, thus calling MmapRegion::bitmap() instead
of <GuestRegionMmap as GuestRegion>::bitmap().
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Update vm-sys-util crate from 0.12.1 to 0.14.0. Also, bump vm-memory to latest 0.16.2 which uses that vmm-sys-util version. Signed-off-by: Babis Chalios <bchalios@amazon.es>
Updates the requirements on [nix](https://github.com/nix-rust/nix) to permit the latest version. Updates `nix` to 0.30.1 - [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md) - [Commits](nix-rust/nix@v0.29.0...v0.30.1) --- updated-dependencies: - dependency-name: nix dependency-version: 0.30.1 dependency-type: direct:production dependency-group: vhost ... Signed-off-by: dependabot[bot] <support@github.com> [SG] adapted the memfd_create call to comply with the new nix v0.30 interface Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
I observed hangs in the following situation when using Cloud Hypervisor with virtiofsd: 1. Start virtiofsd 2. Start Cloud Hypervisor instance 1, connected to virtiofsd. 3. Start Cloud Hypervisor instance 2, waiting for migration. 4. Migrate VM from Cloud Hypervisor instance 1 to 2. 5. Start virtiofsd again. The hangs happened because Cloud Hypervisor remembered, as part of the migration data, which vhost-user protocol features the backend for its fs device supported. Instance 2 therefore never sent GET_PROTOCOL_FEATURES to the second invocation of virtiofsd. This should work, but it didn't, because update_reply_ack_flag() checked whether self.protocol_features contained GET_PROTOCOL_FEATURES, but self.protocol_features is only filled in when GET_PROTOCOL_FEATURES is called. As a result, Cloud Hypervisor expected a reply that virtiofsd would never send. Since REPLY_ACK is handled entirely by the vhost-user library, and not by the backend, there's no need to ask the backend whether it supports REPLY_ACK in the first place, so we can just drop the check for that from update_reply_ack_flag(). We know that we always support it, so we just need to check whether the backend has acked it. This fixes the hang described above. Since we will now always reply if the backend acks the feature, REPLY_ACK is now always included in the set of features returned by GET_PROTOCOL_FEATURES, just like with XEN_MMAP (when enabled). Signed-off-by: Alyssa Ross <hi@alyssa.is>
This release: 1. Adds support for `VHOST_USER_GET_SHARED_OBJECT` 2. Fixes the reply header for an error case in POSTCOPY_ADVISE 3. `VHOST_USER_PROTOCOL_F_REPLY_ACK` is now always supported by backends 4. Bumps vm-memory to 0.16.2 and vmm-sys-util to 0.14.0 Signed-off-by: Babis Chalios <bchalios@amazon.es>
This release 1. Adds support for `VHOST_USER_GET_SHARED_OBJECT` 2. Updates to vhost to 0.14.0, vm-memory 0.16.2 and vmm-sys-util to 0.14.0 Signed-off-by: Babis Chalios <bchalios@amazon.es>
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `c3ef897` to `aa2f8a9`. - [Commits](rust-vmm/rust-vmm-ci@c3ef897...aa2f8a9) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-version: aa2f8a90e46533de8a58f19cd0c417de856d4437 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Bump virtio-queue from v0.14.0 to v0.15.0 Bump virtio-bindings from v0.2.1 to v0.2.5 Signed-off-by: Jinank Jain <jinankjain@microsoft.com>
This release upgraded virtio-queue and virtio-bindings to latest released version. Signed-off-by: Jinank Jain <jinankjain@microsoft.com>
There is a new warning reported by nightly compiler about mismatched lifetime syntaxes. Add the missing lifetime where ever required. Signed-off-by: Jinank Jain <jinankjain@microsoft.com>
There are several typos when using "truncate" on some messages and on the error type \`FileTruncateError\`. Signed-off-by: Nelson Wong <wong.nel@protonmail.com>
Building docs (as on docs.rs) has been broken since 8ee8739. This commit introduces POSTCOPY and made this feature mutually exclusive with xen. As docs are build for all features the corresponding check will be triggered and the docs can not be built. This patch extends the check to allow both "postcopy" and "xen" to be enabled when building docs. Signed-off-by: Christian Speich <christian@spei.ch>
The link to vhost-user protocol is 404, replace it with the latest one. Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
Bump virtio-queue from v0.16.0 to v0.16.0 Bump virtio-bindings from v0.2.5 to v0.2.6 Signed-off-by: Jinank Jain <jinankjain@microsoft.com>
This release upgraded virtio-queue and virtio-bindings to latest released version. Signed-off-by: Jinank Jain <jinankjain@microsoft.com>
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `aa2f8a9` to `af54708`. - [Commits](rust-vmm/rust-vmm-ci@aa2f8a9...af54708) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-version: af547082938b44b69b6f1bb44c1af8b405d7650c dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
clippy in the new rust toolchain (1.87) in our CI is highlighting something to improve. Mostly done with `cargo clippy --fix` + silence `clippy::match_overlapping_arm` since EWOULDBLOCK equals to EGAIN on linux. Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Help out with PR reviews and various maintenance tasks. Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
It was already possible to do this as follows:
unsafe { Listener::from_raw_fd(listener.into_raw_fd()) }
This just factors the From implementation out of the FromRawFd
implementation so it's possible to do the conversion without an
unnecessary unsafe in application code.
Signed-off-by: Alyssa Ross <hi@alyssa.is>
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `af54708` to `0b1cb86`. - [Commits](rust-vmm/rust-vmm-ci@af54708...0b1cb86) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-version: 0b1cb86353cc093f2e17d7e9f6820de80a6c274d dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
rust 1.89 made the "mismatched lifetime syntaxes" lint to show a warning by default: https://blog.rust-lang.org/2025/08/07/Rust-1.89.0/#mismatched-lifetime-syntaxes-lint Add a placeholder lifetime to `vhost_user_backend::vring::VringStateMutGuard` to be explicit. Signed-off-by: German Maglione <gmaglione@redhat.com>
Update to v0.15.0 which supports sock_ctrl_msg on POSIX and adds a cross platform event notification that uses EventFd when available or pipe(). Because sock_ctrl_msg modifies the recv_with_fds, we need to modify the test in vhost/src/vhost-user/connection.rs at the same time Signed-off-by: Wenyu Huang <huangwenyuu@outlook.com>
Eventfd is Linux-specific. To support more platforms, we replace it with the EventNotifier/EventConsumer abstractions. EventSender and EventReceiver are wrappers that encapsulate eventfd functionality Use pipefd to replace eventfd in the test. Signed-off-by: Wenyu Huang <huangwenyuu@outlook.com>
--- updated-dependencies: - dependency-name: userfaultfd dependency-version: 0.9.0 dependency-type: direct:production dependency-group: vhost ... Signed-off-by: dependabot[bot] <support@github.com>
warning: hiding a lifetime that's elided elsewhere is confusing
--> vhost/src/vhost_user/frontend.rs:131:13
|
131 | fn node(&self) -> MutexGuard<FrontendInternal> {
| ^^^^^ ---------------------------- the same lifetime is hidden here
| |
| the lifetime is elided here
|
= help: the same lifetime is referred to in inconsistent ways, making the signature confusing
= note: `#[warn(mismatched_lifetime_syntaxes)]` on by default
help: use `'_` for type paths
|
131 | fn node(&self) -> MutexGuard<'_, FrontendInternal> {
| +++
Signed-off-by: Alyssa Ross <hi@alyssa.is>
The vhost-device devices all call VhostUserDaemon::serve in a loop, to handle reconnections. This is not ideal, because a new listener is created each loop iteration, which means that each time, the old socket is unlinked and a new one is created. This means that there's a potential race where a frontend attempts to connect to the backend before the new socket is created. A more robust way to achieve this would be to have the devices create their own listeners, and pass the same one to VhostUserDaemon::start on each loop iteration, instead of letting VhostUserDaemon::serve create it repeatedly. This was not previously possible though, because VhostUserDaemon::start consumed the listener, even though it didn't need to. Because it's now possible to call VhostUserDaemon::start multiple times with the same socket, I've removed the TODO about handling reconnection. Signed-off-by: Alyssa Ross <hi@alyssa.is>
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `fc4584d` to `c0f5d4c`. - [Commits](rust-vmm/rust-vmm-ci@fc4584d...c0f5d4c) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-version: c0f5d4c3f58094c90ea12200f513b21e457983bd dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `c0f5d4c` to `3e24835`. - [Commits](rust-vmm/rust-vmm-ci@c0f5d4c...3e24835) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-version: 3e248353468a9aa0efa844d39eecf24e1dbdc3f3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
pick up the commit that fixed the typo in the environment variable for the rust doc test Signed-off-by: Patrick Roy <patrick.roy@linux.dev>
By using ioctl_with_ref() instead of ioctl_with_mut_ref(), we attempted to mutate through an immutable reference, so rustc was well within its rights to assume that `vring_state` does not change across the ioctl call, and hence optimize the return value of the function to simply be the value that `vring_state.num` was initialized to (which is 0). Signed-off-by: Patrick Roy <patrick.roy@linux.dev>
Signed-off-by: Patrick Roy <patrick.roy@linux.dev>
Set it up so that it does not try to combine the xen and postcopy features, and also ignore the test-only test_utils feature. Signed-off-by: Patrick Roy <patrick.roy@linux.dev>
Now that rust-vmm-ci uses cargo-all-features, we can deal with the incompatiblity of the xen and postcopy features by simply marking them as incompatible in Cargo.toml, instead of needing to define separate CI steps. note: this commit currently symlinks rust-vmm-ci-tests.json to rust-vmm-ci/.buildkite/test_descriptions.json, and removes all tests from custom-tests.json. This is to illustrate that the new setup works without changes to the buildkite pipeline. Once that is confirmed, the pipeline should be updated to just use the rust-vmm-ci test generaiton routine, and the entire .buildkite directory can be removed. Signed-off-by: Patrick Roy <patrick.roy@linux.dev>
Introduce a dummy feature to hack around `cargo doc --all-features` always hitting the compile_error!(...) in vhost/src/lib.rs about incompatible features. This is happening because when documenting vhost-user-backend, cargo does not pass --cfg doc to dependencies, meaning the cfg(not(doc)) attribute that is supposed to eliminate this compile_error!() invokation when building docs does not actually trigger. Hence cargo doc fails. Introduce a custom cfg, which we tell docs.rs to set during documentation build, which disables the compile_error!(). Our CI also sets this flag for the rustdoc step (via an ugly `sed` in the pipeline definition). This cfg is also set by rust-vmm-ci for the cargo doc step. Note that we need both cfg(not(doc)) and cfg(not(RUTSDOC_disable_feature_compat_errors)), because lib.rs gets processed twice, onces by rustc (where the --cfg is passed via RUSTFLAGS), and once by rustdoc itself, where RUSTFLAGS are ignored, and instead the cfg(doc) macro comes into play (but rustdoc is only ran on the crate for which we are actually generating docs, not the dependencies). Signed-off-by: Patrick Roy <patrick.roy@linux.dev>
Instruct the docs.rs documentation builder to pass --cfg RUTSDOC_disable_feature_compat_errors in RUSTFLAGS when building documentation, so that builds dont fail because of compile_error!() and incompatible features [1]. [1]: https://docs.rs/crate/vhost/0.14.0/builds/2193201 Signed-off-by: Patrick Roy <patrick.roy@linux.dev>
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `1b48931` to `b4bb768`. - [Commits](rust-vmm/rust-vmm-ci@1b48931...b4bb768) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-version: b4bb7687a11bc6bdb07a37b71d2795b9fe77863f dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> [SG: adapted coverage value that changed a bit with the new rust in the CI] Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Updates the requirements on [virtio-queue](https://github.com/rust-vmm/vm-virtio) and [vm-memory](https://github.com/rust-vmm/vm-memory) to permit the latest version. Updates `virtio-queue` to 0.17.0 - [Release notes](https://github.com/rust-vmm/vm-virtio/releases) - [Commits](rust-vmm/vm-virtio@virtio-queue-v0.16.0...virtio-queue-v0.17.0) Updates `vm-memory` to 0.17.1 - [Release notes](https://github.com/rust-vmm/vm-memory/releases) - [Changelog](https://github.com/rust-vmm/vm-memory/blob/main/CHANGELOG.md) - [Commits](rust-vmm/vm-memory@v0.16.2...v0.17.1) --- updated-dependencies: - dependency-name: virtio-queue dependency-version: 0.17.0 dependency-type: direct:production dependency-group: vhost - dependency-name: vm-memory dependency-version: 0.17.1 dependency-type: direct:production dependency-group: vhost ... Signed-off-by: dependabot[bot] <support@github.com> [SG: adapted code to vm-memory changes, mainly related to changes on return types (e.g. Option vs Result, etc.)] Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: Egor Lazarchuk <yegorlz@amazon.co.uk>
Signed-off-by: Egor Lazarchuk <yegorlz@amazon.co.uk>
Bumps [rust-vmm-ci](https://github.com/rust-vmm/rust-vmm-ci) from `b4bb768` to `e34c504`. - [Commits](rust-vmm/rust-vmm-ci@b4bb768...e34c504) --- updated-dependencies: - dependency-name: rust-vmm-ci dependency-version: e34c5041625322ab4b998307a8852ecfd5ec51f9 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Extract creating a backend and a frontend from a socketpair to a utility function. Signed-off-by: Matej Hrica <mhrica@redhat.com>
2f600bd to
993d885
Compare
f6eaaa2 to
7e488f9
Compare
Add request defintions and methods for using the new SHMEM_MAP/UNMAP backend requests. Note that at the time of writing this, these requests are part of this RFC in QEMU: https://mail.gnu.org/archive/html/qemu-devel/2024-06/msg05736.html Co-authored-by: Albert Esteve <aesteve@redhat.com> Co-authored-by: Matej Hrica <mhrica@redhat.com> Signed-off-by: Albert Esteve <aesteve@redhat.com> Signed-off-by: Matej Hrica <mhrica@redhat.com>
Add tests to assert return values (and existence) of default implementation of VhostUserFrontendReqHandler and VhostUserFrontendReqHandlerMut trait methods. Signed-off-by: Matej Hrica <mhrica@redhat.com>
The last commit adds tests, that cover all of the default impls of functions, causing the coverage to increase too much - bump the value manually. 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
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.