summary refs log tree commit diff
path: root/data_model
Commit message (Collapse)AuthorAge
* Make VolatileSlice ABI-compatible with iovecChirantan Ekbote2020-05-25
| | | | | | | | | | | | | | | | | | | | | | Change VolatileSlice so that it is ABI-compatible with iovec. This allows us to directly pass in a VolatileSlice for a C function that expects an iovec without having to create temporaries that convert from one to the other. Also change all the parameters from u64 to usize. It's not possible to address more memory than fits into a usize so having u64 here didn't really provide much benefit and led to a lot of tedious casting back and forth all over the place. BUG=none TEST=unit tests Cq-Depend: chromium:2206621 Change-Id: I258f9123c603d9a4c6c5e2d4d10eb4aedf74466d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2203998 Tested-by: Chirantan Ekbote <chirantan@chromium.org> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Commit-Queue: Chirantan Ekbote <chirantan@chromium.org>
* data_model: fix flaky observe_mutateZach Reizner2020-02-01
| | | | | | | | | | | | | | | | | | The original version of this test used sleeps, retries, and vague commentary about how the test is made reliable. The new version of test uses real synchronization primitives.. BUG=chromium:1045426 TEST=put all cores under load; cargo test -p data_model Change-Id: I7fa4ac45a9003e2ebb98c57ca6a03be17bdf65cf Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2029925 Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Auto-Submit: Zach Reizner <zachr@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org> Commit-Queue: Zach Reizner <zachr@chromium.org>
* crosvm: move vec_with_array_field to data_modelGurchetan Singh2019-12-11
| | | | | | | | | | | | | | Move it to the newly created flexible array file. BUG=chromium:892806 TEST=compiles Change-Id: I6c423a885cec17e376b0da87a4adbd17c71ff6f0 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1325510 Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* Remove unnecessary ? when returning ErrDaniel Verkamp2019-11-08
| | | | | | | | | | | | | | Fixes warnings of the form "returning an `Err(_)` with the `?` operator" from clippy. BUG=None TEST=bin/clippy Change-Id: Ied9c0bfbd71ad825fe88c861160e59db491efdd3 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1896086 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com>
* data_model: remove unused importDylan Reid2019-11-05
| | | | | | | | | | | Silences a warning on nightly. Signed-off-by: Dylan Reid <dgreid@chromium.org> Change-Id: I594e63118e822bd946d05ef0dbc885bfd9d8dac8 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1898560 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Chirantan Ekbote <chirantan@chromium.org> Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
* data_model: allow reading structs from io::ReadDaniel Verkamp2019-08-14
| | | | | | | | | | | | | | Add a from_reader() function that allows reading a DataInit type from a std::io::Read stream. BUG=None TEST=./build_test Change-Id: Iaacae489db2c265d6b1a9af6e18c11c9e6efe354 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1737723 Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
* data_model: add sub_slice method to VolatileSliceZach Reizner2019-06-24
| | | | | | | | | | | | | | | | | The new method is a copy of the get_slice trait method without the restriction that the returned VolatileSlice has a lifetime limited to the VolatileSlice, rather the VolatileSlice's lifetime parameter, which is longer. TEST=None BUG=None Change-Id: I1578981fcd046ce2d6232b28746c08d912c51b4d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1670548 Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Zach Reizner <zachr@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* eliminate mut from non-mut referencesZach Reizner2019-06-04
| | | | | | | | | | | | | | | | | | | | | | | This manifested itself in a couple places that were turning shared memory buffers into slices for the purposes of passing these slices to `Read` and `Write` trait methods. However, this required the removal of the methods that took `Read` and `Write` instances. This was a convenient interface but impossible to implement safely because making slices from raw pointers without enforcing safety guarantees causes undefined behaviour in Rust. It turns out lots of code in crosvm was using these interfaces indirectly, which explains why this CL touches so much. TEST=crosvm run BUG=chromium:938767 Change-Id: I4ff40c98da6ed08a4a42f4c31f0717f81b1c5863 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1636685 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Zach Reizner <zachr@chromium.org>
* edition: Eliminate blocks superseded by NLLDavid Tolnay2019-04-17
| | | | | | | | | | | | | | | | | | | | Before the new borrow checker in the 2018 edition, we sometimes used to have to manually insert curly braced blocks to limit the scope of borrows. These are no longer needed. Details in: https://doc.rust-lang.org/edition-guide/rust-2018/ownership-and-lifetimes/non-lexical-lifetimes.html TEST=cargo check --all-features TEST=local kokoro Change-Id: I59f9f98dcc03c8790c53e080a527ad9b68c8d6f3 Reviewed-on: https://chromium-review.googlesource.com/1568075 Commit-Ready: David Tolnay <dtolnay@chromium.org> Tested-by: David Tolnay <dtolnay@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
* edition: Remove extern crate linesDavid Tolnay2019-04-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In Rust 2018 edition, `extern crate` is no longer required for importing from other crates. Instead of writing: extern crate dep; use dep::Thing; we write: use dep::Thing; In this approach, macros are imported individually from the declaring crate rather than through #[macro_use]. Before: #[macro_use] extern crate sys_util; After: use sys_util::{debug, error}; The only place that `extern crate` continues to be required is in importing the compiler's proc_macro API into a procedural macro crate. This will hopefully be fixed in a future Rust release. extern crate proc_macro; TEST=cargo check TEST=cargo check --all-features TEST=cargo check --target aarch64-unknown-linux-gnu TEST=local kokoro Change-Id: I0b43768c0d81f2a250b1959fb97ba35cbac56293 Reviewed-on: https://chromium-review.googlesource.com/1565302 Commit-Ready: David Tolnay <dtolnay@chromium.org> Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: David Tolnay <dtolnay@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: David Tolnay <dtolnay@chromium.org>
* edition: Update data_model to 2018 editionDavid Tolnay2019-04-07
| | | | | | | | | | | | | | | | | | Separated out of CL:1513058 to make it possible to land parts individually while the affected crate has no other significant CLs pending. This avoids repeatedly introducing non-textual conflicts with new code that adds `use` statements. TEST=cargo check TEST=cargo check --all-features TEST=cargo check --target aarch64-unknown-linux-gnu Change-Id: I0be8781e7fa5ee0d9cbd5b4ff68b3218d82ba49d Reviewed-on: https://chromium-review.googlesource.com/1519692 Commit-Ready: David Tolnay <dtolnay@chromium.org> Tested-by: David Tolnay <dtolnay@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: David Tolnay <dtolnay@chromium.org>
* edition: Update absolute paths to 2018 styleDavid Tolnay2019-03-13
| | | | | | | | | | | | | | | | | | | | | | | | | | This is an easy step toward adopting 2018 edition eventually, and will make any future CL that sets `edition = "2018"` this much smaller. The module system changes in Rust 2018 are described here: https://doc.rust-lang.org/edition-guide/rust-2018/module-system/path-clarity.html Generated by running: cargo fix --edition --all in each workspace, followed by bin/fmt. TEST=cargo check TEST=cargo check --all-features TEST=cargo check --target aarch64-unknown-linux-gnu Change-Id: I000ab5e69d69aa222c272fae899464bbaf65f6d8 Reviewed-on: https://chromium-review.googlesource.com/1513054 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: David Tolnay <dtolnay@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: David Tolnay <dtolnay@chromium.org>
* data_model: ignore clippy error for mut from non-mutDylan Reid2019-03-09
| | | | | | | | | | | | | | | | A bug has been filed to fix this differently. Until then, add a TODO and a clippy disable so that clippy can be used to test for other issues without stopping on this error. BUG=928767 TEST=cargo clippy Signed-off-by: Dylan Reid <dgreid@chromium.org> Change-Id: Ic264bc9101653c30354415c913e9ee3752985706 Reviewed-on: https://chromium-review.googlesource.com/1506308 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
* error: Consistently use Display instead of error description()David Tolnay2019-03-02
| | | | | | | | | | | | | | | | The description method is deprecated and its signature forces less helpful error messages than what Display can provide. BUG=none TEST=cargo check --all-features TEST=cargo check --target aarch64-unknown-linux-gnu Change-Id: I27fc99d59d0ef457c5273dc53e4c563ef439c2c0 Reviewed-on: https://chromium-review.googlesource.com/1497735 Commit-Ready: David Tolnay <dtolnay@chromium.org> Tested-by: David Tolnay <dtolnay@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* build: Restore ability to compile data_model and sys_util in isolationDavid Tolnay2019-01-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CL:1385972 breaks building these crates because they are not in the workspace of the top level Cargo.toml so the patch.crates-io setting of the top level Cargo.toml does not take effect. They end up looking for their dependencies on crates.io rather than in the parent directory. Being able to build just data_model and sys_util on their own is useful when iterating on a change in one of them and needing to run `cargo test` (as I tried to do today). The errors without this CL are like this: error: no matching package named `assertions` found location searched: registry `https://github.com/rust-lang/crates.io-index` required by package `data_model v0.1.0 (/path/to/crosvm/data_model)` BUG=chromium:916921 TEST=cargo check in data_model and sys_util TEST=cargo test as well TEST=emerge-amd64-generic crosvm TEST=FEATURES=test emerge-amd64-generic data_model, sys_util CQ-DEPEND=CL:1409854 Change-Id: I7bd34f38507c1cea72380f515ce2dd0835aec4fa Reviewed-on: https://chromium-review.googlesource.com/1403887 Commit-Ready: David Tolnay <dtolnay@chromium.org> Tested-by: David Tolnay <dtolnay@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Chih-Yang Hsia <paulhsia@chromium.org>
* crosvm: Split sub-crates into independent workspacepaulhsia2019-01-03
| | | | | | | | | | | | | | | | | | | Split sub-crates under crosvm root directory into several independent workspaces for adding ebuild files for those crates. data_model and sys_util could only be built by emerge after creating their ebuilds. BUG=chromium:916921 TEST='emerge-eve crosvm' TEST=Run 'cargo build' under crosvm directory Change-Id: I2dddbbb7c7344e643183a5885e867f134b299591 Reviewed-on: https://chromium-review.googlesource.com/1385972 Commit-Ready: Chih-Yang Hsia <paulhsia@chromium.org> Tested-by: Chih-Yang Hsia <paulhsia@chromium.org> Reviewed-by: Chirantan Ekbote <chirantan@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
* assertions: Use compile-time assertion macroDavid Tolnay2018-12-09
| | | | | | | | | | | | | | | This depends on the `assertions` crate added in CL:1366819. `const_assert!(boolean expression)` is a compile-time assertion that fails to compile if the expression is false. TEST=`cargo check` each of the modified crates Change-Id: I559884baf2275b1b506619693cd100a4ffc8adcd Reviewed-on: https://chromium-review.googlesource.com/1368364 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: David Tolnay <dtolnay@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* data_model: prevent unaligned DataInit::from_sliceZach Reizner2018-12-03
| | | | | | | | | | | | | | | | | | Because the alignment of the data passed into from_slice is not checked, it is very easy to pass in unaligned data that will get dereferenced at a later point in the code. On ARM, this will lead to a SIGBUS. This change adds an alignment check to prevent getting a signal. Instead, the caller will get `None`. BUG=chromium:900962 TEST=cargo test -p data_model Change-Id: I7a0f835f7d0ffd8c3d44bbcd80a790027f652bc9 Reviewed-on: https://chromium-review.googlesource.com/1343989 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
* lint: Resolve the easier clippy lintsDavid Tolnay2018-12-03
| | | | | | | | | | | | | | | | | | | | Hopefully the changes are self-explanatory and uncontroversial. This eliminates much of the noise from `cargo clippy` and, for my purposes, gives me a reasonable way to use it as a tool when writing and reviewing code. Here is the Clippy invocation I was using: cargo +nightly clippy -- -W clippy::correctness -A renamed_and_removed_lints -Aclippy::{blacklisted_name,borrowed_box,cast_lossless,cast_ptr_alignment,enum_variant_names,identity_op,if_same_then_else,mut_from_ref,needless_pass_by_value,new_without_default,new_without_default_derive,or_fun_call,ptr_arg,should_implement_trait,single_match,too_many_arguments,trivially_copy_pass_by_ref,unreadable_literal,unsafe_vector_initialization,useless_transmute} TEST=cargo check --features wl-dmabuf,gpu,usb-emulation TEST=boot linux Change-Id: I55eb1b4a72beb2f762480e3333a921909314a0a2 Reviewed-on: https://chromium-review.googlesource.com/1356911 Commit-Ready: David Tolnay <dtolnay@chromium.org> Tested-by: David Tolnay <dtolnay@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* cargo fmt all source codeZach Reizner2018-10-09
| | | | | | | | | | | | | | Now that cargo fmt has landed, run it over everything at once to bring rust source to the standard formatting. TEST=cargo test BUG=None Change-Id: Ic95a48725e5a40dcbd33ba6d5aef2bd01e91865b Reviewed-on: https://chromium-review.googlesource.com/1259287 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
* data_model: add offset, copy_to_volatile_slice, Copy to VolatileSliceZach Reizner2018-07-20
| | | | | | | | | | | | | | These methods are convenient for safely doing complex copies between `VolatileSlice`s. TEST=cargo test -p data_model BUG=None Change-Id: I02f446953c24ef5cbb2cebd306344b1e13556bd7 Reviewed-on: https://chromium-review.googlesource.com/1102153 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* volatile_memory: Fix usize/u64 confusion in doc testDylan Reid2018-02-05
| | | | | | | | | | | | | | VolatileMemory::size() now returns a u64, fix the doctest so it compares the returned value with a u64. BUG=none TEST=cargo test --all -- --test-threads=1 Change-Id: If1ae94d83bfc1f2f995fd71bfdede324c162ab4e Signed-off-by: Dylan Reid <dgreid@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/902777 Reviewed-by: Stephen Barber <smbarber@chromium.org> Reviewed-by: Sonny Rao <sonnyrao@chromium.org>
* crosvm: change GuestAddress to always be a u64Sonny Rao2018-02-01
| | | | | | | | | | | | | | | We want to be able to run 64-bit ARM kernels using a 32-bit version of crosvm, to make it more consistent use a u64 to represent GuestAddress. BUG=chromium:797868 TEST=./build_test passes on all architectures TEST=crosvm runs on caroline Change-Id: I43bf993592caf46891e3e5e05258ab70b6bf3045 Signed-off-by: Sonny Rao <sonnyrao@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/896398 Reviewed-by: Dylan Reid <dgreid@chromium.org>
* data_model: add basic methods functions for using DataInit typesZach Reizner2018-01-25
| | | | | | | | | | | | | | These functions are very useful C-style type casting of byte buffers to structs in a safe manner for types that implement DataInit. BUG=None TEST=None Change-Id: I4c8e1b9f7f13da5a39b65f224b65f09f31d56f1c Reviewed-on: https://chromium-review.googlesource.com/869354 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* data_model: add copy functions for copying slices in VolatileSlice'sZach Reizner2017-09-01
| | | | | | | | | | | | | | | | These copy functions are functionally similar to read_from and write_to, but have stronger guarantees because they are copying to/from concrete slices. In particular, the volatile access pattern is specified and the copy operation never returns an error. TEST=cargo test BUG=chromium:738638 Change-Id: Ie10152e10bc8a36058f5d5001ff392ff8975ee36 Reviewed-on: https://chromium-review.googlesource.com/599043 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* crosvm: refactor and expand vm control socket IPCZach Reizner2017-08-25
| | | | | | | | | | | | | | | | This CL adds VM request capabilities to the control socket. These requests include the basic exit as well as the essential ioeventfd and irqfd requests. For virtio wayland, the register/unregister device memory request was added. TEST=cargo test BUG=chromium:738638 Change-Id: I0cbf62d85a299cf454bcf6924a4e1d52d5b7183f Reviewed-on: https://chromium-review.googlesource.com/602593 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Dylan Reid <dgreid@chromium.org>
* data_model: add volatile_memory module for volatile accessZach Reizner2017-06-27
| | | | | | | | | | | | | | This includes both VolatileRef, for accessing DataInit, and VolatileSlice, for accessing bulk raw memory. BUG=None TEST=cargo test Change-Id: I356c7e6f05361fa711dc91555f68e4323667884a Reviewed-on: https://chromium-review.googlesource.com/547050 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
* data_model: add unsigned endian typesZach Reizner2017-06-27
| | | | | | | | | | | | | | These types are just like normal unsigned primitives, except their endian is explicit. TEST=cargo test BUG=None Change-Id: I3d0a7f7ccbf276e2cfdb34310f173df193c70c79 Reviewed-on: https://chromium-review.googlesource.com/544692 Commit-Ready: Zach Reizner <zachr@chromium.org> Tested-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Chirantan Ekbote <chirantan@chromium.org>
* Add data_model with DataInit traitDylan Reid2017-06-26
The data_model crate is created to hold the DataInit trait. Types implementing this unsafe trait must guarantee that the type can be initialized with random data and the resulting object will be valid. Change-Id: Id6314d114805ec502adabe50a8bd6aa42fdb2c52 Signed-off-by: Dylan Reid <dgreid@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/541681 Reviewed-by: Zach Reizner <zachr@chromium.org>