Commit graph

76 commits

Author SHA1 Message Date
Keiichi Watanabe
d7db2a7fea vmm_vhost: vhost_user: Drop recv_data() from Endpoint trait
By modifying the interface of `Endpoint::recv_into_bufs()` slightly,
`Endpoint::recv_data()` can be moved to `EndpointExt` trait.
This means a new device struct will be required to implement less
methods.

BUG=none
TEST=run vhost-user block device

Change-Id: I141eed0ff91aded5df5827cbc6965905820dac2b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3288735
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-12-01 09:45:42 +00:00
Keiichi Watanabe
f7db2d5344 vmm_vhost: vhost_user: Change interface of Endpoint::recv_data
Stop returning the number of bytes along with data, as the value should
be obtained by `data.len()`.

BUG=b:204720423
TEST=cargo test --all-features

Change-Id: I0c9d143b2d9e657d61cc2469ba7270a170401b2b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3288734
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-12-01 09:45:41 +00:00
Keiichi Watanabe
580d9f90f1 vmm_vhost: Avoid unnecessary Vec allocation
BUG=none
TEST=cargo test --features=vhost-user

Change-Id: I606a69244a3922a47298e4930732f04e337e1525
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3302694
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-12-01 09:45:39 +00:00
Keiichi Watanabe
a6da8a5406 vmm_vhost: vhost_user: Use IoSliceMut in recv_into_bufs()
Replace `&mut [u8]` in recv_into_bufs() with IoSliceMut.
Note that recv_into_bufs_all()'s interface is unchanged as it changes
internal cursor with advance().

BUG=none
TEST=cargo test --features=vhost-user-master,vhost-user-slave

Change-Id: I74666cd2472f879a473c07dbe617add79d0ca903
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3302693
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2021-12-01 09:45:38 +00:00
Keiichi Watanabe
dc069ba021 vhost_user: Introduce Endpoint trait
Introduce `Endpoint` trait and add `EndpointExt` trait as its blanket
implementation.
This trait generalizes the existing socket-based endpoint struct and
allow us to add a new VFIO device backend later.

BUG=b:194137301
TEST=vhost-user block device worked

Change-Id: I9c276bbbf14570b67d3c55507054f48e1210d019
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3270299
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2021-12-01 09:45:37 +00:00
Keiichi Watanabe
91019884bb sys_util: Replace unsafe use of iovecs
`sys_util::recv_iovecs_with_fds` was implemented as a safe function, but
it was actually unsafe because it assumed that the caller would give a
slice of `libc::iovec` where each `iov_base` points a valid memory
region with `iov_len`.

To make the function truly safe, it should take a slice of IoSliceMut
instead.

BUG=none
TEST=cargo test in sys_util/vmm_vhost
TEST=vhost-user block still works

Change-Id: I45458ee4545af13ce7e0955fb67b3703b147e7df
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3288733
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-26 14:28:28 +00:00
Daniel Verkamp
e5ada8f4a1 third_party/minijail: update to latest ToT
This matches the crosvm submodule to the version currently used in
Chrome OS: https://crrev.com/c/3230048

BUG=None
TEST=cargo build
TEST=tools/presubmit --quick

Change-Id: I7fadc5b1a4ecc26bd0598642966e088f1890a0d5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3290322
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2021-11-18 08:44:34 +00:00
Keiichi Watanabe
74bfcdba28 vhost_user: Fix cfg for take_single_file
BUG=none
TEST=cargo test --all-features
TEST=cargo test --features=vhost-user passed with no warnings

Change-Id: I98e69309c6ec81ede3e790c9b6b8b79991484cc1
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3288732
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2021-11-18 07:57:32 +00:00
Daniel Verkamp
f3df5127f3 third_party/vmm_vhost: switch to our vm_memory crate
This won't actually build as-is if the vhost-kern feature was enabled,
but since we don't use that feature currently, this unblocks building
crosvm without the rust-vmm vm-memory crate.

BUG=b:205511695
TEST=emerge-hatch -C vm-memory && emerge-hatch crosvm

Change-Id: I614616b38e796e28f13f0bb867e97c3be532305b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3290311
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2021-11-17 23:01:34 +00:00
Keiichi Watanabe
ef5b1e711b vmm_vhost: vhost_user: Split socket listener code into separate file
More SocketListener code to socket.rs so that we can easily add a new
file for a new VFIO backend. No behavior will be changed by this CL.

BUG=b:194137301
TEST=cargo test --all-features

Change-Id: I8d987f85a63ba666619882559e5cceddd91814bd
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3268268
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-10 08:42:18 +00:00
Keiichi Watanabe
63564d55cc vmm_vhost: vhost_user: Introduce Listener trait
Rename Listener struct to SocketListener and introduce Listener trait.
This is a preparation for adding VFIO backend for virtio-vhost-user.

BUG=b:194137301
TEST=cargo test --all-features --all-targets

Change-Id: Iea1e5b4378606b696c4022e3e2e6f4bbf80be55f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3268267
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-10 08:42:17 +00:00
Keiichi Watanabe
10d5bf1cd5 vmm_vhost: vhost_user: Disallow dead_code
BUG=b:204720423
TEST=cargo test --all-features

Change-Id: Ib413066612ca9ee6a88d356cb49dd8bbbc0fa017
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3268266
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-10 08:42:17 +00:00
Keiichi Watanabe
92d8d5f8a6 vmm_vhost: vhost_user: Implement DataInit for message structs
Implement DataInit for message structs and use `.as_slice()` when
sending them.
This change makes `trait Req` require `Send + Sync`. This is needed to
implement `DataInit` for `VhostUserMsgHeader<R> where `R: Req`.

BUG=b:204720423
TEST=cargo test --all-features

Change-Id: Icd32861b8d4fef16606a35b387c35271aebe061a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3268265
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-10 08:42:16 +00:00
Keiichi Watanabe
a939c0c77f vmm_vhost: vhost_user: Simplify send_iovec_all algorithm
BUG=b:204720423
TEST=cargo test --all-features

Change-Id: I554526fb39fb5f2aad14189d4825033290d1d6d4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3268264
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-10 08:42:15 +00:00
Keiichi Watanabe
a205dc949a vmm_vhost: vhost_user: Remove redundant slice conversion
BUG=b:204720423
TEST=cargo test --all-features

Change-Id: I67c73412a22e52238b0378e5b35dfdb0c72aa68b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3267923
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-10 08:42:14 +00:00
Keiichi Watanabe
1704332e1c vmm_vhost: Use thiserror and remain::sorted for Error enums
BUG=b:204720423
TEST=cargo test --all-features

Change-Id: Ic54eb2b625d0eb2f77c58356729cd6a68d5047c7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3267922
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-10 08:42:14 +00:00
Keiichi Watanabe
d89b31e8d8 vmm_vhost: Enable clippy::{bool_assert_comparison, needless_borrow}
Fix clippy::bool_assert_comparison and clippy::needless_borrow, which
were temporally added at crrev.com/c/3267912.

Most changes are trivial.
`test_should_reconnect` in vhost_user/mod.rs was deleted because the
test doesn't make much sense as a unit test, because it just copies and
pastes the logic of `Error::should_reconnect()`.

BUG=b:205511695, b:204720423
TEST=./tools/clippy
TEST=cargo test --all-features in third_party/vmm_vhost

Change-Id: I664b3aa7df054871d7e127b6dffd0315f9d4c48c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3267918
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-10 08:42:13 +00:00
Keiichi Watanabe
d7b5f1da0a vmm_vhost: Remove OWNERS file
Remove vmm-vhost's OWNERS file because it became a part of the crosvm
repository now.

BUG=b:205511695
TEST=kokoro

Change-Id: Iba9f64e647d905a4bdd4580b0115bb79085c9a9c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3267921
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-11-10 08:42:12 +00:00
Keiichi Watanabe
3a6ec148d6 third_party/vmm_vhost: Add vmm_vhost code into /third_party/
Move rust-vmm/vhost code from chromiumos's third_party directory to
crosvm's one.

Note that we have crrev.com/c/3269863 for license files in Chrome OS
ebuild.

Changes:
* Copied vmm_vhost files at "7c95b4a2 rust-vmm/vhost: switch to upstream
tempfile", whose latest upstream commit is "488b3adc fix warning:
unaligned_references".
* Remove [patch.crates-io] section from its Cargo.toml.
* Add attributes to skip `clippy::bool_assert_comparison` and
`clippy::needless_borrow`, which will be fixed in following CLs.
* Update crosvm's Cargo.toml and tools/chromeos/setup_cargo

BUG=b:205511695
TEST=tools/chromeos/setup_cargo && cargo build

Change-Id: Icee201b39ff1d352df59469a6c8668fc7cb92ab9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3267912
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
2021-11-10 08:42:11 +00:00
Dennis Kempin
d05bcbe9e0 Uprev all submodules
This fixes the annoying __pycache__ files virglrenderer used to
create.

BUG=b:200554399
TEST=./tools/presubmit passes

Change-Id: Ib5bfa5205f0b1432243ef53ec1b5a14d6cdd10d7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3232278
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
2021-10-19 19:12:53 +00:00
Daniel Verkamp
cce4054aa8 third_party/minijail: uprev to commit 6aa0392
This includes https://r.android.com/1835176 in order to prevent bindgen
from modifying libminijail.rs on every build, causing the submodule to
be marked as dirty.

BUG=None
TEST=cargo build
TEST=./test_all

Change-Id: I73e97231c37ef49bff463b7cc282a1cb42d7bc84
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3209926
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2021-10-06 23:01:30 +00:00
Dennis Kempin
ab0ad4caa0 Move virglrenderer/minigbm build into build.rs
Both libraries have previously been built as part of
ci/build_environment/Makefile. This CL moves that behavior into the
build.rs file of rutabaga_gfx.

This is the last third party dependency that we need to build from
source, and allows us to build/test on the host machine instead of
requiring the builder container.

It also allows us to greatly simplify the builder containers, which
I will do in a follow-up CL as we also need to upgrade them to bullseye.

This CL uprevs virglrenderer to include:
https://gitlab.freedesktop.org/virgl/virglrenderer/-/merge_requests/609

and minigbm to include: https://crrev.com/c/3141018

BUG=b:196059146
TEST=./test_all && ./run_tests --run-privileged

Change-Id: I4442ccc991d13a3fcfa224de50e916b3926f0cb4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3141771
Commit-Queue: Dennis Kempin <denniskempin@google.com>
Tested-by: Dennis Kempin <denniskempin@google.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
2021-09-09 23:13:24 +00:00
Chirantan Ekbote
dfa32ea035 Fix kokoro
Update to the latest version of vmm_vhost to pick up the API change.
Also fix clippy errors in the gpu device.

BUG=b:179755651
TEST=cargo build

Change-Id: Ia42681aee1d92f38dfcca1fbf87e8cfd7ac15d95
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3151109
Auto-Submit: Chirantan Ekbote <chirantan@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
2021-09-09 22:23:29 +00:00
Daniel Verkamp
4b0135bf6e vmm_vhost: update submodule to get warning fixes
Fixes Rust 1.53+ warnings when building crosvm:

  warning: lint `safe_packed_borrows` has been renamed to `unaligned_references`

BUG=None
TEST=cargo build

Change-Id: If2d2852e0fc20e6afd7fe8e712a2718b640f052b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3145915
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2021-09-09 00:01:22 +00:00
Dennis Kempin
3407843bd4 Build minijail through build.rs file in CI containers
This removes the minijail build from build_environment, which will
cause the minijail-sys crate to build it from source.

Minijail is upreved to include https://r.android.com/1815277

BUG=b:198305518
TEST=./test_all

Change-Id: I38c46c2a7df43e3d3a94ae0c5f8a9aae2abd3555
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3141770
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
2021-09-07 17:42:19 +00:00
Dennis Kempin
42b825f740 Switch to submodules based workflow
Instead of requiring crosvm to be checked out via the chromeos manifest
to access dependencies in the ChromeOS monorepo, this change adds
git submodules to third_party/.

The CI scripts and Cargo.toml are updated to use the new paths.

BUG=b:194336213
TEST=git clone --recursive https://chromium.googlesource.com/chromiumos/platform/crosvm
     cd crosvm
     cargo test
     ./test_all
     ./ci/kokoro/simulate_all

Change-Id: I9859d18176e21909ac3a140976fbd67cc14129bb
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3049003
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
2021-08-05 18:32:32 +00:00