Commit graph

4019 commits

Author SHA1 Message Date
Vaibhav Nagarnaik
65806f5213 base: Introduce number_of_logical_cores()
This crossplatform API returns the number of logical cores on the
system.

Remove the older `get_vcpu_count()` that was mis-named and replace its
use with `number_of_logical_cores()`.

TEST=Compiled

Change-Id: I4c46deb35e8354ad2313230d26c94c0f7558e06f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3684930
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Vaibhav Nagarnaik <vnagarnaik@google.com>
2022-06-02 00:05:07 +00:00
Vaibhav Nagarnaik
478c7104f8 hypervisor: Update Cargo.toml dependencies
The `haxm` implementation depends on `win_util` and `winapi` crates
which are only required on Windows. The `tempfile` crate is used in
testing.

Move `kvm` and `kvm_sys` dependencies for non-windows builds.

BUG=b:213151459
TEST=Compiled on linux.

Change-Id: I55b8ee4ac5da953a17e8bdd063e5ed488e3f53f2
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3684929
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Vaibhav Nagarnaik <vnagarnaik@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
2022-06-02 00:05:06 +00:00
Dennis Kempin
9a50dfbdcf infra: Fix push to github builder
Kokoro would maintain a local main branch in the local checkout,
so pushing --all will push the latest HEAD of main.

Luci will instead put us on a detached HEAD, with the local
main branch unmaintained. So we have been pushing the same old
version of crosvm.

Update the force push to submit HEAD to the remote main.

BUG=b:233913820
TEST=./recipes.py run push_to_github (requires authentication with
github to run)

Change-Id: I8282498382968768d66d9c807b9e86d191977beb
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3681989
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-06-01 22:05:04 +00:00
Anton Romanov
72da5dcd77 fix compilation with cras
Change-Id: Ic7f2f941b9066828f4347a6a01b599a6915b5e85
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3682448
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Anton Romanov <romanton@google.com>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
2022-06-01 20:32:02 +00:00
Dennis Kempin
fd9ad57aee infra: Really fix cros_run_unit_tests invocation
This was accidentally amended into the wrong commit. This code
has been teststed to work by launching a task in the crosvm bot
pool.

BUG=b:233913797
TEST=https://ci.chromium.org/swarming/task/5b3579040ba79210

Change-Id: Icb631d35a32bd0cc9cb44f54f4066a492b97bf64
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3684131
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
2022-06-01 18:53:56 +00:00
Kaiyi Li
bf7a2f37b2 gpu: add new gfxstream initialization flags
BUG=b:233676779
TEST=presubmit

Change-Id: I02103077006c2ac4bc8b3b21bf186de9743530e7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3668930
Auto-Submit: Kaiyi Li <kaiyili@google.com>
Reviewed-by: Jason Macnak <natsu@google.com>
Commit-Queue: Kaiyi Li <kaiyili@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-06-01 18:47:41 +00:00
Anton Romanov
1575e1c2f3 devices: unix: argh-ify devices subcommand
This has only a tiny change outside of unix-specific code so shouldn't
complicate windows upstreaming

Change-Id: Iae68e761d730ed7497b4586b9b9a948524224d8e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3671093
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Vikram Auradkar <auradkar@google.com>
Commit-Queue: Anton Romanov <romanton@google.com>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
2022-06-01 18:35:11 +00:00
David Stevens
ecb376c7b2 devices: virtio: iommu: fix spurious warning
Skip logging an error when the translate request tube closes. That
happens whenever the process on the other side of the tube closes, and
isn't an error in and of itself.

BUG=None
TEST=exit crosvm and observe no virtio-iommu error message

Change-Id: I5f0460182a96d00f8c348224c838554710fc5451
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3659815
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Commit-Queue: David Stevens <stevensd@chromium.org>
2022-06-01 08:46:41 +00:00
David Stevens
6e13a86d25 devices: virtio: iommu: fix vfio device removal
Make sure the endpoint is removed from the endpoint and domain maps when
a vfio device is removed.

BUG=b:232161488
TEST=Boot a guest, hotplug in and out a vfio-pci device repeatedly

Change-Id: Ie9838b412cac22a9e14bb6e986be39303aeb01e3
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3676692
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: David Stevens <stevensd@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
2022-06-01 08:46:40 +00:00
David Stevens
6374a3a370 devices: virtio: iommu: refactor shared state
Refactor shared state so that it can be shared between multiple async
callbacks. This moves all state from the Worker to a dedicated State
struct, which allows it to be passed via Rc<RefCell<>> to the various
async callbacks. The collection of endpoints can also be passed as part
of the shared state, rather than as its own dedicated argument.

There should be no behavioral changes in this CL.

BUG=b:232161488
TEST=Boot a guest, hotplug in and out a vfio-pci device repeatedly

Change-Id: I1e65ef3e4048bf0889fdee0f18fa5b58be264666
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3659554
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: David Stevens <stevensd@chromium.org>
2022-06-01 08:46:39 +00:00
David Stevens
35ce872a45 devices: virtio: iommu: check for invalid attaches
Check that the same mapper isn't used for multiple domains. This ensures
that there won't be mapping collisions/leaks if the guest tries to use
the same mapper with multiple domains.

BUG=None
TEST=Boot ManaTEE with devices managed by viommu

Change-Id: I45889e6fe020c3a24b355fc05a8f74734bece78a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3641221
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: David Stevens <stevensd@chromium.org>
2022-06-01 08:46:38 +00:00
David Stevens
fef85d48c8 devices: virtio: iommu: fix detaching issue
Remove incomplete support for detaching a virtio endpoint from domains
with multiple endpoints. We could technically handle this by checking
domain mappings when handling TranslateRequests, but there are no use
cases for this at the moment.

BUG=None
TEST=Boot ManaTEE with devices managed by viommu

Change-Id: I9d1cb86f246f7d8639058eaaf158f6538f1c1c57
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3676697
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: David Stevens <stevensd@chromium.org>
2022-06-01 08:46:37 +00:00
David Stevens
a334b0931a linux: refactor create_vfio_device
Refactor create_vfio_device so that it returns the created viommu
related mapper, if any. This allows add_vfio_device to be written more
cleanly.

BUG=None
TEST=Boot ManaTEE with devices managed by viommu

Change-Id: Ieaa345ed5f9146fde8e305fc7bc37001ff708683
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3676698
Commit-Queue: David Stevens <stevensd@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-06-01 08:46:36 +00:00
Junichi Uekawa
6d26fef1d6 crosvm: Simplify MSR filter.
Don't use box and just use an array.

BUG=b:229770963
TEST=build

Change-Id: I8121e4809e418d7f3e1aa876d567e543ee50693c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3675887
Commit-Queue: Junichi Uekawa <uekawa@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-06-01 08:20:38 +00:00
David Stevens
5d6d595116 devices: vfio: use VFIO_TYPE1v3_IOMMU if available
For vfio devices which we expect to have granular, dynamic IOMMU
mappings (i.e. passthrough devices using viommu/coiommu), use the
ChromeOS specific VFIO_TYPE1v3_IOMMU if available, as it is optimized
for that use case.

BUG=b:217479627
TEST=boot ManaTEE, observe reduced hypervisor memory usage after IO

Change-Id: I7b3a04adb5049c165885917fa29cedf2ccdee1d0
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3675885
Commit-Queue: David Stevens <stevensd@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
2022-06-01 05:47:40 +00:00
David Stevens
569a58490e base: clarify SharedMemory API
When creating shared memory, 'name' can have one of two meanings. It
could either be a debugging tag with no semantic meaning, or it could
uniquely identify a shared memory object within some namespace. Linux
memfd uses name in the first meaning, whereas Windows (and Linux shm)
uses it in the second meaning.

Currently, crosvm has no use cases for the named shared memory of the
second type, so it is not supported. Make it clear that the SharedMemory
APIs treats name as a debugging-only name. Remove the "anon" and "named"
constructors, since they had no semantic meaning. Also require a name
when constructing a SharedMemory, since there's no reason not to provide
one to make debugging easier.

The only semantic change is setting the name of GuestMemory's underlying
shmem to "crosvm_guest", which it was until recently. This fixes some
ManaTEE tests which use the name to determine CrOS guest memory usage.

BUG=None
TEST=compiles

Change-Id: I78d5046df04d6f19640abbbc67af6bd433a177b0
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3676695
Commit-Queue: David Stevens <stevensd@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-06-01 03:55:47 +00:00
Dennis Kempin
80ab41495d infra: Fix cros_run_unit_tests invocation
It was missing a --packages flag.

BUG=b:233913797
TEST=https://ci.chromium.org/swarming/task/5b3579040ba79210?server=chromium-swarm.appspot.com

Change-Id: I52bec26d596fb009ed4b3d8343851cedfa9fb5dd
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3682198
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: Dennis Kempin <denniskempin@google.com>
2022-06-01 01:47:17 +00:00
Daniel Verkamp
5fa53bc27a devices: vvu: wl: do not hold RefCell borrow across await
Change the comparison from an `if let` into a regular `if ... ==` by
implementing `PartialEq` for the relevant types. This makes the lifetime
of the `wl_state.borrow_mut()` end before calling
`kick_evt.next_val().await()`.

Fixes a new clippy warning from Rust 1.61.0:
<https://rust-lang.github.io/rust-clippy/master/index.html#await_holding_refcell_ref>

BUG=None
TEST=tools/clippy # with Rust 1.61.0

Change-Id: I067c2ab532d753306cd5334df5bb4f2c7c2e6584
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3671130
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Anton Romanov <romanton@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-06-01 00:32:58 +00:00
Daniel Verkamp
900237a541 devices: virtio-iommu: do not hold RefCell or lock across async
Retrieve the translation response, which involves taking a mutable
borrow of a RefCell as well as locking a Mutex, inside its own block so
that the references are dropped before using await again.

Fixes two new clippy warnings from Rust 1.61.0:
- <https://rust-lang.github.io/rust-clippy/master/index.html#await_holding_refcell_ref>
- <https://rust-lang.github.io/rust-clippy/master/index.html#await_holding_lock>

BUG=None
TEST=tools/clippy # Rust 1.61.0

Change-Id: If573af56968dceeae72a61a74f9f69dad8730364
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3671596
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Anton Romanov <romanton@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-06-01 00:32:57 +00:00
Daniel Verkamp
8a4b2c448b rustfmt, win_util: update to 2021 edition
These are the only two places still using edition = 2018.

BUG=None
TEST=tools/fmt --check

Change-Id: I32577672d768db51ded66831089f135ffa77ea41
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3680641
Reviewed-by: Anton Romanov <romanton@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-05-31 23:35:02 +00:00
Ryan Neph
3b24bd0a53 rutabaga_gfx: virglrenderer: enable async_fence_cb
Flip the switch for Virglrenderer's virgl/vrend contexts to stop using
timer-based fence polling and start using async fence handling callback.

BUG=b:175527587
TEST=cargo build --features=virgl_renderer,virgl_renderer_next,gfxstream
TEST=Run glxgears and vkcube in a crosvm guest VM with virglrenderer

Change-Id: I0b309be2086225bbbb7beb0943379a22acb62a07
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3628304
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Ryan Neph <ryanneph@google.com>
2022-05-31 22:50:14 +00:00
Dennis Kempin
b597678ad4 dev_container: Fix reuse logic and add testing
Some recent changes introduced a bug that breaks reusage of
containers. Instead of trying to restart a stopped container,
we delete it instead and start a fresh one.

The code was refactored to allow for testing. The tests run
against the real docker service and are run as part of the health
checks in kokoro / luci.

This CL also gets rid of the custon command line parsing since
luci can now run it with argh available.

BUG=b:234402839
TEST=./tools/dev_containes --self-test [--podman]

Change-Id: Id5eaf0ea83ff07433f8f57cb652b5c393dcb9da3
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3681399
Reviewed-by: Anton Romanov <romanton@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-31 21:54:23 +00:00
Vaibhav Nagarnaik
435e4fd2bd hypervisor: Constrain fnv version
The ebuild update for `fnv` includes versions up to `1.*`. Add
constraints for the dependency to be the same so that a newer `fnv`
version does not break the crosvm build.

ref:
https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3630701/comments/af4c79c5_35e4dee4

BUG=b:213151459
TEST=Compiled

Change-Id: I4d67b223eb858c3c46f87cbc9ae275c3859a3e46
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3681278
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-31 21:26:24 +00:00
Dennis Kempin
dd4b8f1676 infra: Add push-to-github builder
The builder runs as a post-submit and will force push changes to github.
Authentication is done via an access token stored in gcloud secrets
manager.

For this to work in the bot pool, the bots need to be reconfigured to
receive the scope needed for access to the secrets API as done in
https://crrev.com/i/4782519

Once this bot is working, the kokoro one can be turned off. Since we
mirror from platform/crosvm to the new repo, luci is triggered for all
new changes.

BUG=b:233913820
TEST=./recipe.py run push_to_github

Change-Id: I45478a076b87767ec10f0d0148c0713da7656264
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3671131
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
2022-05-31 21:26:19 +00:00
Dennis Kempin
44d9ee13cd infra: Fix typo in chromeos builder
The board name is amd64-generic, not amd64_generic.

BUG=b:233913797
TEST=None

Change-Id: I11a0ba7cda84614d757d58563d49cb476c26e47f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3680778
Commit-Queue: Dennis Kempin <denniskempin@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-31 21:21:30 +00:00
Vaibhav Nagarnaik
dc95b28adb hypervisor: add haxm hypervisor
The support is behind a feature flag `haxm`. Only tested and works on
Windows. However, it should be easy to make it work on other supported
OSes as well.

This includes the sys bindings for the HAXM interface. Requires that the
haxm driver is already installed on the host.

BUG=b:213151459
BUG=b:213151458
TEST=Compiled

Change-Id: Ifa9ec9236f84156f61443819f97f5d5754e77b93
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3630701
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Vaibhav Nagarnaik <vnagarnaik@google.com>
2022-05-31 20:05:52 +00:00
Junichi Uekawa
22b30eb15f crosvm: Use more semantically correct error type.
It's not UnknownArgument, it's an unexpected argument.

BUG=None
TEST=build

Change-Id: I990942c741d1e641697418a39ff55544d9fe4876
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3670094
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Junichi Uekawa <uekawa@chromium.org>
2022-05-31 05:25:04 +00:00
Dapeng Mi
4080aaf9b3 crosvm: expose cpu frequency and temperature CPUID bits to guest
Turbostat detects if CPU frequency and temperature features are
supported by reading several CPUID entries bits. Expose these
CPUID bits to guest when enable-pnp-data option is enabled.

Several MSR registers which turbostat depends on have been already
passed through when ITMT is enabled. Adding code to detect this and
avoid to doubly pass through.

BUG=b:229770963
TEST=Run "turbostat" in Chrome OS guest and show correct value.

Change-Id: Ieebaf616d544cb187a80ec6f3313a246ebf54bb2
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3641466
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Commit-Queue: Junichi Uekawa <uekawa@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-31 02:03:38 +00:00
Dapeng Mi
38208040ff crosvm: add missing doc comments for configure_vcpu method.
BUG=None
TEST=Run "cargo doc" generate documents and check the arguments
description is correct.

Change-Id: I481d950928587728fdb69215b867561d6752f4aa
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3670720
Commit-Queue: Junichi Uekawa <uekawa@chromium.org>
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-31 02:03:36 +00:00
Junichi Uekawa
3cb328aa10 crosvm: Script for rebasing on main from chromeos branch.
chromeos branch is a stable base to work on, but patches need to land on
the main branch. For uploading to that directory, it's always necessary
to rebase onto that branch.

BUG=b:227535695
TEST=rebase_for_review && repo upload --cbr .

Change-Id: I5f41e52f91adf15ade84ae09f6b34dcdbe733d23
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3565627
Commit-Queue: Junichi Uekawa <uekawa@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
2022-05-30 07:26:07 +00:00
Dapeng Mi
a5d52312d5 crosvm: implement KVM_X86_SET_MSR_FILTER ioctl
turbostat shows cpu freq/c-state/thermal statistics data by reading
some related MSRs. Unfortunately some MSRs such as MSR_IA32_POWER_CTL
are already emulated by KVM. The emulated value are not what we want
to expose to Chrome OS guest. KVM_X86_SET_MSR_FILTER ioctl provides
a way to skip KVM's emulation and let user space handle the MSR.

We added two MSR actions "MsrPassthroughFilter" and "MsrEmulateFilter"
to indicate the corresponding MSR needs to be filtered.

BUG=b:229770963
TEST=Run "turbostat" in Chrome OS guest and show correct value.

Change-Id: I5920ddba091589170dc326e10187aec66f75df79
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3641465
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Commit-Queue: Junichi Uekawa <uekawa@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-30 06:35:12 +00:00
Norman Bintang
6eda1c4eb4 audio: Add lseek in null_audio_device policy
This commit will fix crosvm crashes when playing audio
with ac97 device and null backend

BUG=b:233960497
TEST=run aplay -Dhw:0,0 -d 3 -f dat /dev/urandom inside a VM

Change-Id: Ic24853f308d92b2e5831d112f432f72f6fedd73c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3670934
Commit-Queue: Norman Bintang <normanbt@chromium.org>
Reviewed-by: Chih-Yang Hsia <paulhsia@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-30 03:20:47 +00:00
Alexandre Courbot
aa2e59d82f base: improve documentation of Descriptor and AsRawDescriptor
Although it can be useful for some limited cases, the Descriptor wrapper
class should ideally be eschewed and an alternative based on
implementing AsRawDescriptor on the right type be preferred. Make sure
its documentation reflects that.

The reason for avoiding Descriptor is that it encourages storing raw
descriptors that can possibly be closed before the user expects it. A
reasonable alternative to doing this is to call as_raw_descriptor() at
the exact moment the descriptor is needed, and never storing the result
- this ensures that the providing object (and underlying descriptor)
remain alive for long enough. Update the documentation of
AsRawDescriptor to explain and hopefully encourage this practice.

BUG=233968702
TEST=cargo build

Change-Id: I91c2ef11152b3b6adcc25f40d6de0a0f131700dd
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3670101
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
2022-05-28 07:29:03 +00:00
Alexandre Courbot
ed66850d92 devices: pit: avoid storing raw file descriptor
The Worker struct is storing a Descriptor obtained from a timer for the
sole purpose of adding it to a WaitContext when the worker thread starts
running. Instead of doing this, create the WaitContext and pass it as
part of the worker data, so all ioctls involving that descriptor are
performed directly on the timer, guaranteeing that the descriptor is
valid.

BUG=233968702
TEST=Linux VM starts and boots with `--split-irqchip` specified.

Change-Id: Ie5da1e9866742108f52c526100e936d292167ab7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3670105
Reviewed-by: Michael Hoyle <mikehoyle@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-05-28 07:29:02 +00:00
Alexandre Courbot
756c0bea9b devices: bat: remove unneeded use of Descriptor
WaitContext::build_with expects an array of &dyn AsRawDescriptor, which
the events we pass to it all implement. There is no need to use a
temporary Descriptor here.

BUG=233968702
TEST=cargo build

Change-Id: Ie39e1683ed13e474ef43bdad9375d60c6bf55f5a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3670104
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Michael Hoyle <mikehoyle@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
2022-05-28 07:29:01 +00:00
Alexandre Courbot
c9a294ced7 devices: usb: host: don't use Descriptor as temporary descriptor storage
We can avoid temporarily storing the descriptor by passing a reference
to the providing device directly to EventLoop::add_event().

BUG=233968702
TEST=cargo build

Change-Id: I78ce17b8a2c7c8a695cf65597459719812c175a5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3670103
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Michael Hoyle <mikehoyle@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-28 07:29:00 +00:00
Alexandre Courbot
9be279ca5f devices: input: stop using Descriptor in evdev
Descriptor here was used to pass a raw descriptor from a type that
implements AsRawDescriptor to a function that takes an AsRawDescriptor
as argument. Passing the provider directly is strictly equivalent.

BUG=233968702
TEST=cargo build

Change-Id: I638d01f1d5b47eb9773e7b1ad3802f6d8d0e5f6a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3670102
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Michael Hoyle <mikehoyle@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
2022-05-28 07:28:59 +00:00
Dennis Kempin
039936a871 merge_bot: Make script Python 3.8 compatible
Another script that needs to run on python 3.8. I filed b/234173142 to
make this consistent across all scripts and environments.

BUG=b:233913643
TEST=vpython3 tools/chromeos/merge_bot

Change-Id: Ic42423040feaaa5741a123972978af364886dc9e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3674220
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: Dennis Kempin <denniskempin@google.com>
2022-05-28 01:04:43 +00:00
Dennis Kempin
9c313915f5 infra: Set git name/email on all builders
Without, gerrit will not let us submit code and we won't be able to use
repo.

BUG=b:233913797
TEST=recipes.py test run

Change-Id: I59dc6633c716288094e02f38d613343e69c8c3e9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3674004
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-28 01:04:01 +00:00
Anton Romanov
f66af4f3f8 crosvm: jail sandboxed devices before calling .on_sandbox on rest
Some non-jailed devices may spawn threads. Do this to prevent threads
interferring with jails

BUG=b:234169724
TEST=run with shared dir locally

Change-Id: I0164a56e4d60ac8358ffc368021cf6b8e9a11eb5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3673787
Reviewed-by: Lepton Wu <lepton@chromium.org>
Commit-Queue: Anton Romanov <romanton@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-27 23:05:50 +00:00
Dennis Kempin
de651d0357 infra: Small process improvements
- Use vpython to call crovm tooling (This provides a predictable python
  environment and allow us to use argh).
- Add build_context() to provide a simple API that readies source and
  container.
- Nest preparation steps to reduce noise on builder page.

BUG=b:233913643
TEST=recipes.py test run

Change-Id: I6800e55f7311b32c6ef61918d13795af1fb3b588
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3674217
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Anton Romanov <romanton@google.com>
2022-05-27 20:59:12 +00:00
Daniel Verkamp
16f42b2337 devices: vvu: cras: update to SocketListener
Fixes the build with cras enabled.

BUG=b:229554679
TEST=emerge-trogdor crosvm

Fixes: b524833ab8 ("devices: vhost-user: handler: use vmm_vhost's socket listener")
Change-Id: I8237bc6d2b50a5f3bb150ae5ddc2920999b4b658
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3673020
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
2022-05-27 19:34:39 +00:00
Dennis Kempin
507ac947ae infra: Use depot_tools for repo and cros_sdk
The builders do not have depot_tools installed globally, but
the recipes checkout contains them, so look up the proper
paths to the tools.

BUG=b:233913797
TEST=./recipes.py run build_chromeos

Change-Id: I5d50871fa0ccee769704b339a20d3406d23e0510
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3674216
Reviewed-by: Anton Romanov <romanton@google.com>
Tested-by: Dennis Kempin <denniskempin@google.com>
2022-05-27 19:01:29 +00:00
Grzegorz Jaszczyk
cadc84b32a crosvm: extend suspend commands about generating sleepbtn event
As a part of full guest suspension/resumption support extend crosvm
suspend command about generating sleepbtn press. This allows to emulate
PM1 and inject the vSCI to the guest. When the guest kernel is built
with ACPI button support enabled, it allows to suspend guest with use of
some guest daemon listening on ACPI events e.g. acpid
(acpid detects the ACPI sleepbtn event and triggers the guest
 suspension).

During suspension process (VmRequest::Suspend), before VmResponse::Ok is
advertise, there is need to wait for actual guest suspension.
This is required, e.g. when crosvm suspend command is triggered
automatically by vm_concierge during host suspension process and
prevents suspending host before the guest is suspended.

Above is achieved by taking advantage of KVM_SYSTEM_EVENT_S2IDLE
request sent by hypervisor on behalf of a non-privileged VM. It is used
to wake up blocked thread, which is awaiting non-privileged guest
suspension to finish.

The enhanced suspend process introduced by this patch is triggered
only when the --s2idle flag is passed.

BUG=b:194391015
TEST=Suspend the guest by issuing "crosvm suspend
/run/vm/vm.<hash>/crosvm.sock" and make sure that the guest actually
triggers suspend process and finalizes it.

Change-Id: I38cf5a786275fc4afa4ba7642ef0be779f8f1548
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3602869
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Grzegorz Jaszczyk <jaszczyk@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
2022-05-27 18:59:16 +00:00
Grzegorz Jaszczyk
2e7ded3fbd crosvm: extend resume commands about generating powerbtn event
As a part of full guest suspension/resumption support extend crosvm
resume about generating powerbtn press during resume. This allows to
emulate PM1 and inject the vSCI to the guest. When the guest kernel
is built with ACPI button support enabled it allows to wakeup guest from
suspend (ACPI powerbtn fixed event is registered for the guest kernel
and since SCI is wakeup armed it allows to wakeup the guest).

Complementary patch for suspend: CL:3602869

The enhanced resume process introduced by this patch is triggered only
when the --s2idle flag is passed.

BUG=b:194391015
TEST=Suspend the guest by "echo mem > /sys/power/state" and wake it up
by issuing "crosvm resume /run/vm/vm.<hash>/crosvm.sock".

Change-Id: Ifa6626801b495cf96508531783c556804d5a51c6
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3602868
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Grzegorz Jaszczyk <jaszczyk@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
2022-05-27 18:43:30 +00:00
Dennis Kempin
455d04d0d1 merge_bot: Do not batch dry runs
This just creates unnecessary noise. Just create a single dry run
merge commit each time.

BUG=b:227224259
TEST=None

Change-Id: I54385fd80f01771bb83e02f2b48e604ad2d68d1e
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3673021
Reviewed-by: Anton Romanov <romanton@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-27 18:23:48 +00:00
Alexandre Courbot
22ba1728be devices: vvu-proxy: remove obsolete comment
We don't use `expect` in this block code anymore.

BUG=None
TEST=cargo build

Change-Id: I5c1887a42a0922f7b5d9d850d9c94dff8dc0d2f9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3664171
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Abhishek Bhardwaj <abhishekbh@chromium.org>
2022-05-27 15:17:38 +00:00
Alexandre Courbot
2532c07b39 vmm_vhost: fix the VFIO implementation of set_nonblocking()
The set_nonblocking() implementation of the VFIO Listener was marked as
unimplemented and caused a crash. However, given that accept() on a VFIO
listener never blocks, it is just as safe to mark the operation as
successful, since the behavior of accept() won't be impacted and it will
behave properly both in blocking and non-blocking modes.

Removing this panic will allow us to safely use the Listener's interface
set_nonblocking() method in generic code.

BUG=b:229554679
TEST=vhost-user console device works.
TEST=vvu console device works.

Change-Id: Ibbde7bcd048505fc3a84eb4881a74285bae6bf54
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3591111
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-05-27 06:53:08 +00:00
Alexandre Courbot
b524833ab8 devices: vhost-user: handler: use vmm_vhost's socket listener
vmm_vhost comes with its own set of listeners that implement the same
interface. Switch to use its socket listener as that will allow us to
further factorize code.

BUG=b:229554679
TEST=vhost-user console device works.
TEST=vvu console device works.

Change-Id: I19d0c9b95a0cca57eefd6c72b875e8a166d06b89
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3591110
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-27 06:53:07 +00:00
Alexandre Courbot
64a3fc2d08 devices: vhost-user: remove Arc from SlaveListener and SlaveReqHandler
The SlaveReqHandler should be the sole owner of a VhostUserBackend since
it calls its mutable methods, so we shouldn't need an Arc here. If
sharing is necessary users can use their own locking mechanism.

Single ownership will help to retrieve the backend after a client
disconnects, to reuse it for another connection if needed.

BUG=b:229554679
BUG=b:216407443
TEST=cargo test -p vmm_vhost
TEST=vhost-user console device works.
TEST=cargo test -p devices

Change-Id: I2358c807ac3ddb1ee4b29d97df0ade5a3e30a85a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3591108
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
Reviewed-by: Richard Zhang <rizhang@google.com>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
2022-05-27 06:53:06 +00:00