Commit graph

3534 commits

Author SHA1 Message Date
Steven Moreland
070407809e Print error when netlink socket not created.
The panic here didn't show what error might be encountered
(EPERM, for instance).

Bug: 228077254
Test: check log on error
Change-Id: I56f34f87430a68266af85ba1d0abb2aeb2c05407
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3569267
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Andrew Walbran <qwandor@google.com>
Commit-Queue: Steven Moreland <smoreland@google.com>
2022-04-06 17:33:09 +00:00
Dennis Kempin
5b8a837485 Kokoro merge bot: Remove rebase for now
The recent cherry-pick of a revert has diverged the tree and caused
the commits inside the merge to be rebased as well, which uploads new
gerrit CLs for each commit.

BUG=None
TEST=./ci/kokoro/simulate.py ./ci/kokoro/build-x86_64.sh

Change-Id: I01af93c989ab0aba4c2d599d0625f921315a0600
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3566120
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
2022-04-06 17:32:10 +00:00
Alexandre Courbot
c7cd0e0114 Move libvda to media/libvda
As we are going to introduce more media-related crates, reserve the
"media" folder as a placeholder for them, starting with the existing
libvda.

BUG=b:169295147
BUG=b:214478588
TEST=cargo build --features "video-decoder,video-encoder,libvda"

Change-Id: I1b2ec65cbba8b735db3d19845c504546fa1c64ca
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3565623
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-04-06 01:19:07 +00:00
Anton Romanov
7afcfa00e7 crosvm: Remove CLOEXEC from fds passed into non-jailed plugin
Otherwise we'll lose them

BUT=none
TEST=kokoro/luci

Change-Id: I6b48b802be7c985efb05a4e9ffb326c63117e677
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3570179
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dmitry Torokhov <dtor@chromium.org>
Commit-Queue: Anton Romanov <romanton@google.com>
2022-04-06 00:49:35 +00:00
Daniel Verkamp
2d01c1df92 base, sys_util: remove Timer::is_armed function
This is currently only used in tests, and removing it makes the
cross-platform Timer API simpler to implement. The Windows version of
Timer did not implement this API, so it was already unusable in portable
code.

BUG=b:215618361
TEST=tools/presubmit
TEST=cargo test -p base timer

Change-Id: I57ab15e8b652d0df3664d95bc7759b9c84fe5e10
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3570178
Reviewed-by: Noah Gold <nkgold@google.com>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-04-05 20:11:58 +00:00
Daniel Verkamp
e584f835a8 devices: vvu: refactor to use PciAddress
This removes some duplicated PCI address string parsing code in PciSlot.

BUG=None
TEST=tools/presubmit

Change-Id: Ib38f8ef397d3fbed50806c96d46b85fc8257f1e9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3534505
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-04-05 19:55:01 +00:00
Daniel Verkamp
971a49e946 devices: pci: add domain to PciAddress fmt output
This was accidentally omitted in the original change. Add some basic
tests to make sure it doesn't regress.

BUG=None
TEST=cargo test -p devices pci_address

Change-Id: Iaedf2357ae02d6203e8296e9765f5ce3bf5bdc84
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3534507
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-04-05 19:55:00 +00:00
Daniel Verkamp
67e64f7810 devices: virtio: block: report 1 segment max on Windows
As part of the Windows porting effort, the virtio-block device was
changed to only report the VIRTIO_BLK_F_SEG_MAX feature on Linux, since
the maximum number of segments is based on the maximum number of iovec
entries supported by the system as reported by iov_max, which isn't
available on Windows.

Instead, we can support the VIRTIO_BLK_F_SEG_MAX feature everywhere, but
report that only one segment is supported on Windows. This results in
the same effective behavior for the Linux virtio-blk guest driver, which
assumes one segment if the feature is not supported, but it lets us
remove some platform-specific differences in the device and test code.

BUG=b:213149164
TEST=cargo test -p devices block

Change-Id: Id3160b01ee32a2694d40ef6f3d3a286cdb043ea8
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3564230
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-04-05 18:18:22 +00:00
Daniel Verkamp
bc712f12dc devices: virtio: block: add missing copyright headers
BUG=None
TEST=None

Change-Id: Ic4be21c0a2eed2f149a9eee8e6ac2f83c0cf9eb2
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3564229
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-04-05 18:18:21 +00:00
Lingfeng Yang
3c2d5cefa2 gfxstream: support async fence cb
This adds the asynchronous interrupts in crosvm-gpu for gfxstream.
This will allow gfxstream to alternate between the main signalling
method (ASG [1]) and the more traditional interrupts when it
makes sense performance-wise.

gfxstream also requires new write fence callbacks that take into
account the ring_idx and ctx_id where the fence is on.

[1] goto.google.com/address-space-graphics

BUG=b:192614792
TEST=Tested locally with Vulkan cereal

Change-Id: I010d9ebfc71594b393fee062b984a4c6d69404d8
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3027489
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org>
2022-04-05 16:34:56 +00:00
Pierre-Clément Tosi
3a81c077b3 aarch64: fdt: Fix create_psci_node
Don't format the PSCI compatible string from the version received from
KVM as that generates invalid strings for versions other than 0.2 and
1.0. Instead, assume backward compatibility from 0.2 onwards and pass
only those that are relevant and supported by the kernel driver or pass
the PSCI v0.1 compatible string otherwise.

BUG=b:227142928
TEST=tools/dev_container tools/run_tests --target=vm:aarch64
TEST=booted a protected VM from the AOSP fork + checked DT node

Change-Id: I3b6a05b487751435b4e0e1c7a6f4643fece02ca7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3560156
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Andrew Walbran <qwandor@google.com>
Commit-Queue: Pierre-Clément Tosi <ptosi@google.com>
2022-04-05 13:26:23 +00:00
Pierre-Clément Tosi
150255a1a8 aarch64: Validate PsciVersion during instantiation
The PSCI standard defines a PSCI version as a 32-bit non-negative signed
integer but one is currently being built from a 64-bit unsigned value.
Add a constructor and implement TryFrom<u32>::try_from() to encapsulate
those conditions being checked in the struct's impl.

Provide a macro wrapping the constructor for compile-time constant
versions.

Make PsciVersion Ord to allow comparison again versions of interest.

Reject cases where KVM reports versions of PSCI that are currently not
supported by crosvm.

BUG=b:227142928
TEST=tools/dev_container tools/run_tests --target=vm:aarch64
TEST=booted a protected VM from the AOSP fork

Change-Id: I2989f4703b1d18970aff396cda0b6a63ca0f6e4f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3560155
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Andrew Walbran <qwandor@google.com>
Commit-Queue: Pierre-Clément Tosi <ptosi@google.com>
2022-04-05 13:26:22 +00:00
Pierre-Clément Tosi
bdef378a27 arch: fdt: Pass &[&str] to property_string_list
Make the function take the more versatile slice of string slices,
instead of requiring caller code to generate the dynamic Vec and String
types, which can easily be converted back into those primitive types.

Note: no functional change intended.

BUG=b:227142928
TEST=booted a protected VM from the AOSP fork

Change-Id: I61701700efdacab4cfc5f5dd3df761e06a372065
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3560154
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Andrew Walbran <qwandor@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Pierre-Clément Tosi <ptosi@google.com>
2022-04-05 13:26:21 +00:00
Pierre-Clément Tosi
163b57a758 aarch64: kvm: Refactor match in get_psci_version
Turn the match with branch on any Err into an if-let-else expression.

Note: No functional change intended.

BUG=b:227142928
TEST=booted a protected VM from the AOSP fork

Change-Id: I213d7023fb63f4b2e504bd049d5bebbd26bd04a2
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3560153
Reviewed-by: Andrew Walbran <qwandor@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Pierre-Clément Tosi <ptosi@google.com>
2022-04-05 13:26:20 +00:00
Daniel Verkamp
a055ebe433 base, sys_util: remove fork module
This has been unused since commit b3bfbde1db ("Use minijail_fork") in
2017.

BUG=None
TEST=tools/presubmit

Change-Id: Ic4af706636ce710cdeeeca36efc7c3c342aac143
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3571021
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-04-05 01:52:27 +00:00
Anton Romanov
db0f4d62d1 crosvm: Start render server for plugin process
BUG=N/A
TEST=tast run pita.Boot

Change-Id: I285f774f15b13fcc3584a0e940c535c11c0e3610
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3552316
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dmitry Torokhov <dtor@chromium.org>
Commit-Queue: Anton Romanov <romanton@google.com>
2022-04-05 01:01:48 +00:00
Kaiyi Li
bb24159038 gfxstream: fix renderer callbacks definitions
Test: launch_cvd --gpu_mode=gfxstream
Change-Id: I1cbfdd6107101e966763e6a2c70cdf66cefe216a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3567644
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Kaiyi Li <kaiyili@google.com>
2022-04-05 00:52:59 +00:00
Vikram Auradkar
5ab8b89846 Move files from base/src/common to base/src
BUG=b:213153157
TEST=build, clippy and presubmit

Change-Id: I03ca3c919cbf685c5b2da75a06557862edcb00cf
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3570171
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Noah Gold <nkgold@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-04-05 00:49:38 +00:00
Vikram Auradkar
0953c58edb upstream a few file from dev/pci
The files include
- coiommu.rs
- msix.rs
- pci_configuration.rs
- pci_root.rs
- pci_bridge.rs
- pvpanic.rs
- stub.rs

Rest of the changes in the patch are supporting changes to build
and test.

Test: presubmit
Bug: b:213149278

Change-Id: Ic8fbcda4ad95370689b232c1656e782ee33425e1
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3541336
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Vikram Auradkar <auradkar@google.com>
2022-04-04 21:49:33 +00:00
Kaiyi Li
a2bed9b996 gfxstream: remove unused imports
Test: build
Change-Id: I872d3e2b7450a4709a126c774ee82c5e46134e6c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3569544
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Auto-Submit: Kaiyi Li <kaiyili@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-04-04 20:17:22 +00:00
Alexandre Courbot
dba517d0ef devices: console: simplify handle_input()
Instead of handling special conditions by setting a variable and
breaking from the loop into the error handling code, just return the
right error code directly.

BUG=None
TEST=serial console input works.

Change-Id: I02c9b8fd4bc64e4e0f16308d65cd05ace41c5756
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3565299
Reviewed-by: Junichi Uekawa <uekawa@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-04-03 12:45:54 +00:00
Alexandre Courbot
566f42655e devices: vhost-user: console: remove unneeded VIRTIO_F_VERSION_1 feature
base_features() already sets VIRTIO_F_VERSION_1 - no need to repeat it here.

BUG=None
TEST=vhost-user serial device is working.

Change-Id: I9e9c1277629e6f4c928daf69c586f7eec63a74ed
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3565301
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-04-03 12:45:24 +00:00
Alexandre Courbot
0ff5b53914 devices: vvu: remove Arc<Mutex<>> for VvuDevice
The VvuDevice is now the sole owner of the passed VvuPciDevice. Remove
the Arc<Mutex<>> surrounding it as it has become unnecessary.

BUG=b:194137301
TEST=cargo build

Change-Id: I130a9b8da6b68524aeee784614b690bfc2ac27ad
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3565622
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-04-03 12:45:09 +00:00
Alexandre Courbot
33d1b09adf devices: vhost-user: vsock: use HandlerType
The vhost-user vsock device still uses an Option to record whether we
are using VVU or not. Our request handler has a proper type to record
that information, so use it instead. Doing so also allows us to drop a
reference to the VvuPciDevice.

BUG=None
TEST=cargo build

Change-Id: Id952d179758db679f2cd9f739b56d3acda941f69
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3565621
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-04-03 12:45:08 +00:00
Alexandre Courbot
1cb82fdb35 devices: vvu: handler: only pass needed data to HandlerType
When using VVU, the DeviceRequestHandler only needs a reference to the
VFIO device, the PCI caps, and the notification events. There is no need
to share a reference to the whole VvuPciDevice, and releasing that
reference will actually allow us to remove it as well as the
VvuPciDevice mutex in a future CL.

BUG=b:194137301
TEST=VVU block device works.

Change-Id: I077c053af8ddefa4b0d624fe6775b5072e843686
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3565620
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-04-03 12:45:07 +00:00
Alexandre Courbot
f9eb7f26ea vmm_host: remove default implementation of protocol()
Having a default protocol implementation is dangerous, as implementors
can just ignore this method and return an erroneous type.

BUG=None
TEST=cargo build

Change-Id: Iee7dbcf563be1e5b15903b0fd7bdfb7ff5823545
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3565619
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Noah Gold <nkgold@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-04-03 12:45:06 +00:00
Alexandre Courbot
89f97d8178 devices: vvu: remove config from VvuPciDevice
This field is not used beyond the constructor and was only stored so it
can be referred by the init() method. Get rid of it by slightly
reorganizing the code.

BUG=b:194137301
TEST=cargo build

Change-Id: I4532a40ef1998ca20fdece9f0f016a36331c2e73
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3565618
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-04-03 12:45:04 +00:00
Ryan Neph
a999284da2 rutabaga_gfx: remove fence polling and enable async callback
Now that rutabaga users can provide a callback for fence
completion, fences no longer need to be polled on the main thread.

Optional polling still occurs for Rutabaga Components that still
rely on it for other purposes (e.g. virglrenderer for GL query
checking).

Also, use a BTreeMap rather a HashMap since we only expect a dozen
or so entries at most.  In such cases, a BTreeMap is faster.

* v1 (lfrb@collabora.com): remove all polling + add async_cb
* v2 (ryanneph@google.com): re-introduce optional polling to fix
      virglrenderer that relies on it for GL query checking.
* v3 (ryanneph@google.com): replace timer-based polling with
      eventfd-based poll() signaling for components that want to
      use it.

BUG=b:175527587
TEST=glxgears and vkcube in a crosvm guest VM.

Cq-Depend: chromium:3555854, chromium:3563893
Change-Id: I8e0181317e954cd15e2b8dc04c9b1329b0a6e182
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2860746
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Ryan Neph <ryanneph@google.com>
2022-04-01 15:45:58 +00:00
Daniel Almeida
37f02e9b1f Use cfg_if crate to disambiguate the chosen VideoBackendType
The logic for the None branch quickly becomes verbose as more video backends
are added. In preparation for the new libva backend, use the cfg_if crate
to disambiguate the chosen VideoBackendType when the user does not specify one.

BUG=b:214478588
TEST="cargo-expand --bin crosvm --features=video-decoder,vaapi,ffmpeg -- parse_video_options
shows a single None branch"

Change-Id: I0b7489924c30b2834cecc636446ac96034f6adc5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3422776
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-04-01 08:39:02 +00:00
Junichi Uekawa
3cdc5c5d3c argument: Add a key numeric parser.
Sometimes I want numeric key in addition to value.

BUG=b:215297064
TEST=cargo test

Change-Id: I75ae37905d1a27709e2fa694ab01e0ac8ed8596c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3556930
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Junichi Uekawa <uekawa@chromium.org>
2022-04-01 07:00:48 +00:00
Daniel Verkamp
29950ef5a6 devices: make virtio tpm backend pluggable
Split the creation of the software TPM emulator from the virtio-tpm
device so that other backends can be used with virtio-tpm.

BUG=b:227283268
TEST=cargo build --features=tpm

Change-Id: Ic1ebd2ebd49615201892afbf86cd5be68f6fde8c
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3213271
Reviewed-by: Dmitry Torokhov <dtor@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-03-31 23:03:16 +00:00
Richard
8ec0b3defc descriptor: Dedupe code between unix and windows
Moved shared code to the upper module

Test: built and presubmits
Bug: 215619368
Change-Id: Id369eb2108fbe4615bb2f4249be80b9efed4a5b7
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3555736
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Richard Zhang <rizhang@google.com>
2022-03-31 18:27:35 +00:00
Richard
4557915eef descriptor_reflection: Dedupe cross platform
descriptor_reflection.rs is the exact same on both windows and unix, so
moved it to the outer module in base

Test: built and presubmit
Bug: 215619368
Change-Id: I346fa58e651953e2a77b806fa7456af2c1b02cb9
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3555732
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Richard Zhang <rizhang@google.com>
2022-03-31 17:41:18 +00:00
Richard
66eb01adec virtio-block: Upstream window's block device
This CL mainly splits up Window's and Unix code into their own files.

seg_max is now a part of windows, but will always be set to 0
now. seg_max
in virtio_blk_config was being set to 0 on windows anyways.`

Bug: b:213149164
Test: cargo test and presubmit
Change-Id: Icdd481dd8e05c90ac8c1f29773d51312b64d3b2b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3553760
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Richard Zhang <rizhang@google.com>
2022-03-31 17:28:21 +00:00
Vikram Auradkar
de1f006a08 Enable clippy on windows
Also fixes few warning introduced during upstream which linux clippy
run does not catch.

test: py tools\clippy
bug: 226966790
Change-Id: I6979f87be5d6d34727afabafcaccb57631975567
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3553401
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Vikram Auradkar <auradkar@google.com>
2022-03-31 16:09:00 +00:00
Alexandre Courbot
6a8f656f9d crosvm: move all sandbox-related options under one struct
Jailing a process currently requires to pass the whole VM configuration
structure, which is inconvenient as we will want to reuse our jail
functions from a different context, e.g. to start vhost device processes
without a whole VM.

Address this by moving all jail-related options under a struct that is
passed to jail-related functions. This allows us to replace the sandbox
boolean in the config structure by an Option, making sure that
jail-related members are not even visible if we disabled sandboxing
altogether. The jail configuration structure can also be reused from
other contexts.

BUG=b:217480043
BUG=b:218223240
TEST=`crosvm run` boots with and without the `--disable-sandbox` option.

Change-Id: Ic4b7db923fb1dbbafba0137d5cc53a9e7e800747
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3546579
Reviewed-by: Anton Romanov <romanton@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-03-31 01:51:52 +00:00
Alexandre Courbot
c6ad83fbd4 devices: vsock: allow to parse options using serde_keyvalue crate
Use our new serde_keyvalue crate to annotate the
VhostVsockDeviceParameter config structure and allow us to create a
vsock device configuration from a key-values string. Add tests to make
sure parsing happens as expected.

Currently the vsock device is configured using the `--cid`,
`--vhost-vsock-fd` and `--vhost-vsock-device` command-line options.
While this CL introduces a way to set the vsock device up with a single
option (an ability we will eventually use), we retain the existing ones
for compatibility reasons.

BUG=b:218223240
TEST=cargo test -p devices vsock::tests::params
TEST=crosvm run with --cid parameter and check that virtio socket device
is present in the output of `lspci`.

Change-Id: Id58beee57f2ada3d2c0d353a430b038bb6c7eef3
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3473709
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-03-31 01:12:51 +00:00
Tinghao Zhang
5a792cb933 devices: vfio_pci: refactor pending bit emulation for MSI-X
When a vfio MSI-X vector got masked by guest, host vfio will release
the corresponding irqfd. Thus host device cannot trigger interrupt
via this fd and we then cannot set the pending bit. What we do instead
is to not release the irqfd but switch the registered kvm irqfd into
a new crosvm irqfd. So that when host device do trigger an interrupt,
crsovm will know about it and set the pending bit accordingly.

BUG=None
TEST=Pass through a nvme disk and tested its functionality.

Change-Id: I81c6fae7b89f1e1a445b8076bd9451a8aa9f0255
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3490239
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-03-31 00:49:29 +00:00
Tinghao Zhang
acfc8083f0 devices: vfio_pci: make vfio msix cap shareable
To emulate pending bit for MSI-X, we need to add a new interrupt
delivery path in crosvm. We will make VfioPciWorker share vfio msix
cap with VfioPciDevice, fire interrupt via msix cap when receiving
irq from host device. This makes vfio msix cap shareable.

BUG=None
TEST=./tools/presubmit

Change-Id: I77f5c377a41e7b2bd795e69c1ddcad9a9376f111
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3490238
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-03-31 00:49:28 +00:00
Tinghao Zhang
35d66b9817 devices: vfio_pci: enable MSI-X per vector masking
Previous vfio's MSI-X emulation lacks per vector masking support. This
patch adds per vector masking for vfio. Now MSI-X vectors are enabled
only if they are currently in use, so host will not allocate extra IRQ
which guest does not use.

BUG=None
TEST=Pass through a nvme disk that uses MSI-X and test its functionality.

Change-Id: If9b3ec907518513d1694b981d94994d8b7e5ea36
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3490237
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-03-31 00:49:27 +00:00
Tinghao Zhang
95932f07b5 devices: pci: msix: lazy MSI vector allocation
If device does not use all of the MSI vectors, we do not need to
register all for them. This patch pushes the MSI vector registery
to the first time they are enabled.

BUG=None
TEST=./tools/presubmit

Change-Id: I5453e93af4f4f5596d82ad126dc294fa5896846a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3490236
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-03-31 00:49:26 +00:00
Dennis Kempin
e871ee9601 Kokoro merge bot: Rebase merges before uploading
This allows the bot to account for manually cherry-picked commits.

To make rebases work properly, we had to fix the commit message
trailers to be added in a separate paragraph. This ensures
git inspect-trailers can add and find the Commit-Id trailer.

BUG=b:226975273
TEST=./ci/kokoro/simulate.py ./ci/kokoro/build-merge-into-chromeos.sh

Change-Id: If008be1f1c671ef1d79c6f223f10ea0e8f6742b5
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3561015
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: Maciek Swiech <drmasquatch@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
2022-03-30 22:57:48 +00:00
Keiichi Watanabe
ba0e3dbcb8 arch: Don't set up serial device when vhost-user console is set
crosvm sets up an emulated serial device for ttyS0 as a default device
unless virtio-console is specified.
The setup should be skipped when a vhost-user console is specified as well.

BUG=b:196186396
BUG=b:227407433
TEST=no serial output when one vhost-user console is specified.

Change-Id: Ib17e218fd01a13c109fc1246fd3a6d99031d3181
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3557729
Reviewed-by: Morg <morg@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
2022-03-30 07:43:42 +00:00
Alexandre Courbot
983e44eeff crosvm/linux: fix typo
s/socker/socket

BUG=None
TEST=cargo build

Change-Id: I3a98d4d6c5588726589707f2643d6f5a6bfbccf1
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3556926
Reviewed-by: Keiichi Watanabe <keiichiw@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Alexandre Courbot <acourbot@chromium.org>
2022-03-30 06:33:23 +00:00
Daniel Verkamp
1087e85b80 base, sys_util: make clone_fd function private
This function is used internally in the SafeDescriptor code, but it
should not be needed outside its module. Remove its pub to make it
harder to use by accident.

Users can call SafeDescriptor::try_from() to clone a descriptor and
convert the result into a SafeDescriptor.

BUG=None
TEST=cargo build

Change-Id: Ibc0e439b993d1ead0c0bc356da312a1d8f28a97f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3546571
Reviewed-by: Noah Gold <nkgold@google.com>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-03-29 21:00:12 +00:00
Vikram Auradkar
2b43443edc Enable vmm_vhost windows tests
Does couple of things
- move tube under right directory
- cleanup cros_async dependency
- export tube module from base
- enable base windows tests
- add verbose flag to test runner

test: built on window and presubmit
bug: b:213151429
bug: b:213153157
Change-Id: I0d1906d7edcc3352db53325ea7527550eaf00895
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3550296
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Vikram Auradkar <auradkar@google.com>
2022-03-29 20:29:54 +00:00
Dmitry Torokhov
1dd97fadeb tools: fix reference to no longer existing install-deps.sh
install-deps is now a Python script, update the message to make user's
life easier.

BUG=None
TEST=./tools/presubmit

Change-Id: Id1eca4f5b1fb0066574b6b7c381c908e65d919e4
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3536892
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dmitry Torokhov <dtor@chromium.org>
2022-03-29 17:17:17 +00:00
Daniel Verkamp
cbddc592dd devices: serial: replace file_from_path with open_file
Use the existing base::open_file function to replace the open-coded
equivalent of file_from_path + File::open fallback.

BUG=None
TEST=tools/presubmit

Change-Id: Ic6190e87056e661be5d552566c466339cefabbfe
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3553764
Reviewed-by: Anton Romanov <romanton@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-03-28 19:37:56 +00:00
Daniel Verkamp
ed6b27ab26 base: pass OpenOptions to open_file instead of bools
This cleans up the API and makes it easier to tell what is happening at
the call site. Additionally, callers may now use any options supported
by OpenOptions rather than the two specific flags (read_only and
o_direct) that were previously supported.

BUG=None
TEST=tools/presubmit

Change-Id: Ib8b5350c60807f14ebe0816d71bbf31e4bfef67f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3553763
Reviewed-by: Noah Gold <nkgold@google.com>
Reviewed-by: Vikram Auradkar <auradkar@google.com>
Reviewed-by: Anton Romanov <romanton@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
2022-03-28 19:37:54 +00:00
Dennis Kempin
cbe2e12759 Kokoro: Use unique identifiers for gerrit API
Change-Ids can refer to multiple CLs when they are cherry-picked.
Use the 'id' field instead wich contains repo and branch info and
is unique across gerrit.

BUG=None
TEST=./ci/kokoro/simulate.py ./ci/kokoro/build-merge-into-chromeos.sh

Change-Id: I7074e310ec7f795527610010c849acceaeb0eb06
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3556231
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: Dennis Kempin <denniskempin@google.com>
2022-03-28 19:25:44 +00:00