diff --git a/Cargo.lock b/Cargo.lock index 187cba000cd..13b02fe4cfb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -618,6 +618,7 @@ dependencies = [ "userfaultfd", "utils", "vmm", + "vmm-sys-util", ] [[package]] @@ -785,6 +786,7 @@ dependencies = [ "regex", "thiserror", "utils", + "vmm-sys-util", ] [[package]] @@ -1117,6 +1119,7 @@ dependencies = [ "log-instrument", "thiserror", "utils", + "vmm-sys-util", ] [[package]] @@ -1194,6 +1197,7 @@ dependencies = [ "serde_json", "thiserror", "utils", + "vmm-sys-util", ] [[package]] @@ -1280,6 +1284,7 @@ dependencies = [ "thiserror", "utils", "vmm", + "vmm-sys-util", ] [[package]] @@ -1566,6 +1571,7 @@ dependencies = [ "vm-fdt", "vm-memory", "vm-superio", + "vmm-sys-util", "zerocopy", ] diff --git a/src/cpu-template-helper/Cargo.toml b/src/cpu-template-helper/Cargo.toml index 72d1c7fc213..1136e7ad6bc 100644 --- a/src/cpu-template-helper/Cargo.toml +++ b/src/cpu-template-helper/Cargo.toml @@ -19,7 +19,7 @@ serde_json = "1.0.128" thiserror = "1.0.63" vmm = { path = "../vmm" } -vmm-sys-util = { version = "0.12.1", features = ["with-serde"] } +vmm-sys-util = "0.12.1" [features] tracing = ["log-instrument", "vmm/tracing"] diff --git a/src/firecracker/Cargo.toml b/src/firecracker/Cargo.toml index 16d670e81e7..828e4e7eefe 100644 --- a/src/firecracker/Cargo.toml +++ b/src/firecracker/Cargo.toml @@ -30,6 +30,7 @@ thiserror = "1.0.63" timerfd = "1.6.0" utils = { path = "../utils" } vmm = { path = "../vmm" } +vmm-sys-util = { version = "0.12.1", features = ["with-serde"] } [dev-dependencies] cargo_toml = "0.20.4" diff --git a/src/firecracker/examples/uffd/uffd_utils.rs b/src/firecracker/examples/uffd/uffd_utils.rs index f5a5773e115..52d33765bd8 100644 --- a/src/firecracker/examples/uffd/uffd_utils.rs +++ b/src/firecracker/examples/uffd/uffd_utils.rs @@ -12,7 +12,7 @@ use std::ptr; use serde::{Deserialize, Serialize}; use userfaultfd::{Error, Event, Uffd}; -use utils::sock_ctrl_msg::ScmSocket; +use vmm_sys_util::sock_ctrl_msg::ScmSocket; // This is the same with the one used in src/vmm. /// This describes the mapping between Firecracker base virtual address and offset in the @@ -299,8 +299,8 @@ mod tests { use std::mem::MaybeUninit; use std::os::unix::net::UnixListener; - use utils::tempdir::TempDir; - use utils::tempfile::TempFile; + use vmm_sys_util::tempdir::TempDir; + use vmm_sys_util::tempfile::TempFile; use super::*; diff --git a/src/firecracker/src/api_server/mod.rs b/src/firecracker/src/api_server/mod.rs index 80f5510abe1..6ac2955af8f 100644 --- a/src/firecracker/src/api_server/mod.rs +++ b/src/firecracker/src/api_server/mod.rs @@ -16,12 +16,13 @@ pub use micro_http::{Body, HttpServer, Request, Response, ServerError, StatusCod use parsed_request::{ParsedRequest, RequestAction}; use seccompiler::BpfProgramRef; use serde_json::json; -use utils::eventfd::EventFd; +use utils::time::{get_time_us, ClockType}; use vmm::logger::{ debug, error, info, update_metric_with_elapsed_time, warn, ProcessTimeReporter, METRICS, }; use vmm::rpc_interface::{ApiRequest, ApiResponse, VmmAction}; use vmm::vmm_config::snapshot::SnapshotType; +use vmm_sys_util::eventfd::EventFd; /// Structure associated with the API server implementation. #[derive(Debug)] @@ -101,8 +102,7 @@ impl ApiServer { } }; for server_request in request_vec { - let request_processing_start_us = - utils::time::get_time_us(utils::time::ClockType::Monotonic); + let request_processing_start_us = get_time_us(ClockType::Monotonic); // Use `self.handle_request()` as the processing callback. let response = server_request .process(|request| self.handle_request(request, request_processing_start_us)); @@ -110,8 +110,7 @@ impl ApiServer { error!("API Server encountered an error on response: {}", err); }; - let delta_us = utils::time::get_time_us(utils::time::ClockType::Monotonic) - - request_processing_start_us; + let delta_us = get_time_us(ClockType::Monotonic) - request_processing_start_us; debug!("Total previous API call duration: {} us.", delta_us); } } @@ -205,7 +204,6 @@ mod tests { use std::thread; use micro_http::HttpConnection; - use utils::tempfile::TempFile; use utils::time::ClockType; use vmm::builder::StartMicrovmError; use vmm::logger::StoreMetric; @@ -213,6 +211,7 @@ mod tests { use vmm::seccomp_filters::get_empty_filters; use vmm::vmm_config::instance_info::InstanceInfo; use vmm::vmm_config::snapshot::CreateSnapshotParams; + use vmm_sys_util::tempfile::TempFile; use super::request::cpu_configuration::parse_put_cpu_config; use super::*; @@ -259,7 +258,7 @@ mod tests { // latencies_us.pause_vm metric can be set to 0, failing the assertion below. By // subtracting 1 we assure that the metric will always be set to at least 1 (if it gets set // at all, which is what this test is trying to prove). - let start_time_us = utils::time::get_time_us(ClockType::Monotonic) - 1; + let start_time_us = get_time_us(ClockType::Monotonic) - 1; assert_eq!(METRICS.latencies_us.pause_vm.fetch(), 0); to_api.send(Box::new(Ok(VmmData::Empty))).unwrap(); let response = diff --git a/src/firecracker/src/api_server_adapter.rs b/src/firecracker/src/api_server_adapter.rs index e50ebd09c17..ffc4732025d 100644 --- a/src/firecracker/src/api_server_adapter.rs +++ b/src/firecracker/src/api_server_adapter.rs @@ -9,8 +9,6 @@ use std::thread; use event_manager::{EventOps, Events, MutEventSubscriber, SubscriberOps}; use seccompiler::BpfThreadMap; -use utils::epoll::EventSet; -use utils::eventfd::EventFd; use vmm::logger::{error, warn, ProcessTimeReporter}; use vmm::resources::VmResources; use vmm::rpc_interface::{ @@ -19,6 +17,8 @@ use vmm::rpc_interface::{ }; use vmm::vmm_config::instance_info::InstanceInfo; use vmm::{EventManager, FcExitCode, Vmm}; +use vmm_sys_util::epoll::EventSet; +use vmm_sys_util::eventfd::EventFd; use super::api_server::{ApiServer, HttpServer, ServerError}; diff --git a/src/firecracker/src/main.rs b/src/firecracker/src/main.rs index e2b8a3fb9e2..8fb5392afcf 100644 --- a/src/firecracker/src/main.rs +++ b/src/firecracker/src/main.rs @@ -19,7 +19,6 @@ use event_manager::SubscriberOps; use seccomp::FilterError; use seccompiler::BpfThreadMap; use utils::arg_parser::{ArgParser, Argument}; -use utils::terminal::Terminal; use utils::validators::validate_instance_id; use vmm::builder::StartMicrovmError; use vmm::logger::{ @@ -32,6 +31,7 @@ use vmm::snapshot::{Snapshot, SnapshotError}; use vmm::vmm_config::instance_info::{InstanceInfo, VmState}; use vmm::vmm_config::metrics::{init_metrics, MetricsConfig, MetricsConfigError}; use vmm::{EventManager, FcExitCode, HTTP_MAX_PAYLOAD_SIZE}; +use vmm_sys_util::terminal::Terminal; use crate::seccomp::SeccompConfig; @@ -47,7 +47,7 @@ enum MainError { /// Failed to set the logger: {0} SetLogger(vmm::logger::LoggerInitError), /// Failed to register signal handlers: {0} - RegisterSignalHandlers(#[source] utils::errno::Error), + RegisterSignalHandlers(#[source] vmm_sys_util::errno::Error), /// Arguments parsing error: {0} \n\nFor more information try --help. ParseArguments(#[from] utils::arg_parser::UtilsArgParserError), /// When printing Snapshot Data format: {0} diff --git a/src/firecracker/src/metrics.rs b/src/firecracker/src/metrics.rs index a5fdfdd351b..9eaffd47811 100644 --- a/src/firecracker/src/metrics.rs +++ b/src/firecracker/src/metrics.rs @@ -6,8 +6,8 @@ use std::time::Duration; use event_manager::{EventOps, Events, MutEventSubscriber}; use timerfd::{ClockId, SetTimeFlags, TimerFd, TimerState}; -use utils::epoll::EventSet; use vmm::logger::{error, warn, IncMetric, METRICS}; +use vmm_sys_util::epoll::EventSet; /// Metrics reporting period. pub(crate) const WRITE_METRICS_PERIOD_MS: u64 = 60000; diff --git a/src/firecracker/src/seccomp.rs b/src/firecracker/src/seccomp.rs index 5b7e5cc4695..5794d6498a8 100644 --- a/src/firecracker/src/seccomp.rs +++ b/src/firecracker/src/seccomp.rs @@ -119,7 +119,7 @@ mod tests { use std::sync::Arc; use seccompiler::BpfThreadMap; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; diff --git a/src/jailer/Cargo.toml b/src/jailer/Cargo.toml index 95b02784ec7..aeda2959c13 100644 --- a/src/jailer/Cargo.toml +++ b/src/jailer/Cargo.toml @@ -17,6 +17,7 @@ log-instrument = { path = "../log-instrument", optional = true } nix = { version = "0.29.0", default-features = false, features = ["dir"] } regex = { version = "1.10.6", default-features = false, features = ["std"] } thiserror = "1.0.63" +vmm-sys-util = "0.12.1" utils = { path = "../utils" } diff --git a/src/jailer/src/cgroup.rs b/src/jailer/src/cgroup.rs index 57c5b60dda9..e49b1acb317 100644 --- a/src/jailer/src/cgroup.rs +++ b/src/jailer/src/cgroup.rs @@ -504,7 +504,7 @@ pub mod test_util { use std::io::Write; use std::path::{Path, PathBuf}; - use utils::rand; + use vmm_sys_util::rand; #[derive(Debug)] pub struct MockCgroupFs { @@ -617,8 +617,8 @@ mod tests { use std::io::{BufReader, Write}; use std::path::PathBuf; - use utils::tempdir::TempDir; - use utils::tempfile::TempFile; + use vmm_sys_util::tempdir::TempDir; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::cgroup::test_util::MockCgroupFs; diff --git a/src/jailer/src/chroot.rs b/src/jailer/src/chroot.rs index 85b072a5cf1..44386729196 100644 --- a/src/jailer/src/chroot.rs +++ b/src/jailer/src/chroot.rs @@ -6,7 +6,7 @@ use std::ffi::CStr; use std::path::Path; use std::ptr::null; -use utils::syscall::SyscallReturnCode; +use vmm_sys_util::syscall::SyscallReturnCode; use super::{to_cstring, JailerError}; diff --git a/src/jailer/src/env.rs b/src/jailer/src/env.rs index 2e4efba0494..a0c37eac540 100644 --- a/src/jailer/src/env.rs +++ b/src/jailer/src/env.rs @@ -12,8 +12,9 @@ use std::process::{exit, id, Command, Stdio}; use std::{fmt, io}; use utils::arg_parser::UtilsArgParserError::MissingValue; -use utils::syscall::SyscallReturnCode; +use utils::time::{get_time_us, ClockType}; use utils::{arg_parser, validators}; +use vmm_sys_util::syscall::SyscallReturnCode; use crate::cgroup::{CgroupConfiguration, CgroupConfigurationBuilder}; use crate::chroot::chroot; @@ -663,7 +664,7 @@ impl Env { // Daemonize before exec, if so required (when the dev_null variable != None). if let Some(dev_null) = dev_null { // Meter CPU usage before fork() - self.jailer_cpu_time_us = utils::time::get_time_us(utils::time::ClockType::ProcessCpu); + self.jailer_cpu_time_us = get_time_us(ClockType::ProcessCpu); // We follow the double fork method to daemonize the jailer referring to // https://0xjet.github.io/3OHA/2022/04/11/post.html @@ -688,7 +689,7 @@ impl Env { .map_err(JailerError::SetSid)?; // Meter CPU usage before fork() - self.jailer_cpu_time_us += utils::time::get_time_us(utils::time::ClockType::ProcessCpu); + self.jailer_cpu_time_us += get_time_us(ClockType::ProcessCpu); // Daemons should not have controlling terminals. // If a daemon has a controlling terminal, it can receive signals @@ -714,8 +715,7 @@ impl Env { } // Compute jailer's total CPU time up to the current time. - self.jailer_cpu_time_us += - utils::time::get_time_us(utils::time::ClockType::ProcessCpu) - self.start_time_cpu_us; + self.jailer_cpu_time_us += get_time_us(ClockType::ProcessCpu) - self.start_time_cpu_us; // Reset process start time. self.start_time_cpu_us = 0; @@ -736,9 +736,9 @@ mod tests { use std::fs::create_dir_all; use std::os::linux::fs::MetadataExt; - use utils::rand; - use utils::tempdir::TempDir; - use utils::tempfile::TempFile; + use vmm_sys_util::rand; + use vmm_sys_util::tempdir::TempDir; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::build_arg_parser; diff --git a/src/jailer/src/main.rs b/src/jailer/src/main.rs index 447f685d99d..4e00c14762a 100644 --- a/src/jailer/src/main.rs +++ b/src/jailer/src/main.rs @@ -8,8 +8,9 @@ use std::{env as p_env, fs, io}; use env::PROC_MOUNTS; use utils::arg_parser::{ArgParser, Argument, UtilsArgParserError as ParsingError}; -use utils::syscall::SyscallReturnCode; +use utils::time::{get_time_us, ClockType}; use utils::validators; +use vmm_sys_util::syscall::SyscallReturnCode; use crate::env::Env; @@ -334,8 +335,8 @@ fn main_exec() -> Result<(), JailerError> { Env::new( arguments, - utils::time::get_time_us(utils::time::ClockType::Monotonic), - utils::time::get_time_us(utils::time::ClockType::ProcessCpu), + get_time_us(ClockType::Monotonic), + get_time_us(ClockType::ProcessCpu), PROC_MOUNTS, ) .and_then(|env| { @@ -356,7 +357,7 @@ mod tests { use std::fs::File; use std::os::unix::io::IntoRawFd; - use utils::rand; + use vmm_sys_util::rand; use super::*; diff --git a/src/jailer/src/resource_limits.rs b/src/jailer/src/resource_limits.rs index 4c3f488b9fb..0ca4c3460db 100644 --- a/src/jailer/src/resource_limits.rs +++ b/src/jailer/src/resource_limits.rs @@ -4,7 +4,7 @@ use std::fmt; use std::fmt::{Display, Formatter}; -use utils::syscall::SyscallReturnCode; +use vmm_sys_util::syscall::SyscallReturnCode; use super::JailerError; diff --git a/src/rebase-snap/Cargo.toml b/src/rebase-snap/Cargo.toml index 80dac38f862..4058ccb7a18 100644 --- a/src/rebase-snap/Cargo.toml +++ b/src/rebase-snap/Cargo.toml @@ -14,6 +14,7 @@ displaydoc = "0.2.5" libc = "0.2.158" log-instrument = { path = "../log-instrument", optional = true } thiserror = "1.0.63" +vmm-sys-util = "0.12.1" utils = { path = "../utils" } diff --git a/src/rebase-snap/src/main.rs b/src/rebase-snap/src/main.rs index 088b25c31bf..20fd23c416d 100644 --- a/src/rebase-snap/src/main.rs +++ b/src/rebase-snap/src/main.rs @@ -7,8 +7,7 @@ use std::io::{Seek, SeekFrom}; use std::os::unix::io::AsRawFd; use utils::arg_parser::{ArgParser, Argument, Arguments, UtilsArgParserError as ArgError}; -use utils::seek_hole::SeekHole; -use utils::u64_to_usize; +use vmm_sys_util::seek_hole::SeekHole; const REBASE_SNAP_VERSION: &str = env!("CARGO_PKG_VERSION"); const BASE_FILE: &str = "base-file"; @@ -104,7 +103,7 @@ fn rebase(base_file: &mut File, diff_file: &mut File) -> Result<(), FileError> { base_file.as_raw_fd(), diff_file.as_raw_fd(), (&mut cursor as *mut u64).cast::(), - u64_to_usize(block_end.saturating_sub(cursor)), + usize::try_from(block_end.saturating_sub(cursor)).unwrap(), ) }; if num_transferred_bytes < 0 { @@ -161,7 +160,7 @@ mod tests { use std::io::{Seek, SeekFrom, Write}; use std::os::unix::fs::FileExt; - use utils::{rand, tempfile}; + use vmm_sys_util::{rand, tempfile}; use super::*; diff --git a/src/seccompiler/Cargo.toml b/src/seccompiler/Cargo.toml index 2d997696a04..19d86ddefb4 100644 --- a/src/seccompiler/Cargo.toml +++ b/src/seccompiler/Cargo.toml @@ -26,6 +26,9 @@ thiserror = "1.0.63" utils = { path = "../utils" } +[dev-dependencies] +vmm-sys-util = "0.12.1" + [features] tracing = ["log-instrument", "utils/tracing"] diff --git a/src/seccompiler/src/seccompiler_bin.rs b/src/seccompiler/src/seccompiler_bin.rs index c6c97690bf6..890a2a3ecdb 100644 --- a/src/seccompiler/src/seccompiler_bin.rs +++ b/src/seccompiler/src/seccompiler_bin.rs @@ -214,7 +214,7 @@ mod tests { use std::path::PathBuf; use bincode::Error as BincodeError; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::compiler::CompilationError as FilterFormatError; use super::{ diff --git a/src/snapshot-editor/Cargo.toml b/src/snapshot-editor/Cargo.toml index a042b7a829f..1449e8b9f93 100644 --- a/src/snapshot-editor/Cargo.toml +++ b/src/snapshot-editor/Cargo.toml @@ -19,6 +19,7 @@ log-instrument = { path = "../log-instrument", optional = true } semver = "1.0.23" thiserror = "1.0.63" vmm = { path = "../vmm" } +vmm-sys-util = "0.12.1" [target.'cfg(target_arch = "aarch64")'.dependencies] clap-num = "1.0.2" diff --git a/src/snapshot-editor/src/edit_memory.rs b/src/snapshot-editor/src/edit_memory.rs index 6b092931393..015354adfc0 100644 --- a/src/snapshot-editor/src/edit_memory.rs +++ b/src/snapshot-editor/src/edit_memory.rs @@ -7,8 +7,8 @@ use std::os::fd::AsRawFd; use std::path::PathBuf; use clap::Subcommand; -use fc_utils::seek_hole::SeekHole; -use fc_utils::u64_to_usize; +use vmm::utils::u64_to_usize; +use vmm_sys_util::seek_hole::SeekHole; #[derive(Debug, thiserror::Error, displaydoc::Display)] pub enum EditMemoryError { @@ -108,7 +108,7 @@ mod tests { use std::io::{Seek, SeekFrom, Write}; use std::os::unix::fs::FileExt; - use fc_utils::{rand, tempfile}; + use vmm_sys_util::{rand, tempfile}; use super::*; diff --git a/src/snapshot-editor/src/utils.rs b/src/snapshot-editor/src/utils.rs index 3bccf46917b..bdbc6f48d6e 100644 --- a/src/snapshot-editor/src/utils.rs +++ b/src/snapshot-editor/src/utils.rs @@ -4,10 +4,10 @@ use std::fs::{File, OpenOptions}; use std::path::PathBuf; -use fc_utils::u64_to_usize; use semver::Version; use vmm::persist::MicrovmState; use vmm::snapshot::Snapshot; +use vmm::utils::u64_to_usize; // Some errors are only used in aarch64 code #[allow(unused)] diff --git a/src/utils/Cargo.toml b/src/utils/Cargo.toml index ce6827d0c82..72bda2503de 100644 --- a/src/utils/Cargo.toml +++ b/src/utils/Cargo.toml @@ -16,7 +16,7 @@ log-instrument = { path = "../log-instrument", optional = true } serde = { version = "1.0.210", features = ["derive"] } thiserror = "1.0.63" vm-memory = { version = "0.14.1", features = ["backend-mmap", "backend-bitmap"] } -vmm-sys-util = { version = "0.12.1", features = ["with-serde"] } +vmm-sys-util = "0.12.1" [dev-dependencies] serde_json = "1.0.128" diff --git a/src/utils/src/lib.rs b/src/utils/src/lib.rs index c16dddce0d4..5c0b8271b5c 100644 --- a/src/utils/src/lib.rs +++ b/src/utils/src/lib.rs @@ -1,56 +1,6 @@ // Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -// We use `utils` as a wrapper over `vmm_sys_util` to control the latter -// dependency easier (i.e. update only in one place `vmm_sys_util` version). -// More specifically, we are re-exporting modules from `vmm_sys_util` as part -// of the `utils` crate. -pub use vmm_sys_util::ioctl::ioctl_expr; -pub use vmm_sys_util::{ - epoll, errno, eventfd, fam, generate_fam_struct_impl, ioctl, ioctl_ioc_nr, ioctl_iow_nr, rand, - seek_hole, sock_ctrl_msg, syscall, tempdir, tempfile, terminal, -}; - pub mod arg_parser; -pub mod byte_order; -pub mod net; -pub mod signal; -pub mod sm; pub mod time; pub mod validators; - -use std::num::Wrapping; -use std::result::Result; - -/// Return the default page size of the platform, in bytes. -pub fn get_page_size() -> Result { - // SAFETY: Safe because the parameters are valid. - match unsafe { libc::sysconf(libc::_SC_PAGESIZE) } { - -1 => Err(errno::Error::last()), - ps => Ok(usize::try_from(ps).unwrap()), - } -} - -/// Safely converts a u64 value to a usize value. -/// This bypasses the Clippy lint check because we only support 64-bit platforms. -#[cfg(target_pointer_width = "64")] -#[inline] -#[allow(clippy::cast_possible_truncation)] -pub const fn u64_to_usize(num: u64) -> usize { - num as usize -} - -/// Safely converts a usize value to a u64 value. -/// This bypasses the Clippy lint check because we only support 64-bit platforms. -#[cfg(target_pointer_width = "64")] -#[inline] -#[allow(clippy::cast_possible_truncation)] -pub const fn usize_to_u64(num: usize) -> u64 { - num as u64 -} - -/// Converts a usize into a wrapping u32. -#[inline] -pub const fn wrap_usize_to_u32(num: usize) -> Wrapping { - Wrapping(((num as u64) & 0xFFFFFFFF) as u32) -} diff --git a/src/vmm/Cargo.toml b/src/vmm/Cargo.toml index d91eacfee6d..e8815464440 100644 --- a/src/vmm/Cargo.toml +++ b/src/vmm/Cargo.toml @@ -43,6 +43,7 @@ vhost = { version = "0.11.0", features = ["vhost-user-frontend"] } vm-allocator = "0.1.0" vm-memory = { version = "0.14.1", features = ["backend-mmap", "backend-bitmap"] } vm-superio = "0.8.0" +vmm-sys-util = { version = "0.12.1", features = ["with-serde"] } zerocopy = { version = "0.7.35" } [target.'cfg(target_arch = "aarch64")'.dependencies] diff --git a/src/vmm/benches/block_request.rs b/src/vmm/benches/block_request.rs index 17937dd0242..92989f7693b 100644 --- a/src/vmm/benches/block_request.rs +++ b/src/vmm/benches/block_request.rs @@ -11,7 +11,7 @@ use vm_memory::GuestAddress; use vmm::devices::virtio::block::virtio::test_utils::RequestDescriptorChain; use vmm::devices::virtio::block::virtio::{Request, RequestHeader, VIRTIO_BLK_T_IN}; use vmm::devices::virtio::test_utils::VirtQueue; -use vmm::utilities::test_utils::single_region_mem; +use vmm::test_utils::single_region_mem; pub fn block_request_benchmark(c: &mut Criterion) { let mem = single_region_mem(2 * 65562); diff --git a/src/vmm/benches/queue.rs b/src/vmm/benches/queue.rs index de4e94ee27f..168ecec33bb 100644 --- a/src/vmm/benches/queue.rs +++ b/src/vmm/benches/queue.rs @@ -12,7 +12,7 @@ use criterion::{criterion_group, criterion_main, Criterion}; use vm_memory::GuestAddress; use vmm::devices::virtio::queue::{VIRTQ_DESC_F_NEXT, VIRTQ_DESC_F_WRITE}; use vmm::devices::virtio::test_utils::VirtQueue; -use vmm::utilities::test_utils::single_region_mem; +use vmm::test_utils::single_region_mem; /// Create one chain with n descriptors /// Descriptor buffers will leave at the offset of 2048 bytes diff --git a/src/vmm/src/acpi/mod.rs b/src/vmm/src/acpi/mod.rs index ad108217d08..75de9edfebc 100644 --- a/src/vmm/src/acpi/mod.rs +++ b/src/vmm/src/acpi/mod.rs @@ -186,7 +186,7 @@ pub mod tests { use crate::acpi::{AcpiError, AcpiTableWriter}; use crate::arch::x86_64::layout::{SYSTEM_MEM_SIZE, SYSTEM_MEM_START}; use crate::builder::tests::default_vmm; - use crate::utilities::test_utils::arch_mem; + use crate::test_utils::arch_mem; struct MockSdt(Vec); diff --git a/src/vmm/src/arch/aarch64/fdt.rs b/src/vmm/src/arch/aarch64/fdt.rs index cbc7884cf98..71dc401fb32 100644 --- a/src/vmm/src/arch/aarch64/fdt.rs +++ b/src/vmm/src/arch/aarch64/fdt.rs @@ -460,7 +460,7 @@ mod tests { use crate::arch::aarch64::gic::create_gic; use crate::arch::aarch64::layout; use crate::device_manager::resources::ResourceAllocator; - use crate::utilities::test_utils::arch_mem; + use crate::test_utils::arch_mem; const LEN: u64 = 4096; diff --git a/src/vmm/src/arch/aarch64/mod.rs b/src/vmm/src/arch/aarch64/mod.rs index 7ed72789325..0cb6f1ed9ba 100644 --- a/src/vmm/src/arch/aarch64/mod.rs +++ b/src/vmm/src/arch/aarch64/mod.rs @@ -117,7 +117,7 @@ fn get_fdt_addr(mem: &GuestMemoryMmap) -> u64 { #[cfg(test)] mod tests { use super::*; - use crate::utilities::test_utils::arch_mem; + use crate::test_utils::arch_mem; #[test] fn test_regions_lt_1024gb() { diff --git a/src/vmm/src/arch/aarch64/vcpu.rs b/src/vmm/src/arch/aarch64/vcpu.rs index 6368b73dc17..5c08f95351a 100644 --- a/src/vmm/src/arch/aarch64/vcpu.rs +++ b/src/vmm/src/arch/aarch64/vcpu.rs @@ -29,7 +29,7 @@ pub enum VcpuError { /// Failed to set multiprocessor state: {0} SetMp(kvm_ioctls::Error), /// Failed FamStructWrapper operation: {0} - Fam(utils::fam::Error), + Fam(vmm_sys_util::fam::Error), /// {0} GetMidrEl1(String), } @@ -218,7 +218,7 @@ mod tests { use super::*; use crate::arch::aarch64::layout; - use crate::utilities::test_utils::arch_mem; + use crate::test_utils::arch_mem; #[test] fn test_setup_regs() { diff --git a/src/vmm/src/arch/x86_64/interrupts.rs b/src/vmm/src/arch/x86_64/interrupts.rs index c211a6e6085..8b7bf8bc793 100644 --- a/src/vmm/src/arch/x86_64/interrupts.rs +++ b/src/vmm/src/arch/x86_64/interrupts.rs @@ -7,7 +7,8 @@ use kvm_bindings::kvm_lapic_state; use kvm_ioctls::VcpuFd; -use utils::byte_order; + +use crate::utils::byte_order; /// Errors thrown while configuring the LAPIC. #[derive(Debug, thiserror::Error, displaydoc::Display, PartialEq, Eq)] @@ -103,7 +104,9 @@ mod tests { #[test] fn test_apic_delivery_mode() { - let mut v: Vec = (0..20).map(|_| utils::rand::xor_pseudo_rng_u32()).collect(); + let mut v: Vec = (0..20) + .map(|_| vmm_sys_util::rand::xor_pseudo_rng_u32()) + .collect(); v.iter_mut() .for_each(|x| *x = set_apic_delivery_mode(*x, 2)); diff --git a/src/vmm/src/arch/x86_64/mod.rs b/src/vmm/src/arch/x86_64/mod.rs index 575895871cb..1066d9734c3 100644 --- a/src/vmm/src/arch/x86_64/mod.rs +++ b/src/vmm/src/arch/x86_64/mod.rs @@ -24,10 +24,10 @@ pub mod gen; use linux_loader::configurator::linux::LinuxBootConfigurator; use linux_loader::configurator::{BootConfigurator, BootParams}; use linux_loader::loader::bootparam::boot_params; -use utils::u64_to_usize; use crate::arch::InitrdConfig; use crate::device_manager::resources::ResourceAllocator; +use crate::utils::u64_to_usize; use crate::vstate::memory::{ Address, GuestAddress, GuestMemory, GuestMemoryMmap, GuestMemoryRegion, }; @@ -222,7 +222,7 @@ mod tests { use linux_loader::loader::bootparam::boot_e820_entry; use super::*; - use crate::utilities::test_utils::{arch_mem, single_region_mem}; + use crate::test_utils::{arch_mem, single_region_mem}; #[test] fn regions_lt_4gb() { diff --git a/src/vmm/src/arch/x86_64/mptable.rs b/src/vmm/src/arch/x86_64/mptable.rs index 5558bdc3a37..9944ecee8fb 100644 --- a/src/vmm/src/arch/x86_64/mptable.rs +++ b/src/vmm/src/arch/x86_64/mptable.rs @@ -316,7 +316,7 @@ mod tests { use super::*; use crate::arch::SYSTEM_MEM_START; - use crate::utilities::test_utils::single_region_mem_at; + use crate::test_utils::single_region_mem_at; use crate::vstate::memory::Bytes; fn table_entry_size(type_: u8) -> usize { diff --git a/src/vmm/src/arch/x86_64/msr.rs b/src/vmm/src/arch/x86_64/msr.rs index d08caf9301d..325d6ed6b29 100644 --- a/src/vmm/src/arch/x86_64/msr.rs +++ b/src/vmm/src/arch/x86_64/msr.rs @@ -16,7 +16,7 @@ use crate::cpu_config::x86_64::cpuid::common::GetCpuidError; /// MSR related errors. pub enum MsrError { /// Failed to create `vmm_sys_util::fam::FamStructWrapper` for MSRs - Fam(#[from] utils::fam::Error), + Fam(#[from] vmm_sys_util::fam::Error), /// Failed to get MSR index list: {0} GetMsrIndexList(kvm_ioctls::Error), /// Invalid CPU vendor: {0} diff --git a/src/vmm/src/arch/x86_64/regs.rs b/src/vmm/src/arch/x86_64/regs.rs index 2cf9e25bbfc..aec47677c4c 100644 --- a/src/vmm/src/arch/x86_64/regs.rs +++ b/src/vmm/src/arch/x86_64/regs.rs @@ -44,7 +44,7 @@ pub enum RegsError { /// Error type for [`setup_fpu`]. #[derive(Debug, derive_more::From, PartialEq, Eq, thiserror::Error)] #[error("Failed to setup FPU: {0}")] -pub struct SetupFpuError(utils::errno::Error); +pub struct SetupFpuError(vmm_sys_util::errno::Error); /// Configure Floating-Point Unit (FPU) registers for a given CPU. /// @@ -68,7 +68,7 @@ pub fn setup_fpu(vcpu: &VcpuFd) -> Result<(), SetupFpuError> { /// Error type of [`setup_regs`]. #[derive(Debug, derive_more::From, PartialEq, Eq, thiserror::Error)] #[error("Failed to setup registers: {0}")] -pub struct SetupRegistersError(utils::errno::Error); +pub struct SetupRegistersError(vmm_sys_util::errno::Error); /// Configure base registers for a given CPU. /// @@ -103,13 +103,13 @@ pub fn setup_regs(vcpu: &VcpuFd, boot_ip: u64) -> Result<(), SetupRegistersError #[derive(Debug, thiserror::Error, displaydoc::Display, PartialEq, Eq)] pub enum SetupSpecialRegistersError { /// Failed to get special registers: {0} - GetSpecialRegisters(utils::errno::Error), + GetSpecialRegisters(vmm_sys_util::errno::Error), /// Failed to configure segments and special registers: {0} ConfigureSegmentsAndSpecialRegisters(RegsError), /// Failed to setup page tables: {0} SetupPageTables(RegsError), /// Failed to set special registers: {0} - SetSpecialRegisters(utils::errno::Error), + SetSpecialRegisters(vmm_sys_util::errno::Error), } /// Configures the special registers and system page tables for a given CPU. @@ -243,7 +243,7 @@ mod tests { use kvm_ioctls::Kvm; use super::*; - use crate::utilities::test_utils::single_region_mem; + use crate::test_utils::single_region_mem; use crate::vstate::memory::{Bytes, GuestAddress, GuestMemoryMmap}; fn read_u64(gm: &GuestMemoryMmap, offset: u64) -> u64 { diff --git a/src/vmm/src/builder.rs b/src/vmm/src/builder.rs index 27d2ce72dad..9ef8b4f620c 100644 --- a/src/vmm/src/builder.rs +++ b/src/vmm/src/builder.rs @@ -19,13 +19,12 @@ use linux_loader::loader::pe::PE as Loader; use linux_loader::loader::KernelLoader; use seccompiler::BpfThreadMap; use userfaultfd::Uffd; -use utils::eventfd::EventFd; use utils::time::TimestampUs; -use utils::u64_to_usize; use vm_memory::ReadVolatile; #[cfg(target_arch = "aarch64")] use vm_superio::Rtc; use vm_superio::Serial; +use vmm_sys_util::eventfd::EventFd; #[cfg(target_arch = "x86_64")] use crate::acpi; @@ -61,6 +60,7 @@ use crate::logger::{debug, error}; use crate::persist::{MicrovmState, MicrovmStateError}; use crate::resources::VmResources; use crate::snapshot::Persist; +use crate::utils::u64_to_usize; use crate::vmm_config::boot_source::BootConfig; use crate::vmm_config::instance_info::InstanceInfo; use crate::vmm_config::machine_config::{VmConfig, VmConfigError}; @@ -412,7 +412,7 @@ pub enum BuildMicrovmFromSnapshotError { /// Failed to create microVM and vCPUs: {0} CreateMicrovmAndVcpus(#[from] StartMicrovmError), /// Could not access KVM: {0} - KvmAccess(#[from] utils::errno::Error), + KvmAccess(#[from] vmm_sys_util::errno::Error), /// Error configuring the TSC, frequency not present in the given snapshot. TscFrequencyNotPresent, #[cfg(target_arch = "x86_64")] @@ -1022,7 +1022,7 @@ pub mod tests { use std::io::Write; use linux_loader::cmdline::Cmdline; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::arch::DeviceType; @@ -1033,7 +1033,7 @@ pub mod tests { use crate::devices::virtio::{TYPE_BALLOON, TYPE_BLOCK, TYPE_RNG}; use crate::mmds::data_store::{Mmds, MmdsVersion}; use crate::mmds::ns::MmdsNetworkStack; - use crate::utilities::test_utils::{arch_mem, single_region_mem, single_region_mem_at}; + use crate::test_utils::{arch_mem, single_region_mem, single_region_mem_at}; use crate::vmm_config::balloon::{BalloonBuilder, BalloonDeviceConfig, BALLOON_DEV_ID}; use crate::vmm_config::boot_source::DEFAULT_KERNEL_CMDLINE; use crate::vmm_config::drive::{BlockBuilder, BlockDeviceConfig}; diff --git a/src/vmm/src/cpu_config/x86_64/cpuid/mod.rs b/src/vmm/src/cpu_config/x86_64/cpuid/mod.rs index ea5dbd6d286..2350d30479d 100644 --- a/src/vmm/src/cpu_config/x86_64/cpuid/mod.rs +++ b/src/vmm/src/cpu_config/x86_64/cpuid/mod.rs @@ -410,7 +410,7 @@ impl TryFrom for Cpuid { } impl TryFrom for kvm_bindings::CpuId { - type Error = utils::fam::Error; + type Error = vmm_sys_util::fam::Error; fn try_from(cpuid: Cpuid) -> Result { let entries = cpuid diff --git a/src/vmm/src/device_manager/legacy.rs b/src/vmm/src/device_manager/legacy.rs index 7c4a0719900..dc46a5172d3 100644 --- a/src/vmm/src/device_manager/legacy.rs +++ b/src/vmm/src/device_manager/legacy.rs @@ -12,8 +12,8 @@ use std::sync::{Arc, Mutex}; use acpi_tables::{aml, Aml}; use kvm_ioctls::VmFd; use libc::EFD_NONBLOCK; -use utils::eventfd::EventFd; use vm_superio::Serial; +use vmm_sys_util::eventfd::EventFd; use crate::devices::bus::BusDevice; use crate::devices::legacy::serial::SerialOut; @@ -238,7 +238,7 @@ impl PortIODeviceManager { #[cfg(test)] mod tests { use super::*; - use crate::utilities::test_utils::single_region_mem; + use crate::test_utils::single_region_mem; use crate::Vm; #[test] diff --git a/src/vmm/src/device_manager/mmio.rs b/src/vmm/src/device_manager/mmio.rs index c63f7fb513f..cba9047d564 100644 --- a/src/vmm/src/device_manager/mmio.rs +++ b/src/vmm/src/device_manager/mmio.rs @@ -529,13 +529,13 @@ mod tests { use std::sync::Arc; - use utils::eventfd::EventFd; + use vmm_sys_util::eventfd::EventFd; use super::*; use crate::devices::virtio::device::{IrqTrigger, VirtioDevice}; use crate::devices::virtio::queue::Queue; use crate::devices::virtio::ActivateError; - use crate::utilities::test_utils::multi_region_mem; + use crate::test_utils::multi_region_mem; use crate::vstate::memory::{GuestAddress, GuestMemoryMmap}; use crate::{builder, Vm}; diff --git a/src/vmm/src/device_manager/persist.rs b/src/vmm/src/device_manager/persist.rs index 7a51bf790e9..3a2a49c4811 100644 --- a/src/vmm/src/device_manager/persist.rs +++ b/src/vmm/src/device_manager/persist.rs @@ -652,7 +652,7 @@ impl<'a> Persist<'a> for MMIODeviceManager { #[cfg(test)] mod tests { - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::builder::tests::*; diff --git a/src/vmm/src/devices/acpi/vmgenid.rs b/src/vmm/src/devices/acpi/vmgenid.rs index 47fb456e7ae..24220577ccf 100644 --- a/src/vmm/src/devices/acpi/vmgenid.rs +++ b/src/vmm/src/devices/acpi/vmgenid.rs @@ -6,9 +6,9 @@ use aws_lc_rs::error::Unspecified as RandError; use aws_lc_rs::rand; use log::{debug, error}; use serde::{Deserialize, Serialize}; -use utils::eventfd::EventFd; use vm_memory::{GuestAddress, GuestMemoryError}; use vm_superio::Trigger; +use vmm_sys_util::eventfd::EventFd; use super::super::legacy::EventFdTrigger; use crate::device_manager::resources::ResourceAllocator; diff --git a/src/vmm/src/devices/legacy/i8042.rs b/src/vmm/src/devices/legacy/i8042.rs index b84f8c43f5d..8f965cab912 100644 --- a/src/vmm/src/devices/legacy/i8042.rs +++ b/src/vmm/src/devices/legacy/i8042.rs @@ -10,7 +10,7 @@ use std::num::Wrapping; use log::warn; use serde::Serialize; -use utils::eventfd::EventFd; +use vmm_sys_util::eventfd::EventFd; use crate::logger::{error, IncMetric, SharedIncMetric}; diff --git a/src/vmm/src/devices/legacy/mod.rs b/src/vmm/src/devices/legacy/mod.rs index 224f77c7bb0..25f332b9617 100644 --- a/src/vmm/src/devices/legacy/mod.rs +++ b/src/vmm/src/devices/legacy/mod.rs @@ -16,8 +16,8 @@ use std::ops::Deref; use serde::ser::SerializeMap; use serde::Serializer; -use utils::eventfd::EventFd; use vm_superio::Trigger; +use vmm_sys_util::eventfd::EventFd; pub use self::i8042::{I8042Device, I8042Error as I8042DeviceError}; #[cfg(target_arch = "aarch64")] diff --git a/src/vmm/src/devices/legacy/serial.rs b/src/vmm/src/devices/legacy/serial.rs index d711d94f608..cd74159dbdc 100644 --- a/src/vmm/src/devices/legacy/serial.rs +++ b/src/vmm/src/devices/legacy/serial.rs @@ -14,9 +14,9 @@ use std::os::unix::io::{AsRawFd, RawFd}; use event_manager::{EventOps, Events, MutEventSubscriber}; use log::{error, warn}; use serde::Serialize; -use utils::epoll::EventSet; use vm_superio::serial::{Error as SerialError, SerialEvents}; use vm_superio::{Serial, Trigger}; +use vmm_sys_util::epoll::EventSet; use crate::devices::legacy::EventFdTrigger; use crate::logger::{IncMetric, SharedIncMetric}; @@ -365,7 +365,7 @@ impl mod tests { #![allow(clippy::undocumented_unsafe_blocks)] - use utils::eventfd::EventFd; + use vmm_sys_util::eventfd::EventFd; use super::*; use crate::logger::IncMetric; @@ -419,7 +419,7 @@ mod tests { assert!(is_fifo(fds[1])); // Files arent fifos - let tmp_file = utils::tempfile::TempFile::new().unwrap(); + let tmp_file = vmm_sys_util::tempfile::TempFile::new().unwrap(); assert!(!is_fifo(tmp_file.as_file().as_raw_fd())); } diff --git a/src/vmm/src/devices/virtio/balloon/device.rs b/src/vmm/src/devices/virtio/balloon/device.rs index 98ed8332ac8..697928ae9c6 100644 --- a/src/vmm/src/devices/virtio/balloon/device.rs +++ b/src/vmm/src/devices/virtio/balloon/device.rs @@ -7,8 +7,7 @@ use std::time::Duration; use log::error; use serde::Serialize; use timerfd::{ClockId, SetTimeFlags, TimerFd, TimerState}; -use utils::eventfd::EventFd; -use utils::u64_to_usize; +use vmm_sys_util::eventfd::EventFd; use super::super::device::{DeviceState, VirtioDevice}; use super::super::queue::Queue; @@ -28,6 +27,7 @@ use crate::devices::virtio::balloon::BalloonError; use crate::devices::virtio::device::{IrqTrigger, IrqType}; use crate::devices::virtio::gen::virtio_blk::VIRTIO_F_VERSION_1; use crate::logger::IncMetric; +use crate::utils::u64_to_usize; use crate::vstate::memory::{Address, ByteValued, Bytes, GuestAddress, GuestMemoryMmap}; const SIZE_OF_U32: usize = std::mem::size_of::(); @@ -637,7 +637,7 @@ pub(crate) mod tests { }; use crate::devices::virtio::queue::{VIRTQ_DESC_F_NEXT, VIRTQ_DESC_F_WRITE}; use crate::devices::virtio::test_utils::{default_mem, VirtQueue}; - use crate::utilities::test_utils::single_region_mem; + use crate::test_utils::single_region_mem; use crate::vstate::memory::GuestAddress; impl Balloon { diff --git a/src/vmm/src/devices/virtio/balloon/event_handler.rs b/src/vmm/src/devices/virtio/balloon/event_handler.rs index 283f8bc1457..3019d6877de 100644 --- a/src/vmm/src/devices/virtio/balloon/event_handler.rs +++ b/src/vmm/src/devices/virtio/balloon/event_handler.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use event_manager::{EventOps, Events, MutEventSubscriber}; -use utils::epoll::EventSet; +use vmm_sys_util::epoll::EventSet; use super::{report_balloon_event_fail, DEFLATE_INDEX, INFLATE_INDEX, STATS_INDEX}; use crate::devices::virtio::balloon::device::Balloon; diff --git a/src/vmm/src/devices/virtio/balloon/util.rs b/src/vmm/src/devices/virtio/balloon/util.rs index 486c25e884b..f8cf7aa2000 100644 --- a/src/vmm/src/devices/virtio/balloon/util.rs +++ b/src/vmm/src/devices/virtio/balloon/util.rs @@ -3,10 +3,9 @@ use std::io; -use utils::u64_to_usize; - use super::{RemoveRegionError, MAX_PAGE_COMPACT_BUFFER}; use crate::logger::error; +use crate::utils::u64_to_usize; use crate::vstate::memory::{GuestAddress, GuestMemory, GuestMemoryMmap, GuestMemoryRegion}; /// This takes a vector of page frame numbers, and compacts them @@ -263,7 +262,7 @@ mod tests { /// BEGIN PROPERTY BASED TESTING use proptest::prelude::*; - use crate::utilities::test_utils::single_region_mem; + use crate::test_utils::single_region_mem; #[allow(clippy::let_with_type_underscore)] fn random_pfn_u32_max() -> impl Strategy> { diff --git a/src/vmm/src/devices/virtio/block/device.rs b/src/vmm/src/devices/virtio/block/device.rs index fe201f7246d..7399fe39a0b 100644 --- a/src/vmm/src/devices/virtio/block/device.rs +++ b/src/vmm/src/devices/virtio/block/device.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use event_manager::{EventOps, Events, MutEventSubscriber}; -use utils::eventfd::EventFd; +use vmm_sys_util::eventfd::EventFd; use super::persist::{BlockConstructorArgs, BlockState}; use super::vhost_user::device::{VhostUserBlock, VhostUserBlockConfig}; diff --git a/src/vmm/src/devices/virtio/block/vhost_user/device.rs b/src/vmm/src/devices/virtio/block/vhost_user/device.rs index 627984d1bb5..62218157c8b 100644 --- a/src/vmm/src/devices/virtio/block/vhost_user/device.rs +++ b/src/vmm/src/devices/virtio/block/vhost_user/device.rs @@ -7,10 +7,10 @@ use std::sync::Arc; use log::error; -use utils::eventfd::EventFd; -use utils::u64_to_usize; +use utils::time::{get_time_us, ClockType}; use vhost::vhost_user::message::*; use vhost::vhost_user::Frontend; +use vmm_sys_util::eventfd::EventFd; use super::{VhostUserBlockError, NUM_QUEUES, QUEUE_SIZE}; use crate::devices::virtio::block::CacheType; @@ -26,6 +26,7 @@ use crate::devices::virtio::vhost_user_metrics::{ }; use crate::devices::virtio::{ActivateError, TYPE_BLOCK}; use crate::logger::{log_dev_preview_warning, IncMetric, StoreMetric}; +use crate::utils::u64_to_usize; use crate::vmm_config::drive::BlockDeviceConfig; use crate::vstate::memory::GuestMemoryMmap; @@ -162,7 +163,7 @@ impl std::fmt::Debug for VhostUserBlockImpl { impl VhostUserBlockImpl { pub fn new(config: VhostUserBlockConfig) -> Result { log_dev_preview_warning("vhost-user-blk device", Option::None); - let start_time = utils::time::get_time_us(utils::time::ClockType::Monotonic); + let start_time = get_time_us(ClockType::Monotonic); let mut requested_features = AVAILABLE_FEATURES; if config.cache_type == CacheType::Writeback { @@ -213,7 +214,7 @@ impl VhostUserBlockImpl { let vhost_user_block_metrics_name = format!("block_{}", config.drive_id); let metrics = VhostUserMetricsPerDevice::alloc(vhost_user_block_metrics_name); - let delta_us = utils::time::get_time_us(utils::time::ClockType::Monotonic) - start_time; + let delta_us = get_time_us(ClockType::Monotonic) - start_time; metrics.init_time_us.store(delta_us); Ok(Self { @@ -255,7 +256,7 @@ impl VhostUserBlockImpl { } pub fn config_update(&mut self) -> Result<(), VhostUserBlockError> { - let start_time = utils::time::get_time_us(utils::time::ClockType::Monotonic); + let start_time = get_time_us(ClockType::Monotonic); // This buffer is used for config size check in vhost crate. let buffer = [0u8; BLOCK_CONFIG_SPACE_SIZE as usize]; @@ -274,7 +275,7 @@ impl VhostUserBlockImpl { .trigger_irq(IrqType::Config) .map_err(VhostUserBlockError::IrqTrigger)?; - let delta_us = utils::time::get_time_us(utils::time::ClockType::Monotonic) - start_time; + let delta_us = get_time_us(ClockType::Monotonic) - start_time; self.metrics.config_change_time_us.store(delta_us); Ok(()) @@ -336,7 +337,7 @@ impl VirtioDevice for VhostUserBlock .map_err(ActivateError::QueueMemoryError)?; } - let start_time = utils::time::get_time_us(utils::time::ClockType::Monotonic); + let start_time = get_time_us(ClockType::Monotonic); // Setting features again, because now we negotiated them // with guest driver as well. self.vu_handle @@ -353,7 +354,7 @@ impl VirtioDevice for VhostUserBlock ActivateError::VhostUser(err) })?; self.device_state = DeviceState::Activated(mem); - let delta_us = utils::time::get_time_us(utils::time::ClockType::Monotonic) - start_time; + let delta_us = get_time_us(ClockType::Monotonic) - start_time; self.metrics.activate_time_us.store(delta_us); Ok(()) } @@ -370,13 +371,13 @@ mod tests { use std::os::unix::net::UnixStream; use std::sync::atomic::Ordering; - use utils::tempfile::TempFile; use vhost::{VhostUserMemoryRegionInfo, VringConfigData}; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::devices::virtio::block::virtio::device::FileEngineType; use crate::devices::virtio::mmio::VIRTIO_MMIO_INT_CONFIG; - use crate::utilities::test_utils::create_tmp_socket; + use crate::test_utils::create_tmp_socket; use crate::vstate::memory::{FileOffset, GuestAddress, GuestMemoryExtension}; #[test] diff --git a/src/vmm/src/devices/virtio/block/vhost_user/event_handler.rs b/src/vmm/src/devices/virtio/block/vhost_user/event_handler.rs index 3fbb4a4abba..4f143995630 100644 --- a/src/vmm/src/devices/virtio/block/vhost_user/event_handler.rs +++ b/src/vmm/src/devices/virtio/block/vhost_user/event_handler.rs @@ -1,7 +1,7 @@ // Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 use event_manager::{EventOps, Events, MutEventSubscriber}; -use utils::epoll::EventSet; +use vmm_sys_util::epoll::EventSet; use super::VhostUserBlock; use crate::devices::virtio::device::VirtioDevice; diff --git a/src/vmm/src/devices/virtio/block/virtio/device.rs b/src/vmm/src/devices/virtio/block/virtio/device.rs index 5c8fb95886e..fd352fe2539 100644 --- a/src/vmm/src/devices/virtio/block/virtio/device.rs +++ b/src/vmm/src/devices/virtio/block/virtio/device.rs @@ -15,8 +15,7 @@ use std::sync::Arc; use block_io::FileEngine; use serde::{Deserialize, Serialize}; -use utils::eventfd::EventFd; -use utils::u64_to_usize; +use vmm_sys_util::eventfd::EventFd; use super::io::async_io; use super::request::*; @@ -35,6 +34,7 @@ use crate::devices::virtio::queue::Queue; use crate::devices::virtio::{ActivateError, TYPE_BLOCK}; use crate::logger::{error, warn, IncMetric}; use crate::rate_limiter::{BucketUpdate, RateLimiter}; +use crate::utils::u64_to_usize; use crate::vmm_config::drive::BlockDeviceConfig; use crate::vmm_config::RateLimiterConfig; use crate::vstate::memory::GuestMemoryMmap; @@ -678,7 +678,7 @@ mod tests { use std::thread; use std::time::Duration; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::check_metric_after_block; @@ -1084,7 +1084,9 @@ mod tests { let status_addr = GuestAddress(vq.dtable[2].addr.get()); let empty_data = vec![0; 512]; - let rand_data = utils::rand::rand_alphanumerics(1024).as_bytes().to_vec(); + let rand_data = vmm_sys_util::rand::rand_alphanumerics(1024) + .as_bytes() + .to_vec(); // Write with invalid data len (not a multiple of 512). { diff --git a/src/vmm/src/devices/virtio/block/virtio/event_handler.rs b/src/vmm/src/devices/virtio/block/virtio/event_handler.rs index cd931026c1f..8400766e06b 100644 --- a/src/vmm/src/devices/virtio/block/virtio/event_handler.rs +++ b/src/vmm/src/devices/virtio/block/virtio/event_handler.rs @@ -1,7 +1,7 @@ // Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 use event_manager::{EventOps, Events, MutEventSubscriber}; -use utils::epoll::EventSet; +use vmm_sys_util::epoll::EventSet; use super::io::FileEngine; use crate::devices::virtio::block::virtio::device::VirtioBlock; diff --git a/src/vmm/src/devices/virtio/block/virtio/io/async_io.rs b/src/vmm/src/devices/virtio/block/virtio/io/async_io.rs index 0380db1dd74..515ff9ca32c 100644 --- a/src/vmm/src/devices/virtio/block/virtio/io/async_io.rs +++ b/src/vmm/src/devices/virtio/block/virtio/io/async_io.rs @@ -6,8 +6,8 @@ use std::fs::File; use std::os::fd::RawFd; use std::os::unix::io::AsRawFd; -use utils::eventfd::EventFd; use vm_memory::GuestMemoryError; +use vmm_sys_util::eventfd::EventFd; use crate::devices::virtio::block::virtio::io::UserDataError; use crate::devices::virtio::block::virtio::IO_URING_NUM_ENTRIES; diff --git a/src/vmm/src/devices/virtio/block/virtio/io/mod.rs b/src/vmm/src/devices/virtio/block/virtio/io/mod.rs index 4dcb61fd86f..de970986da2 100644 --- a/src/vmm/src/devices/virtio/block/virtio/io/mod.rs +++ b/src/vmm/src/devices/virtio/block/virtio/io/mod.rs @@ -189,11 +189,11 @@ pub mod tests { use std::os::unix::ffi::OsStrExt; use std::os::unix::io::FromRawFd; - use utils::tempfile::TempFile; - use utils::u64_to_usize; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::devices::virtio::block::virtio::device::FileEngineType; + use crate::utils::u64_to_usize; use crate::vmm_config::machine_config::HugePageConfig; use crate::vstate::memory::{Bitmap, Bytes, GuestMemory, GuestMemoryExtension}; @@ -280,7 +280,7 @@ pub mod tests { let file = TempFile::new().unwrap().into_file(); let mut engine = FileEngine::from_file(file, FileEngineType::Sync).unwrap(); - let data = utils::rand::rand_alphanumerics(FILE_LEN as usize) + let data = vmm_sys_util::rand::rand_alphanumerics(FILE_LEN as usize) .as_bytes() .to_vec(); @@ -350,7 +350,7 @@ pub mod tests { let file = TempFile::new().unwrap().into_file(); let mut engine = FileEngine::<()>::from_file(file, FileEngineType::Async).unwrap(); - let data = utils::rand::rand_alphanumerics(FILE_LEN as usize) + let data = vmm_sys_util::rand::rand_alphanumerics(FILE_LEN as usize) .as_bytes() .to_vec(); diff --git a/src/vmm/src/devices/virtio/block/virtio/persist.rs b/src/vmm/src/devices/virtio/block/virtio/persist.rs index 6e5b6a2c138..61bffbeaa40 100644 --- a/src/vmm/src/devices/virtio/block/virtio/persist.rs +++ b/src/vmm/src/devices/virtio/block/virtio/persist.rs @@ -7,7 +7,7 @@ use std::sync::atomic::AtomicU32; use std::sync::Arc; use serde::{Deserialize, Serialize}; -use utils::eventfd::EventFd; +use vmm_sys_util::eventfd::EventFd; use super::device::DiskProperties; use super::*; @@ -151,7 +151,7 @@ impl Persist<'_> for VirtioBlock { mod tests { use std::sync::atomic::Ordering; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::devices::virtio::block::virtio::device::VirtioBlockConfig; diff --git a/src/vmm/src/devices/virtio/block/virtio/request.rs b/src/vmm/src/devices/virtio/block/virtio/request.rs index c9c3cf112d1..4eb8d7e2efd 100644 --- a/src/vmm/src/devices/virtio/block/virtio/request.rs +++ b/src/vmm/src/devices/virtio/block/virtio/request.rs @@ -667,7 +667,7 @@ mod tests { use proptest::strategy::{Map, Strategy, TupleUnion}; use crate::devices::virtio::block::virtio::test_utils::RequestDescriptorChain; - use crate::utilities::test_utils::{multi_region_mem, single_region_mem}; + use crate::test_utils::{multi_region_mem, single_region_mem}; // Implements a "strategy" for producing arbitrary values of RequestType. // This can also be generated by a derive macro from `proptest_derive`, but the crate diff --git a/src/vmm/src/devices/virtio/block/virtio/test_utils.rs b/src/vmm/src/devices/virtio/block/virtio/test_utils.rs index 7abf33dae5b..106da8177cd 100644 --- a/src/vmm/src/devices/virtio/block/virtio/test_utils.rs +++ b/src/vmm/src/devices/virtio/block/virtio/test_utils.rs @@ -8,7 +8,7 @@ use std::thread; #[cfg(test)] use std::time::Duration; -use utils::tempfile::TempFile; +use vmm_sys_util::tempfile::TempFile; use super::device::VirtioBlockConfig; use super::RequestHeader; diff --git a/src/vmm/src/devices/virtio/device.rs b/src/vmm/src/devices/virtio/device.rs index 7ae93b46a40..b5af6862af9 100644 --- a/src/vmm/src/devices/virtio/device.rs +++ b/src/vmm/src/devices/virtio/device.rs @@ -9,7 +9,7 @@ use std::fmt; use std::sync::atomic::{AtomicU32, Ordering}; use std::sync::Arc; -use utils::eventfd::EventFd; +use vmm_sys_util::eventfd::EventFd; use super::mmio::{VIRTIO_MMIO_INT_CONFIG, VIRTIO_MMIO_INT_VRING}; use super::queue::{Queue, QueueError}; diff --git a/src/vmm/src/devices/virtio/iovec.rs b/src/vmm/src/devices/virtio/iovec.rs index 688f27a0a67..3acde02fc05 100644 --- a/src/vmm/src/devices/virtio/iovec.rs +++ b/src/vmm/src/devices/virtio/iovec.rs @@ -393,7 +393,7 @@ mod tests { use super::{IoVecBuffer, IoVecBufferMut}; use crate::devices::virtio::queue::{Queue, VIRTQ_DESC_F_NEXT, VIRTQ_DESC_F_WRITE}; use crate::devices::virtio::test_utils::VirtQueue; - use crate::utilities::test_utils::multi_region_mem; + use crate::test_utils::multi_region_mem; use crate::vstate::memory::{Bytes, GuestAddress, GuestMemoryMmap}; impl<'a> From<&'a [u8]> for IoVecBuffer { diff --git a/src/vmm/src/devices/virtio/mmio.rs b/src/vmm/src/devices/virtio/mmio.rs index b4aa9c88875..463d11ca2e2 100644 --- a/src/vmm/src/devices/virtio/mmio.rs +++ b/src/vmm/src/devices/virtio/mmio.rs @@ -9,12 +9,11 @@ use std::fmt::Debug; use std::sync::atomic::{AtomicU32, Ordering}; use std::sync::{Arc, Mutex, MutexGuard}; -use utils::byte_order; - use crate::devices::virtio::device::{IrqType, VirtioDevice}; use crate::devices::virtio::device_status; use crate::devices::virtio::queue::Queue; use crate::logger::{error, warn}; +use crate::utils::byte_order; use crate::vstate::memory::{GuestAddress, GuestMemoryMmap}; // TODO crosvm uses 0 here, but IIRC virtio specified some other vendor id that should be used @@ -374,15 +373,15 @@ impl MmioTransport { #[cfg(test)] pub(crate) mod tests { - use utils::byte_order::{read_le_u32, write_le_u32}; - use utils::eventfd::EventFd; - use utils::u64_to_usize; + use vmm_sys_util::eventfd::EventFd; use super::*; use crate::devices::virtio::device::IrqTrigger; use crate::devices::virtio::device_status::DEVICE_NEEDS_RESET; use crate::devices::virtio::ActivateError; - use crate::utilities::test_utils::single_region_mem; + use crate::test_utils::single_region_mem; + use crate::utils::byte_order::{read_le_u32, write_le_u32}; + use crate::utils::u64_to_usize; use crate::vstate::memory::GuestMemoryMmap; #[derive(Debug)] diff --git a/src/vmm/src/devices/virtio/net/device.rs b/src/vmm/src/devices/virtio/net/device.rs index 975e1588333..feb7488cc05 100755 --- a/src/vmm/src/devices/virtio/net/device.rs +++ b/src/vmm/src/devices/virtio/net/device.rs @@ -12,10 +12,8 @@ use std::sync::{Arc, Mutex}; use libc::EAGAIN; use log::{error, warn}; -use utils::eventfd::EventFd; -use utils::net::mac::MacAddr; -use utils::u64_to_usize; use vm_memory::GuestMemoryError; +use vmm_sys_util::eventfd::EventFd; use crate::devices::virtio::device::{DeviceState, IrqTrigger, IrqType, VirtioDevice}; use crate::devices::virtio::gen::virtio_blk::VIRTIO_F_VERSION_1; @@ -40,6 +38,8 @@ use crate::logger::{IncMetric, METRICS}; use crate::mmds::data_store::Mmds; use crate::mmds::ns::MmdsNetworkStack; use crate::rate_limiter::{BucketUpdate, RateLimiter, TokenType}; +use crate::utils::net::mac::MacAddr; +use crate::utils::u64_to_usize; use crate::vstate::memory::{ByteValued, Bytes, GuestMemoryMmap}; const FRAME_HEADER_MAX_LEN: usize = PAYLOAD_OFFSET + ETH_IPV4_FRAME_LEN; @@ -935,8 +935,6 @@ pub mod tests { use std::time::Duration; use std::{mem, thread}; - use utils::net::mac::{MacAddr, MAC_ADDR_LEN}; - use super::*; use crate::check_metric_after_block; use crate::devices::virtio::gen::virtio_ring::VIRTIO_RING_F_EVENT_IDX; @@ -956,7 +954,8 @@ pub mod tests { use crate::dumbo::EthernetFrame; use crate::logger::IncMetric; use crate::rate_limiter::{BucketUpdate, RateLimiter, TokenBucket, TokenType}; - use crate::utilities::test_utils::single_region_mem; + use crate::test_utils::single_region_mem; + use crate::utils::net::mac::{MacAddr, MAC_ADDR_LEN}; use crate::vstate::memory::{Address, GuestMemory}; #[test] diff --git a/src/vmm/src/devices/virtio/net/event_handler.rs b/src/vmm/src/devices/virtio/net/event_handler.rs index f6c4fddbf91..1d8805e93fe 100644 --- a/src/vmm/src/devices/virtio/net/event_handler.rs +++ b/src/vmm/src/devices/virtio/net/event_handler.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use event_manager::{EventOps, Events, MutEventSubscriber}; -use utils::epoll::EventSet; +use vmm_sys_util::epoll::EventSet; use crate::devices::virtio::device::VirtioDevice; use crate::devices::virtio::net::device::Net; @@ -135,7 +135,7 @@ pub mod tests { use crate::devices::virtio::net::test_utils::test::TestHelper; use crate::devices::virtio::net::test_utils::NetQueue; use crate::devices::virtio::net::{MAX_BUFFER_SIZE, TX_INDEX}; - use crate::utilities::test_utils::single_region_mem; + use crate::test_utils::single_region_mem; #[test] fn test_event_handler() { diff --git a/src/vmm/src/devices/virtio/net/persist.rs b/src/vmm/src/devices/virtio/net/persist.rs index 271977a4792..54ff724ce51 100644 --- a/src/vmm/src/devices/virtio/net/persist.rs +++ b/src/vmm/src/devices/virtio/net/persist.rs @@ -8,7 +8,6 @@ use std::sync::atomic::AtomicU32; use std::sync::{Arc, Mutex}; use serde::{Deserialize, Serialize}; -use utils::net::mac::MacAddr; use super::device::Net; use super::NET_NUM_QUEUES; @@ -22,6 +21,7 @@ use crate::mmds::persist::MmdsNetworkStackState; use crate::rate_limiter::persist::RateLimiterState; use crate::rate_limiter::RateLimiter; use crate::snapshot::Persist; +use crate::utils::net::mac::MacAddr; use crate::vstate::memory::GuestMemoryMmap; /// Information about the network config's that are saved diff --git a/src/vmm/src/devices/virtio/net/tap.rs b/src/vmm/src/devices/virtio/net/tap.rs index d6ab7d3f840..20024a1ae8e 100644 --- a/src/vmm/src/devices/virtio/net/tap.rs +++ b/src/vmm/src/devices/virtio/net/tap.rs @@ -11,8 +11,8 @@ use std::io::{Error as IoError, Read}; use std::os::raw::*; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; -use utils::ioctl::{ioctl_with_mut_ref, ioctl_with_ref, ioctl_with_val}; -use utils::{ioctl_ioc_nr, ioctl_iow_nr}; +use vmm_sys_util::ioctl::{ioctl_with_mut_ref, ioctl_with_ref, ioctl_with_val}; +use vmm_sys_util::{ioctl_ioc_nr, ioctl_iow_nr}; use crate::devices::virtio::iovec::IoVecBuffer; use crate::devices::virtio::net::gen; @@ -293,7 +293,7 @@ pub mod tests { enable(&tap); let tap_traffic_simulator = TapTrafficSimulator::new(if_index(&tap)); - let packet = utils::rand::rand_alphanumerics(PAYLOAD_SIZE); + let packet = vmm_sys_util::rand::rand_alphanumerics(PAYLOAD_SIZE); tap_traffic_simulator.push_tx_packet(packet.as_bytes()); let mut buf = [0u8; PACKET_SIZE]; @@ -310,11 +310,11 @@ pub mod tests { enable(&tap); let tap_traffic_simulator = TapTrafficSimulator::new(if_index(&tap)); - let mut fragment1 = utils::rand::rand_bytes(PAYLOAD_SIZE); + let mut fragment1 = vmm_sys_util::rand::rand_bytes(PAYLOAD_SIZE); fragment1.as_mut_slice()[..gen::ETH_HLEN as usize] .copy_from_slice(&[0; gen::ETH_HLEN as usize]); - let fragment2 = utils::rand::rand_bytes(PAYLOAD_SIZE); - let fragment3 = utils::rand::rand_bytes(PAYLOAD_SIZE); + let fragment2 = vmm_sys_util::rand::rand_bytes(PAYLOAD_SIZE); + let fragment3 = vmm_sys_util::rand::rand_bytes(PAYLOAD_SIZE); let scattered = IoVecBuffer::from(vec![ fragment1.as_slice(), diff --git a/src/vmm/src/devices/virtio/net/test_utils.rs b/src/vmm/src/devices/virtio/net/test_utils.rs index efbafba482f..07808bbb44b 100644 --- a/src/vmm/src/devices/virtio/net/test_utils.rs +++ b/src/vmm/src/devices/virtio/net/test_utils.rs @@ -12,8 +12,6 @@ use std::str::FromStr; use std::sync::atomic::{AtomicUsize, Ordering}; use std::sync::{Arc, Mutex}; -use utils::net::mac::MacAddr; - #[cfg(test)] use crate::devices::virtio::net::device::vnet_hdr_len; use crate::devices::virtio::net::tap::{IfReqBuilder, Tap}; @@ -24,6 +22,7 @@ use crate::devices::DeviceError; use crate::mmds::data_store::Mmds; use crate::mmds::ns::MmdsNetworkStack; use crate::rate_limiter::RateLimiter; +use crate::utils::net::mac::MacAddr; use crate::vstate::memory::{GuestAddress, GuestMemoryMmap}; static NEXT_INDEX: AtomicUsize = AtomicUsize::new(1); @@ -251,7 +250,7 @@ pub(crate) fn inject_tap_tx_frame(net: &Net, len: usize) -> Vec { assert!(len >= vnet_hdr_len()); let tap_traffic_simulator = TapTrafficSimulator::new(if_index(&net.tap)); - let mut frame = utils::rand::rand_alphanumerics(len - vnet_hdr_len()) + let mut frame = vmm_sys_util::rand::rand_alphanumerics(len - vnet_hdr_len()) .as_bytes() .to_vec(); tap_traffic_simulator.push_tx_packet(&frame); @@ -419,7 +418,7 @@ pub mod test { addr += u64::from(len); // Add small random gaps between descriptor addresses in order to make sure we // don't blindly read contiguous memory. - addr += u64::from(utils::rand::xor_pseudo_rng_u32()) % 10; + addr += u64::from(vmm_sys_util::rand::xor_pseudo_rng_u32()) % 10; } // Mark the chain as available. @@ -481,7 +480,7 @@ pub mod test { // Generates a frame of `frame_len` and writes it to the provided descriptor chain. // Doesn't generate an error if the descriptor chain is longer than `frame_len`. pub fn write_tx_frame(&self, desc_list: &[(u16, u32, u16)], frame_len: usize) -> Vec { - let mut frame = utils::rand::rand_alphanumerics(frame_len) + let mut frame = vmm_sys_util::rand::rand_alphanumerics(frame_len) .as_bytes() .to_vec(); let prefix_len = vnet_hdr_len() + ETH_HLEN as usize; diff --git a/src/vmm/src/devices/virtio/persist.rs b/src/vmm/src/devices/virtio/persist.rs index f80d5382104..23293a25eab 100644 --- a/src/vmm/src/devices/virtio/persist.rs +++ b/src/vmm/src/devices/virtio/persist.rs @@ -255,7 +255,7 @@ impl Persist<'_> for MmioTransport { #[cfg(test)] mod tests { - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::devices::virtio::block::virtio::device::FileEngineType; diff --git a/src/vmm/src/devices/virtio/queue.rs b/src/vmm/src/devices/virtio/queue.rs index 9dc3f2042ae..c183e8b2c00 100644 --- a/src/vmm/src/devices/virtio/queue.rs +++ b/src/vmm/src/devices/virtio/queue.rs @@ -1231,7 +1231,7 @@ mod tests { pub use super::*; use crate::devices::virtio::queue::QueueError::DescIndexOutOfBounds; use crate::devices::virtio::test_utils::{default_mem, VirtQueue}; - use crate::utilities::test_utils::{multi_region_mem, single_region_mem}; + use crate::test_utils::{multi_region_mem, single_region_mem}; use crate::vstate::memory::GuestAddress; #[test] diff --git a/src/vmm/src/devices/virtio/rng/device.rs b/src/vmm/src/devices/virtio/rng/device.rs index 43742ab0327..4bdea1c40f6 100644 --- a/src/vmm/src/devices/virtio/rng/device.rs +++ b/src/vmm/src/devices/virtio/rng/device.rs @@ -6,8 +6,8 @@ use std::sync::atomic::AtomicU32; use std::sync::Arc; use aws_lc_rs::rand; -use utils::eventfd::EventFd; use vm_memory::GuestMemoryError; +use vmm_sys_util::eventfd::EventFd; use super::metrics::METRICS; use super::{RNG_NUM_QUEUES, RNG_QUEUE}; diff --git a/src/vmm/src/devices/virtio/rng/event_handler.rs b/src/vmm/src/devices/virtio/rng/event_handler.rs index a2c81bdf2df..dffda5d8845 100644 --- a/src/vmm/src/devices/virtio/rng/event_handler.rs +++ b/src/vmm/src/devices/virtio/rng/event_handler.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use event_manager::{EventOps, Events, MutEventSubscriber}; -use utils::epoll::EventSet; +use vmm_sys_util::epoll::EventSet; use super::{Entropy, RNG_QUEUE}; use crate::devices::virtio::device::VirtioDevice; diff --git a/src/vmm/src/devices/virtio/test_utils.rs b/src/vmm/src/devices/virtio/test_utils.rs index 32807d7381e..9bb66db82ae 100644 --- a/src/vmm/src/devices/virtio/test_utils.rs +++ b/src/vmm/src/devices/virtio/test_utils.rs @@ -8,10 +8,9 @@ use std::marker::PhantomData; use std::mem; use std::sync::atomic::{AtomicUsize, Ordering}; -use utils::u64_to_usize; - use crate::devices::virtio::queue::Queue; -use crate::utilities::test_utils::single_region_mem; +use crate::test_utils::single_region_mem; +use crate::utils::u64_to_usize; use crate::vstate::memory::{Address, Bytes, GuestAddress, GuestMemoryMmap}; #[macro_export] @@ -325,7 +324,7 @@ pub(crate) mod test { use crate::devices::virtio::net::MAX_BUFFER_SIZE; use crate::devices::virtio::queue::{Queue, VIRTQ_DESC_F_NEXT}; use crate::devices::virtio::test_utils::{VirtQueue, VirtqDesc}; - use crate::utilities::test_utils::single_region_mem; + use crate::test_utils::single_region_mem; use crate::vstate::memory::{Address, GuestAddress, GuestMemoryMmap}; pub fn create_virtio_mem() -> GuestMemoryMmap { @@ -470,7 +469,7 @@ pub(crate) mod test { addr += u64::from(len); // Add small random gaps between descriptor addresses in order to make sure we // don't blindly read contiguous memory. - addr += u64::from(utils::rand::xor_pseudo_rng_u32()) % 10; + addr += u64::from(vmm_sys_util::rand::xor_pseudo_rng_u32()) % 10; } // Mark the chain as available. diff --git a/src/vmm/src/devices/virtio/vhost_user.rs b/src/vmm/src/devices/virtio/vhost_user.rs index 3e3ce0a2dca..ad86c9942af 100644 --- a/src/vmm/src/devices/virtio/vhost_user.rs +++ b/src/vmm/src/devices/virtio/vhost_user.rs @@ -7,11 +7,11 @@ use std::os::fd::AsRawFd; use std::os::unix::net::UnixStream; -use utils::eventfd::EventFd; use vhost::vhost_user::message::*; use vhost::vhost_user::{Frontend, VhostUserFrontend}; use vhost::{Error as VhostError, VhostBackend, VhostUserMemoryRegionInfo, VringConfigData}; use vm_memory::{Address, Error as MmapError, GuestMemory, GuestMemoryError, GuestMemoryRegion}; +use vmm_sys_util::eventfd::EventFd; use crate::devices::virtio::device::IrqTrigger; use crate::devices::virtio::queue::Queue; @@ -462,10 +462,10 @@ impl VhostUserHandleImpl { mod tests { #![allow(clippy::undocumented_unsafe_blocks)] - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; - use crate::utilities::test_utils::create_tmp_socket; + use crate::test_utils::create_tmp_socket; use crate::vstate::memory::{FileOffset, GuestAddress, GuestMemoryExtension}; #[test] diff --git a/src/vmm/src/devices/virtio/vhost_user_metrics.rs b/src/vmm/src/devices/virtio/vhost_user_metrics.rs index 87c86e847fb..73b41e6a86c 100644 --- a/src/vmm/src/devices/virtio/vhost_user_metrics.rs +++ b/src/vmm/src/devices/virtio/vhost_user_metrics.rs @@ -143,6 +143,8 @@ pub struct VhostUserDeviceMetrics { #[cfg(test)] pub mod tests { + use utils::time::{get_time_us, ClockType}; + use super::*; use crate::logger::{IncMetric, StoreMetric}; @@ -158,10 +160,10 @@ pub mod tests { #[test] fn test_vhost_user_basic_metrics() { let vhost_user_dev_name: String = String::from("vhost_user_block_drvN"); - let start_time = utils::time::get_time_us(utils::time::ClockType::Monotonic); + let start_time = get_time_us(ClockType::Monotonic); let vhost_user_metrics: Arc = VhostUserMetricsPerDevice::alloc(vhost_user_dev_name.clone()); - let delta_us = utils::time::get_time_us(utils::time::ClockType::Monotonic) - start_time; + let delta_us = get_time_us(ClockType::Monotonic) - start_time; vhost_user_metrics.activate_fails.inc(); assert_eq!(vhost_user_metrics.activate_fails.count(), 1); diff --git a/src/vmm/src/devices/virtio/vsock/csm/connection.rs b/src/vmm/src/devices/virtio/vsock/csm/connection.rs index 9fe744058c0..32bb220c3fc 100644 --- a/src/vmm/src/devices/virtio/vsock/csm/connection.rs +++ b/src/vmm/src/devices/virtio/vsock/csm/connection.rs @@ -83,10 +83,9 @@ use std::os::unix::io::{AsRawFd, RawFd}; use std::time::{Duration, Instant}; use log::{debug, error, info, warn}; -use utils::epoll::EventSet; -use utils::wrap_usize_to_u32; use vm_memory::io::{ReadVolatile, WriteVolatile}; use vm_memory::GuestMemoryError; +use vmm_sys_util::epoll::EventSet; use super::super::defs::uapi; use super::super::packet::VsockPacket; @@ -95,6 +94,7 @@ use super::txbuf::TxBuf; use super::{defs, ConnState, PendingRx, PendingRxSet, VsockCsmError}; use crate::devices::virtio::vsock::metrics::METRICS; use crate::logger::IncMetric; +use crate::utils::wrap_usize_to_u32; /// Trait that vsock connection backends need to implement. /// @@ -684,8 +684,8 @@ mod tests { use std::os::unix::io::RawFd; use std::time::{Duration, Instant}; - use utils::eventfd::EventFd; use vm_memory::{VolatileMemoryError, VolatileSlice}; + use vmm_sys_util::eventfd::EventFd; use super::super::super::defs::uapi; use super::super::defs as csm_defs; diff --git a/src/vmm/src/devices/virtio/vsock/csm/txbuf.rs b/src/vmm/src/devices/virtio/vsock/csm/txbuf.rs index 53165cbf84c..1742b02394f 100644 --- a/src/vmm/src/devices/virtio/vsock/csm/txbuf.rs +++ b/src/vmm/src/devices/virtio/vsock/csm/txbuf.rs @@ -6,10 +6,10 @@ use std::fmt::Debug; use std::io::Write; use std::num::Wrapping; -use utils::wrap_usize_to_u32; use vm_memory::{VolatileMemoryError, VolatileSlice, WriteVolatile}; use super::{defs, VsockCsmError}; +use crate::utils::wrap_usize_to_u32; use crate::vstate::memory::{BitmapSlice, Bytes}; /// A simple ring-buffer implementation, used by vsock connections to buffer TX (guest -> host) diff --git a/src/vmm/src/devices/virtio/vsock/device.rs b/src/vmm/src/devices/virtio/vsock/device.rs index 17b1789191f..afd1d8348d4 100644 --- a/src/vmm/src/devices/virtio/vsock/device.rs +++ b/src/vmm/src/devices/virtio/vsock/device.rs @@ -23,8 +23,7 @@ use std::fmt::Debug; use log::{error, warn}; -use utils::byte_order; -use utils::eventfd::EventFd; +use vmm_sys_util::eventfd::EventFd; use super::super::super::DeviceError; use super::defs::uapi; @@ -36,6 +35,7 @@ use crate::devices::virtio::vsock::metrics::METRICS; use crate::devices::virtio::vsock::VsockError; use crate::devices::virtio::ActivateError; use crate::logger::IncMetric; +use crate::utils::byte_order; use crate::vstate::memory::{Bytes, GuestMemoryMmap}; pub(crate) const RXQ_INDEX: usize = 0; diff --git a/src/vmm/src/devices/virtio/vsock/event_handler.rs b/src/vmm/src/devices/virtio/vsock/event_handler.rs index 99640f1b5c2..c35fa1ba77c 100755 --- a/src/vmm/src/devices/virtio/vsock/event_handler.rs +++ b/src/vmm/src/devices/virtio/vsock/event_handler.rs @@ -28,7 +28,7 @@ use std::fmt::Debug; /// buffers. use event_manager::{EventOps, Events, MutEventSubscriber}; use log::{error, warn}; -use utils::epoll::EventSet; +use vmm_sys_util::epoll::EventSet; use super::device::{Vsock, EVQ_INDEX, RXQ_INDEX, TXQ_INDEX}; use super::VsockBackend; @@ -225,7 +225,7 @@ mod tests { use super::*; use crate::devices::virtio::vsock::packet::VSOCK_PKT_HDR_SIZE; use crate::devices::virtio::vsock::test_utils::{EventHandlerContext, TestContext}; - use crate::utilities::test_utils::multi_region_mem; + use crate::test_utils::multi_region_mem; use crate::vstate::memory::Bytes; #[test] diff --git a/src/vmm/src/devices/virtio/vsock/mod.rs b/src/vmm/src/devices/virtio/vsock/mod.rs index a87b6b488d8..7fdc86aed2e 100644 --- a/src/vmm/src/devices/virtio/vsock/mod.rs +++ b/src/vmm/src/devices/virtio/vsock/mod.rs @@ -23,8 +23,8 @@ mod unix; use std::os::unix::io::AsRawFd; use packet::VsockPacket; -use utils::epoll::EventSet; use vm_memory::GuestMemoryError; +use vmm_sys_util::epoll::EventSet; pub use self::defs::uapi::VIRTIO_ID_VSOCK as TYPE_VSOCK; pub use self::defs::VSOCK_DEV_ID; diff --git a/src/vmm/src/devices/virtio/vsock/persist.rs b/src/vmm/src/devices/virtio/vsock/persist.rs index 1c0b07fea7e..dce545fd68d 100644 --- a/src/vmm/src/devices/virtio/vsock/persist.rs +++ b/src/vmm/src/devices/virtio/vsock/persist.rs @@ -134,14 +134,13 @@ where #[cfg(test)] pub(crate) mod tests { - use utils::byte_order; - use super::device::AVAIL_FEATURES; use super::*; use crate::devices::virtio::device::VirtioDevice; use crate::devices::virtio::vsock::defs::uapi; use crate::devices::virtio::vsock::test_utils::{TestBackend, TestContext}; use crate::snapshot::Snapshot; + use crate::utils::byte_order; impl Persist<'_> for TestBackend { type State = VsockBackendState; diff --git a/src/vmm/src/devices/virtio/vsock/test_utils.rs b/src/vmm/src/devices/virtio/vsock/test_utils.rs index 4360e2f2a48..1e240bcf268 100644 --- a/src/vmm/src/devices/virtio/vsock/test_utils.rs +++ b/src/vmm/src/devices/virtio/vsock/test_utils.rs @@ -6,8 +6,8 @@ use std::os::unix::io::{AsRawFd, RawFd}; -use utils::epoll::EventSet; -use utils::eventfd::EventFd; +use vmm_sys_util::epoll::EventSet; +use vmm_sys_util::eventfd::EventFd; use crate::devices::virtio::device::VirtioDevice; use crate::devices::virtio::queue::{VIRTQ_DESC_F_NEXT, VIRTQ_DESC_F_WRITE}; @@ -17,7 +17,7 @@ use crate::devices::virtio::vsock::packet::{VsockPacket, VSOCK_PKT_HDR_SIZE}; use crate::devices::virtio::vsock::{ Vsock, VsockBackend, VsockChannel, VsockEpollListener, VsockError, }; -use crate::utilities::test_utils::single_region_mem; +use crate::test_utils::single_region_mem; use crate::vstate::memory::{GuestAddress, GuestMemoryMmap}; #[derive(Debug)] diff --git a/src/vmm/src/devices/virtio/vsock/unix/muxer.rs b/src/vmm/src/devices/virtio/vsock/unix/muxer.rs index d543a2799dd..b9403a83eea 100644 --- a/src/vmm/src/devices/virtio/vsock/unix/muxer.rs +++ b/src/vmm/src/devices/virtio/vsock/unix/muxer.rs @@ -36,7 +36,7 @@ use std::os::unix::io::{AsRawFd, RawFd}; use std::os::unix::net::{UnixListener, UnixStream}; use log::{debug, error, info, warn}; -use utils::epoll::{ControlOperation, Epoll, EpollEvent, EventSet}; +use vmm_sys_util::epoll::{ControlOperation, Epoll, EpollEvent, EventSet}; use super::super::csm::ConnState; use super::super::defs::uapi; @@ -791,7 +791,7 @@ mod tests { use std::os::unix::net::{UnixListener, UnixStream}; use std::path::{Path, PathBuf}; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::super::super::csm::defs as csm_defs; use super::*; diff --git a/src/vmm/src/dumbo/mod.rs b/src/vmm/src/dumbo/mod.rs index 38af5643e9d..e1286c74e93 100644 --- a/src/vmm/src/dumbo/mod.rs +++ b/src/vmm/src/dumbo/mod.rs @@ -8,14 +8,13 @@ pub mod tcp; use std::ops::Index; -use utils::net::mac::MacAddr; - pub use crate::dumbo::pdu::arp::{EthIPv4ArpFrame, ETH_IPV4_FRAME_LEN}; pub use crate::dumbo::pdu::ethernet::{ EthernetFrame, ETHERTYPE_ARP, ETHERTYPE_IPV4, PAYLOAD_OFFSET as ETHERNET_PAYLOAD_OFFSET, }; pub use crate::dumbo::pdu::ipv4::{IPv4Packet, PROTOCOL_TCP, PROTOCOL_UDP}; pub use crate::dumbo::pdu::udp::{UdpDatagram, UDP_HEADER_SIZE}; +use crate::utils::net::mac::MacAddr; /// Represents a generalization of a borrowed `[u8]` slice. #[allow(clippy::len_without_is_empty)] diff --git a/src/vmm/src/dumbo/pdu/arp.rs b/src/vmm/src/dumbo/pdu/arp.rs index 76a1dcdf22e..bccb32154a9 100644 --- a/src/vmm/src/dumbo/pdu/arp.rs +++ b/src/vmm/src/dumbo/pdu/arp.rs @@ -12,10 +12,9 @@ use std::fmt::Debug; use std::net::Ipv4Addr; use std::result::Result; -use utils::net::mac::{MacAddr, MAC_ADDR_LEN}; - use super::bytes::{InnerBytes, NetworkBytes, NetworkBytesMut}; use super::ethernet::{self, ETHERTYPE_IPV4}; +use crate::utils::net::mac::{MacAddr, MAC_ADDR_LEN}; /// ARP Request operation pub const OPER_REQUEST: u16 = 0x0001; diff --git a/src/vmm/src/dumbo/pdu/bytes.rs b/src/vmm/src/dumbo/pdu/bytes.rs index 2da690f7c50..9b87673c211 100644 --- a/src/vmm/src/dumbo/pdu/bytes.rs +++ b/src/vmm/src/dumbo/pdu/bytes.rs @@ -68,7 +68,7 @@ use std::fmt::Debug; use std::marker::PhantomData; use std::ops::{Deref, DerefMut}; -use utils::byte_order; +use crate::utils::byte_order; /// Represents an immutable view into a sequence of bytes which stands for different values packed /// together using network byte ordering. diff --git a/src/vmm/src/dumbo/pdu/ethernet.rs b/src/vmm/src/dumbo/pdu/ethernet.rs index 64bc8320e0e..8b3321ca4b8 100644 --- a/src/vmm/src/dumbo/pdu/ethernet.rs +++ b/src/vmm/src/dumbo/pdu/ethernet.rs @@ -240,9 +240,8 @@ mod tests { #[cfg(kani)] #[allow(dead_code)] // Avoid warning when using stubs. mod kani_proofs { - use utils::net::mac::MAC_ADDR_LEN; - use super::*; + use crate::utils::net::mac::MAC_ADDR_LEN; // See the Virtual I/O Device (VIRTIO) specification, Sec. 5.1.6.2. // https://docs.oasis-open.org/virtio/virtio/v1.2/csd01/virtio-v1.2-csd01.pdf @@ -520,7 +519,7 @@ mod kani_proofs { #[kani::proof] #[kani::solver(cadical)] - #[kani::stub(utils::byte_order::read_be_u16, stubs::read_be_u16)] + #[kani::stub(crate::utils::byte_order::read_be_u16, stubs::read_be_u16)] fn verify_with_payload_len_unchecked() { // Create non-deterministic stream of bytes up to MAX_FRAME_SIZE let mut bytes: [u8; MAX_FRAME_SIZE] = kani::Arbitrary::any_array::(); diff --git a/src/vmm/src/dumbo/tcp/connection.rs b/src/vmm/src/dumbo/tcp/connection.rs index 94092ec367a..8036f428318 100644 --- a/src/vmm/src/dumbo/tcp/connection.rs +++ b/src/vmm/src/dumbo/tcp/connection.rs @@ -10,7 +10,7 @@ use std::fmt::Debug; use std::num::{NonZeroU16, NonZeroU64, NonZeroUsize, Wrapping}; use bitflags::bitflags; -use utils::rand::xor_pseudo_rng_u32; +use vmm_sys_util::rand::xor_pseudo_rng_u32; use crate::dumbo::pdu::bytes::NetworkBytes; use crate::dumbo::pdu::tcp::{Flags as TcpFlags, TcpError as TcpSegmentError, TcpSegment}; diff --git a/src/vmm/src/io_uring/mod.rs b/src/vmm/src/io_uring/mod.rs index 95809717ca9..3466fd01aa5 100644 --- a/src/vmm/src/io_uring/mod.rs +++ b/src/vmm/src/io_uring/mod.rs @@ -22,7 +22,7 @@ use queue::completion::CompletionQueue; pub use queue::submission::SQueueError; use queue::submission::SubmissionQueue; use restriction::Restriction; -use utils::syscall::SyscallReturnCode; +use vmm_sys_util::syscall::SyscallReturnCode; // IO_uring operations that we require to be supported by the host kernel. const REQUIRED_OPS: [OpCode; 2] = [OpCode::Read, OpCode::Write]; @@ -37,7 +37,7 @@ pub enum IoUringError { /// Could not enable the ring: {0} Enable(IOError), /// A FamStructWrapper operation has failed: {0} - Fam(utils::fam::Error), + Fam(vmm_sys_util::fam::Error), /// The number of ops in the ring is >= CQ::count FullCQueue, /// Fd was not registered: {0} @@ -387,9 +387,9 @@ mod tests { use proptest::prelude::*; use proptest::strategy::Strategy; use proptest::test_runner::{Config, TestRunner}; - use utils::syscall::SyscallReturnCode; - use utils::tempfile::TempFile; use vm_memory::VolatileMemory; + use vmm_sys_util::syscall::SyscallReturnCode; + use vmm_sys_util::tempfile::TempFile; /// ------------------------------------- /// BEGIN PROPERTY BASED TESTING diff --git a/src/vmm/src/io_uring/probe.rs b/src/vmm/src/io_uring/probe.rs index 4d7bd0a5bb6..a1f74385815 100644 --- a/src/vmm/src/io_uring/probe.rs +++ b/src/vmm/src/io_uring/probe.rs @@ -1,8 +1,8 @@ // Copyright 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -use utils::fam::{FamStruct, FamStructWrapper}; -use utils::generate_fam_struct_impl; +use vmm_sys_util::fam::{FamStruct, FamStructWrapper}; +use vmm_sys_util::generate_fam_struct_impl; use crate::io_uring::gen::{io_uring_probe, io_uring_probe_op}; diff --git a/src/vmm/src/io_uring/queue/submission.rs b/src/vmm/src/io_uring/queue/submission.rs index bb677687447..c8306b40d26 100644 --- a/src/vmm/src/io_uring/queue/submission.rs +++ b/src/vmm/src/io_uring/queue/submission.rs @@ -8,8 +8,8 @@ use std::num::Wrapping; use std::os::unix::io::RawFd; use std::sync::atomic::Ordering; -use utils::syscall::SyscallReturnCode; use vm_memory::{VolatileMemory, VolatileMemoryError}; +use vmm_sys_util::syscall::SyscallReturnCode; use super::mmap::{mmap, MmapError}; use crate::io_uring::gen; diff --git a/src/vmm/src/lib.rs b/src/vmm/src/lib.rs index 13699a4c02b..94dfcfbf409 100644 --- a/src/vmm/src/lib.rs +++ b/src/vmm/src/lib.rs @@ -100,7 +100,9 @@ pub mod signal_handler; /// Serialization and deserialization facilities pub mod snapshot; /// Utility functions for integration and benchmark testing -pub mod utilities; +pub mod test_utils; +/// Utility functions and struct +pub mod utils; /// Wrappers over structures used to configure the VMM. pub mod vmm_config; /// Module with virtual state structs. @@ -119,10 +121,9 @@ use devices::acpi::vmgenid::VmGenIdError; use event_manager::{EventManager as BaseEventManager, EventOps, Events, MutEventSubscriber}; use seccompiler::BpfProgram; use userfaultfd::Uffd; -use utils::epoll::EventSet; -use utils::eventfd::EventFd; -use utils::terminal::Terminal; -use utils::u64_to_usize; +use vmm_sys_util::epoll::EventSet; +use vmm_sys_util::eventfd::EventFd; +use vmm_sys_util::terminal::Terminal; use vstate::vcpu::{self, KvmVcpuConfigureError, StartThreadedError, VcpuSendEventError}; use crate::arch::DeviceType; @@ -141,6 +142,7 @@ use crate::logger::{error, info, warn, MetricsError, METRICS}; use crate::persist::{MicrovmState, MicrovmStateError, VmInfo}; use crate::rate_limiter::BucketUpdate; use crate::snapshot::Persist; +use crate::utils::u64_to_usize; use crate::vmm_config::instance_info::{InstanceInfo, VmState}; use crate::vstate::memory::{ GuestMemory, GuestMemoryExtension, GuestMemoryMmap, GuestMemoryRegion, @@ -251,9 +253,9 @@ pub enum VmmError { /// Vm error: {0} Vm(vstate::vm::VmError), /// Error thrown by observer object on Vmm initialization: {0} - VmmObserverInit(utils::errno::Error), + VmmObserverInit(vmm_sys_util::errno::Error), /// Error thrown by observer object on Vmm teardown: {0} - VmmObserverTeardown(utils::errno::Error), + VmmObserverTeardown(vmm_sys_util::errno::Error), /// VMGenID error: {0} VMGenID(#[from] VmGenIdError), } @@ -275,7 +277,7 @@ pub struct EmulateSerialInitError(#[from] std::io::Error); #[derive(Debug, thiserror::Error, displaydoc::Display)] pub enum StartVcpusError { /// VMM observer init error: {0} - VmmObserverInit(#[from] utils::errno::Error), + VmmObserverInit(#[from] vmm_sys_util::errno::Error), /// Vcpu handle error: {0} VcpuHandle(#[from] StartThreadedError), } diff --git a/src/vmm/src/logger/logging.rs b/src/vmm/src/logger/logging.rs index d2958bdb691..45e8f94d1b0 100644 --- a/src/vmm/src/logger/logging.rs +++ b/src/vmm/src/logger/logging.rs @@ -351,7 +351,7 @@ mod tests { #[test] fn logger() { // Get temp file path. - let file = utils::tempfile::TempFile::new().unwrap(); + let file = vmm_sys_util::tempfile::TempFile::new().unwrap(); let path = file.as_path().to_str().unwrap().to_string(); drop(file); diff --git a/src/vmm/src/logger/metrics.rs b/src/vmm/src/logger/metrics.rs index 26a755c8f4e..083881645a5 100644 --- a/src/vmm/src/logger/metrics.rs +++ b/src/vmm/src/logger/metrics.rs @@ -68,6 +68,7 @@ use std::sync::atomic::{AtomicU64, Ordering}; use std::sync::{Mutex, OnceLock}; use serde::{Serialize, Serializer}; +use utils::time::{get_time_ns, get_time_us, ClockType}; use super::FcLineWriter; use crate::devices::legacy; @@ -324,7 +325,7 @@ impl ProcessTimeReporter { /// Obtain process start time in microseconds. pub fn report_start_time(&self) { if let Some(start_time) = self.start_time_us { - let delta_us = utils::time::get_time_us(utils::time::ClockType::Monotonic) - start_time; + let delta_us = get_time_us(ClockType::Monotonic) - start_time; METRICS.api_server.process_startup_time_us.store(delta_us); } } @@ -332,8 +333,7 @@ impl ProcessTimeReporter { /// Obtain process CPU start time in microseconds. pub fn report_cpu_start_time(&self) { if let Some(cpu_start_time) = self.start_time_cpu_us { - let delta_us = utils::time::get_time_us(utils::time::ClockType::ProcessCpu) - - cpu_start_time + let delta_us = get_time_us(ClockType::ProcessCpu) - cpu_start_time + self.parent_cpu_time_us.unwrap_or_default(); METRICS .api_server @@ -701,7 +701,7 @@ impl<'a> LatencyMetricsRecorder<'a> { /// Const default construction. fn new(metric: &'a LatencyAggregateMetrics) -> Self { Self { - start_time: utils::time::get_time_us(utils::time::ClockType::Monotonic), + start_time: get_time_us(ClockType::Monotonic), metric, } } @@ -712,8 +712,7 @@ impl<'a> Drop for LatencyMetricsRecorder<'a> { /// and updates min/max/sum metrics. /// self.start_time is recorded in new() and metrics are updated in drop fn drop(&mut self) { - let delta_us = - utils::time::get_time_us(utils::time::ClockType::Monotonic) - self.start_time; + let delta_us = get_time_us(ClockType::Monotonic) - self.start_time; self.metric.sum_us.add(delta_us); let min_us = self.metric.min_us.fetch(); let max_us = self.metric.max_us.fetch(); @@ -836,10 +835,7 @@ impl SerializeToUtcTimestampMs { impl Serialize for SerializeToUtcTimestampMs { fn serialize(&self, serializer: S) -> Result { - serializer.serialize_i64( - i64::try_from(utils::time::get_time_ns(utils::time::ClockType::Real) / 1_000_000) - .unwrap(), - ) + serializer.serialize_i64(i64::try_from(get_time_ns(ClockType::Real) / 1_000_000).unwrap()) } } @@ -956,7 +952,7 @@ mod tests { use std::sync::Arc; use std::thread; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; diff --git a/src/vmm/src/logger/mod.rs b/src/vmm/src/logger/mod.rs index 2c5144e5033..49d765b597b 100644 --- a/src/vmm/src/logger/mod.rs +++ b/src/vmm/src/logger/mod.rs @@ -16,6 +16,7 @@ pub use metrics::{ IncMetric, LatencyAggregateMetrics, MetricsError, ProcessTimeReporter, SharedIncMetric, SharedStoreMetric, StoreMetric, METRICS, }; +use utils::time::{get_time_us, ClockType}; /// Alias for `std::io::LineWriter`. pub type FcLineWriter = std::io::LineWriter; @@ -38,7 +39,7 @@ pub fn log_dev_preview_warning(feature_name: &str, msg_opt: Option) { /// Helper function for updating the value of a store metric with elapsed time since some time in a /// past. pub fn update_metric_with_elapsed_time(metric: &SharedStoreMetric, start_time_us: u64) -> u64 { - let delta_us = utils::time::get_time_us(utils::time::ClockType::Monotonic) - start_time_us; + let delta_us = get_time_us(ClockType::Monotonic) - start_time_us; metric.store(delta_us); delta_us } diff --git a/src/vmm/src/mmds/ns.rs b/src/vmm/src/mmds/ns.rs index b99338b7c9f..09d73b21e99 100644 --- a/src/vmm/src/mmds/ns.rs +++ b/src/vmm/src/mmds/ns.rs @@ -11,7 +11,6 @@ use std::result::Result; use std::str::FromStr; use std::sync::{Arc, Mutex}; -use utils::net::mac::MacAddr; use utils::time::timestamp_cycles; use crate::dumbo::pdu::arp::{ @@ -29,6 +28,7 @@ use crate::dumbo::tcp::handler::{RecvEvent, TcpIPv4Handler, WriteEvent, WriteNex use crate::dumbo::tcp::NextSegmentStatus; use crate::logger::{IncMetric, METRICS}; use crate::mmds::data_store::Mmds; +use crate::utils::net::mac::MacAddr; const DEFAULT_MAC_ADDR: &str = "06:01:23:45:67:01"; const DEFAULT_IPV4_ADDR: [u8; 4] = [169, 254, 169, 254]; diff --git a/src/vmm/src/mmds/persist.rs b/src/vmm/src/mmds/persist.rs index 0b4b06519de..dc0113f8a5c 100644 --- a/src/vmm/src/mmds/persist.rs +++ b/src/vmm/src/mmds/persist.rs @@ -8,11 +8,11 @@ use std::num::NonZeroUsize; use std::sync::{Arc, Mutex}; use serde::{Deserialize, Serialize}; -use utils::net::mac::{MacAddr, MAC_ADDR_LEN}; use super::ns::MmdsNetworkStack; use crate::mmds::data_store::Mmds; use crate::snapshot::Persist; +use crate::utils::net::mac::{MacAddr, MAC_ADDR_LEN}; /// State of a MmdsNetworkStack. #[derive(Debug, Clone, Serialize, Deserialize)] diff --git a/src/vmm/src/persist.rs b/src/vmm/src/persist.rs index d9183178797..6410e4d6c9b 100644 --- a/src/vmm/src/persist.rs +++ b/src/vmm/src/persist.rs @@ -15,8 +15,7 @@ use seccompiler::BpfThreadMap; use semver::Version; use serde::{Deserialize, Serialize}; use userfaultfd::{FeatureFlags, Uffd, UffdBuilder}; -use utils::sock_ctrl_msg::ScmSocket; -use utils::u64_to_usize; +use vmm_sys_util::sock_ctrl_msg::ScmSocket; #[cfg(target_arch = "aarch64")] use crate::arch::aarch64::vcpu::{get_manufacturer_id_from_host, get_manufacturer_id_from_state}; @@ -30,6 +29,7 @@ use crate::device_manager::persist::{ACPIDeviceManagerState, DevicePersistError, use crate::logger::{info, warn}; use crate::resources::VmResources; use crate::snapshot::Snapshot; +use crate::utils::u64_to_usize; use crate::vmm_config::boot_source::BootSourceConfig; use crate::vmm_config::instance_info::InstanceInfo; use crate::vmm_config::machine_config::{HugePageConfig, MachineConfigUpdate, VmConfigError}; @@ -534,7 +534,7 @@ pub enum GuestMemoryFromUffdError { /// Failed to connect to UDS Unix stream: {0} Connect(#[from] std::io::Error), /// Failed to sends file descriptor: {0} - Send(#[from] utils::errno::Error), + Send(#[from] vmm_sys_util::errno::Error), } fn guest_memory_from_uffd( @@ -643,7 +643,7 @@ fn send_uffd_handshake( mod tests { use std::os::unix::net::UnixListener; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; #[cfg(target_arch = "x86_64")] diff --git a/src/vmm/src/resources.rs b/src/vmm/src/resources.rs index 656d3ff6221..c2d2b1c7a9e 100644 --- a/src/vmm/src/resources.rs +++ b/src/vmm/src/resources.rs @@ -6,7 +6,6 @@ use std::path::PathBuf; use std::sync::{Arc, Mutex, MutexGuard}; use serde::{Deserialize, Serialize}; -use utils::net::ipv4addr::is_link_local_valid; use crate::cpu_config::templates::CustomCpuTemplate; use crate::device_manager::persist::SharedDeviceType; @@ -14,6 +13,7 @@ use crate::logger::{info, log_dev_preview_warning}; use crate::mmds; use crate::mmds::data_store::{Mmds, MmdsVersion}; use crate::mmds::ns::MmdsNetworkStack; +use crate::utils::net::ipv4addr::is_link_local_valid; use crate::vmm_config::balloon::*; use crate::vmm_config::boot_source::{ BootConfig, BootSource, BootSourceConfig, BootSourceConfigError, @@ -501,8 +501,7 @@ mod tests { use std::str::FromStr; use serde_json::{Map, Value}; - use utils::net::mac::MacAddr; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::cpu_config::templates::{CpuTemplateType, StaticCpuTemplate}; @@ -511,6 +510,7 @@ mod tests { use crate::devices::virtio::block::{BlockError, CacheType}; use crate::devices::virtio::vsock::VSOCK_DEV_ID; use crate::resources::VmResources; + use crate::utils::net::mac::MacAddr; use crate::vmm_config::boot_source::{ BootConfig, BootSource, BootSourceConfig, DEFAULT_KERNEL_CMDLINE, }; diff --git a/src/vmm/src/rpc_interface.rs b/src/vmm/src/rpc_interface.rs index be3161b527d..68fd1a7c37b 100644 --- a/src/vmm/src/rpc_interface.rs +++ b/src/vmm/src/rpc_interface.rs @@ -6,6 +6,7 @@ use std::sync::{Arc, Mutex, MutexGuard}; use seccompiler::BpfThreadMap; use serde_json::Value; +use utils::time::{get_time_us, ClockType}; use super::builder::build_and_boot_microvm; use super::persist::{create_snapshot, restore_from_snapshot}; @@ -324,7 +325,7 @@ impl<'a> PrebootApiController<'a> { instance_info: InstanceInfo, from_api: &std::sync::mpsc::Receiver, to_api: &std::sync::mpsc::Sender, - api_event_fd: &utils::eventfd::EventFd, + api_event_fd: &vmm_sys_util::eventfd::EventFd, boot_timer_enabled: bool, mmds_size_limit: usize, metadata_json: Option<&str>, @@ -555,7 +556,7 @@ impl<'a> PrebootApiController<'a> { ) -> Result { log_dev_preview_warning("Virtual machine snapshots", Option::None); - let load_start_us = utils::time::get_time_us(utils::time::ClockType::Monotonic); + let load_start_us = get_time_us(ClockType::Monotonic); if self.boot_path { let err = LoadSnapshotError::LoadSnapshotNotAllowed; @@ -698,7 +699,7 @@ impl RuntimeApiController { /// Pauses the microVM by pausing the vCPUs. pub fn pause(&mut self) -> Result { - let pause_start_us = utils::time::get_time_us(utils::time::ClockType::Monotonic); + let pause_start_us = get_time_us(ClockType::Monotonic); self.vmm.lock().expect("Poisoned lock").pause_vm()?; @@ -711,7 +712,7 @@ impl RuntimeApiController { /// Resumes the microVM by resuming the vCPUs. pub fn resume(&mut self) -> Result { - let resume_start_us = utils::time::get_time_us(utils::time::ClockType::Monotonic); + let resume_start_us = get_time_us(ClockType::Monotonic); self.vmm.lock().expect("Poisoned lock").resume_vm()?; @@ -764,7 +765,7 @@ impl RuntimeApiController { let mut locked_vmm = self.vmm.lock().unwrap(); let vm_info = VmInfo::from(&self.vm_resources); - let create_start_us = utils::time::get_time_us(utils::time::ClockType::Monotonic); + let create_start_us = get_time_us(ClockType::Monotonic); create_snapshot(&mut locked_vmm, &vm_info, create_params)?; diff --git a/src/vmm/src/signal_handler.rs b/src/vmm/src/signal_handler.rs index 37711449ad8..5bcfd41fd06 100644 --- a/src/vmm/src/signal_handler.rs +++ b/src/vmm/src/signal_handler.rs @@ -5,9 +5,9 @@ use libc::{ c_int, c_void, siginfo_t, SIGBUS, SIGHUP, SIGILL, SIGPIPE, SIGSEGV, SIGSYS, SIGXCPU, SIGXFSZ, }; use log::error; -use utils::signal::register_signal_handler; use crate::logger::{IncMetric, StoreMetric, METRICS}; +use crate::utils::signal::register_signal_handler; use crate::FcExitCode; // The offset of `si_syscall` (offending syscall identifier) within the siginfo structure @@ -155,7 +155,7 @@ extern "C" fn sigpipe_handler(num: c_int, info: *mut siginfo_t, _unused: *mut c_ /// /// Custom handlers are installed for: `SIGBUS`, `SIGSEGV`, `SIGSYS` /// `SIGXFSZ` `SIGXCPU` `SIGPIPE` `SIGHUP` and `SIGILL`. -pub fn register_signal_handlers() -> utils::errno::Result<()> { +pub fn register_signal_handlers() -> vmm_sys_util::errno::Result<()> { // Call to unsafe register_signal_handler which is considered unsafe because it will // register a signal handler which will be called in the current thread and will interrupt // whatever work is done on the current thread, so we have to keep in mind that the registered diff --git a/src/vmm/src/utilities/mock_resources/dirtying_init.tgz b/src/vmm/src/test_utils/mock_resources/dirtying_init.tgz similarity index 100% rename from src/vmm/src/utilities/mock_resources/dirtying_init.tgz rename to src/vmm/src/test_utils/mock_resources/dirtying_init.tgz diff --git a/src/vmm/src/utilities/mock_resources/make_noisy_kernel.sh b/src/vmm/src/test_utils/mock_resources/make_noisy_kernel.sh similarity index 100% rename from src/vmm/src/utilities/mock_resources/make_noisy_kernel.sh rename to src/vmm/src/test_utils/mock_resources/make_noisy_kernel.sh diff --git a/src/vmm/src/utilities/mock_resources/mod.rs b/src/vmm/src/test_utils/mock_resources/mod.rs similarity index 98% rename from src/vmm/src/utilities/mock_resources/mod.rs rename to src/vmm/src/test_utils/mock_resources/mod.rs index a048d924532..9f4406ab280 100644 --- a/src/vmm/src/utilities/mock_resources/mod.rs +++ b/src/vmm/src/test_utils/mock_resources/mod.rs @@ -21,7 +21,7 @@ pub const NOISY_KERNEL_IMAGE: &str = "test_pe.bin"; pub fn kernel_image_path(kernel_image: Option<&str>) -> String { let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); - path.push("src/utilities/mock_resources"); + path.push("src/test_utils/mock_resources"); path.push(kernel_image.unwrap_or(DEFAULT_KERNEL_IMAGE)); path.as_os_str().to_str().unwrap().to_string() } diff --git a/src/vmm/src/utilities/mock_resources/test_elf.bin b/src/vmm/src/test_utils/mock_resources/test_elf.bin similarity index 100% rename from src/vmm/src/utilities/mock_resources/test_elf.bin rename to src/vmm/src/test_utils/mock_resources/test_elf.bin diff --git a/src/vmm/src/utilities/mock_resources/test_noisy_elf.bin b/src/vmm/src/test_utils/mock_resources/test_noisy_elf.bin similarity index 100% rename from src/vmm/src/utilities/mock_resources/test_noisy_elf.bin rename to src/vmm/src/test_utils/mock_resources/test_noisy_elf.bin diff --git a/src/vmm/src/utilities/mock_resources/test_pe.bin b/src/vmm/src/test_utils/mock_resources/test_pe.bin similarity index 100% rename from src/vmm/src/utilities/mock_resources/test_pe.bin rename to src/vmm/src/test_utils/mock_resources/test_pe.bin diff --git a/src/vmm/src/utilities/test_utils/mod.rs b/src/vmm/src/test_utils/mod.rs similarity index 96% rename from src/vmm/src/utilities/test_utils/mod.rs rename to src/vmm/src/test_utils/mod.rs index f46229b0566..f90ba7fbd0c 100644 --- a/src/vmm/src/utilities/test_utils/mod.rs +++ b/src/vmm/src/test_utils/mod.rs @@ -1,22 +1,25 @@ // Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 + #![allow(missing_docs)] use std::sync::{Arc, Mutex}; -use utils::tempdir::TempDir; use vm_memory::GuestAddress; +use vmm_sys_util::tempdir::TempDir; use crate::builder::build_microvm_for_boot; use crate::resources::VmResources; use crate::seccomp_filters::get_empty_filters; -use crate::utilities::mock_resources::{MockBootSourceConfig, MockVmConfig, MockVmResources}; +use crate::test_utils::mock_resources::{MockBootSourceConfig, MockVmConfig, MockVmResources}; use crate::vmm_config::boot_source::BootSourceConfig; use crate::vmm_config::instance_info::InstanceInfo; use crate::vmm_config::machine_config::HugePageConfig; use crate::vstate::memory::{GuestMemoryExtension, GuestMemoryMmap}; use crate::{EventManager, Vmm}; +pub mod mock_resources; + /// Creates a [`GuestMemoryMmap`] with a single region of the given size starting at guest /// physical address 0 and without dirty tracking. pub fn single_region_mem(region_size: usize) -> GuestMemoryMmap { diff --git a/src/vmm/src/utilities/mod.rs b/src/vmm/src/utilities/mod.rs deleted file mode 100644 index cae9e807ebb..00000000000 --- a/src/vmm/src/utilities/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -#![allow(missing_docs)] - -pub mod mock_resources; -pub mod test_utils; diff --git a/src/utils/src/byte_order.rs b/src/vmm/src/utils/byte_order.rs similarity index 98% rename from src/utils/src/byte_order.rs rename to src/vmm/src/utils/byte_order.rs index cfb057235c0..32aa9daee18 100644 --- a/src/utils/src/byte_order.rs +++ b/src/vmm/src/utils/byte_order.rs @@ -3,6 +3,7 @@ macro_rules! generate_read_fn { ($fn_name: ident, $data_type: ty, $byte_type: ty, $type_size: expr, $endian_type: ident) => { + /// Read bytes from the slice pub fn $fn_name(input: &[$byte_type]) -> $data_type { assert!($type_size == std::mem::size_of::<$data_type>()); let mut array = [0u8; $type_size]; @@ -18,6 +19,7 @@ macro_rules! generate_read_fn { macro_rules! generate_write_fn { ($fn_name: ident, $data_type: ty, $byte_type: ty, $endian_type: ident) => { + /// Write bytes to the slice pub fn $fn_name(buf: &mut [$byte_type], n: $data_type) { #[allow(clippy::cast_sign_loss)] #[allow(clippy::cast_possible_wrap)] diff --git a/src/vmm/src/utils/mod.rs b/src/vmm/src/utils/mod.rs new file mode 100644 index 00000000000..a0ee2e90b6b --- /dev/null +++ b/src/vmm/src/utils/mod.rs @@ -0,0 +1,47 @@ +// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +/// Module with helpers to read/write bytes into slices +pub mod byte_order; +/// Module with network related helpers +pub mod net; +/// Module with external libc functions +pub mod signal; +/// Module with state machine +pub mod sm; + +use std::num::Wrapping; +use std::result::Result; + +/// Return the default page size of the platform, in bytes. +pub fn get_page_size() -> Result { + // SAFETY: Safe because the parameters are valid. + match unsafe { libc::sysconf(libc::_SC_PAGESIZE) } { + -1 => Err(vmm_sys_util::errno::Error::last()), + ps => Ok(usize::try_from(ps).unwrap()), + } +} + +/// Safely converts a u64 value to a usize value. +/// This bypasses the Clippy lint check because we only support 64-bit platforms. +#[cfg(target_pointer_width = "64")] +#[inline] +#[allow(clippy::cast_possible_truncation)] +pub const fn u64_to_usize(num: u64) -> usize { + num as usize +} + +/// Safely converts a usize value to a u64 value. +/// This bypasses the Clippy lint check because we only support 64-bit platforms. +#[cfg(target_pointer_width = "64")] +#[inline] +#[allow(clippy::cast_possible_truncation)] +pub const fn usize_to_u64(num: usize) -> u64 { + num as u64 +} + +/// Converts a usize into a wrapping u32. +#[inline] +pub const fn wrap_usize_to_u32(num: usize) -> Wrapping { + Wrapping(((num as u64) & 0xFFFFFFFF) as u32) +} diff --git a/src/utils/src/net/ipv4addr.rs b/src/vmm/src/utils/net/ipv4addr.rs similarity index 89% rename from src/utils/src/net/ipv4addr.rs rename to src/vmm/src/utils/net/ipv4addr.rs index 9237d4004c9..654e6f824d5 100644 --- a/src/utils/src/net/ipv4addr.rs +++ b/src/vmm/src/utils/net/ipv4addr.rs @@ -4,13 +4,6 @@ use std::net::Ipv4Addr; /// Checks if an IPv4 address is RFC 3927 compliant. -/// # Examples -/// -/// ``` -/// use std::net::Ipv4Addr; -/// use utils::net::ipv4addr::is_link_local_valid; -/// -/// is_link_local_valid(Ipv4Addr::new(169, 254, 1, 1)); pub fn is_link_local_valid(ipv4_addr: Ipv4Addr) -> bool { match ipv4_addr.octets() { [169, 254, 0, _] => false, @@ -24,7 +17,7 @@ pub fn is_link_local_valid(ipv4_addr: Ipv4Addr) -> bool { mod tests { use std::net::Ipv4Addr; - use crate::net::ipv4addr::is_link_local_valid; + use super::*; #[test] fn test_is_link_local_valid() { diff --git a/src/utils/src/net/mac.rs b/src/vmm/src/utils/net/mac.rs similarity index 87% rename from src/utils/src/net/mac.rs rename to src/vmm/src/utils/net/mac.rs index 3ffba73874d..86f92881b04 100644 --- a/src/utils/src/net/mac.rs +++ b/src/vmm/src/utils/net/mac.rs @@ -58,14 +58,6 @@ impl FromStr for MacAddr { /// # Arguments /// /// * `s` - reference that can be converted to &str. - /// # Example - /// - /// ``` - /// use std::str::FromStr; - /// - /// use self::utils::net::mac::MacAddr; - /// MacAddr::from_str("12:34:56:78:9a:BC").unwrap(); - /// ``` fn from_str(s: &str) -> Result { let v: Vec<&str> = s.split(':').collect(); let mut bytes = [0u8; MAC_ADDR_LEN as usize]; @@ -91,13 +83,6 @@ impl MacAddr { /// # Arguments /// /// * `src` - slice from which to copy MAC address content. - /// # Example - /// - /// ``` - /// use self::utils::net::mac::MacAddr; - /// let mac = MacAddr::from_bytes_unchecked(&[0x01, 0x02, 0x03, 0x04, 0x05, 0x06]); - /// println!("{}", mac.to_string()); - /// ``` #[inline] pub fn from_bytes_unchecked(src: &[u8]) -> MacAddr { // TODO: using something like std::mem::uninitialized could avoid the extra initialization, @@ -109,13 +94,6 @@ impl MacAddr { } /// Return the underlying content of this `MacAddr` in bytes. - /// # Example - /// - /// ``` - /// use self::utils::net::mac::MacAddr; - /// let mac = MacAddr::from([0x01, 0x02, 0x03, 0x04, 0x05, 0x06]); - /// assert_eq!([0x01, 0x02, 0x03, 0x04, 0x05, 0x06], mac.get_bytes()); - /// ``` #[inline] pub fn get_bytes(&self) -> &[u8] { &self.bytes diff --git a/src/utils/src/net/mod.rs b/src/vmm/src/utils/net/mod.rs similarity index 100% rename from src/utils/src/net/mod.rs rename to src/vmm/src/utils/net/mod.rs diff --git a/src/utils/src/signal.rs b/src/vmm/src/utils/signal.rs similarity index 95% rename from src/utils/src/signal.rs rename to src/vmm/src/utils/signal.rs index c20981cd531..172ae1b376e 100644 --- a/src/utils/src/signal.rs +++ b/src/vmm/src/utils/signal.rs @@ -9,11 +9,13 @@ extern "C" { fn __libc_current_sigrtmax() -> c_int; } +/// Sigrtmin pub fn sigrtmin() -> c_int { // SAFETY: Function has no invariants that can be broken. unsafe { __libc_current_sigrtmin() } } +/// Sigrtmax pub fn sigrtmax() -> c_int { // SAFETY: Function has no invariants that can be broken. unsafe { __libc_current_sigrtmax() } diff --git a/src/utils/src/sm.rs b/src/vmm/src/utils/sm.rs similarity index 100% rename from src/utils/src/sm.rs rename to src/vmm/src/utils/sm.rs diff --git a/src/vmm/src/vmm_config/boot_source.rs b/src/vmm/src/vmm_config/boot_source.rs index 8374ae335a8..c40a0fde014 100644 --- a/src/vmm/src/vmm_config/boot_source.rs +++ b/src/vmm/src/vmm_config/boot_source.rs @@ -99,7 +99,7 @@ impl BootConfig { #[cfg(test)] pub(crate) mod tests { - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::snapshot::Snapshot; diff --git a/src/vmm/src/vmm_config/drive.rs b/src/vmm/src/vmm_config/drive.rs index 9e0c2efd7a1..cdfc732d48b 100644 --- a/src/vmm/src/vmm_config/drive.rs +++ b/src/vmm/src/vmm_config/drive.rs @@ -177,7 +177,7 @@ impl BlockBuilder { #[cfg(test)] mod tests { - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::devices::virtio::block::virtio::VirtioBlockError; diff --git a/src/vmm/src/vmm_config/metrics.rs b/src/vmm/src/vmm_config/metrics.rs index 9e25af4562c..604c30e07b3 100644 --- a/src/vmm/src/vmm_config/metrics.rs +++ b/src/vmm/src/vmm_config/metrics.rs @@ -36,7 +36,7 @@ pub fn init_metrics(metrics_cfg: MetricsConfig) -> Result<(), MetricsConfigError #[cfg(test)] mod tests { - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; diff --git a/src/vmm/src/vmm_config/net.rs b/src/vmm/src/vmm_config/net.rs index 5782face4b5..4b917c2ca48 100644 --- a/src/vmm/src/vmm_config/net.rs +++ b/src/vmm/src/vmm_config/net.rs @@ -6,10 +6,10 @@ use std::ops::Deref; use std::sync::{Arc, Mutex}; use serde::{Deserialize, Serialize}; -use utils::net::mac::MacAddr; use super::RateLimiterConfig; use crate::devices::virtio::net::{Net, TapError}; +use crate::utils::net::mac::MacAddr; use crate::VmmError; /// This struct represents the strongly typed equivalent of the json body from net iface diff --git a/src/vmm/src/vmm_config/vsock.rs b/src/vmm/src/vmm_config/vsock.rs index 8c170bd97a7..920e4a4d217 100644 --- a/src/vmm/src/vmm_config/vsock.rs +++ b/src/vmm/src/vmm_config/vsock.rs @@ -112,7 +112,7 @@ impl VsockBuilder { #[cfg(test)] pub(crate) mod tests { - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::devices::virtio::vsock::VSOCK_DEV_ID; diff --git a/src/vmm/src/vstate/memory.rs b/src/vmm/src/vstate/memory.rs index 5f0390ac72d..a84fd6c4be4 100644 --- a/src/vmm/src/vstate/memory.rs +++ b/src/vmm/src/vstate/memory.rs @@ -9,7 +9,6 @@ use std::fs::File; use std::io::SeekFrom; use serde::{Deserialize, Serialize}; -use utils::{errno, get_page_size, u64_to_usize}; pub use vm_memory::bitmap::{AtomicBitmap, Bitmap, BitmapSlice, BS}; pub use vm_memory::mmap::MmapRegionBuilder; use vm_memory::mmap::{MmapRegionError, NewBitmap}; @@ -18,7 +17,9 @@ pub use vm_memory::{ GuestUsize, MemoryRegionAddress, MmapRegion, }; use vm_memory::{Error as VmMemoryError, GuestMemoryError, WriteVolatile}; +use vmm_sys_util::errno; +use crate::utils::{get_page_size, u64_to_usize}; use crate::vmm_config::machine_config::HugePageConfig; use crate::DirtyBitmap; @@ -425,11 +426,11 @@ mod tests { use std::collections::HashMap; use std::io::{Read, Seek}; - use utils::get_page_size; - use utils::tempfile::TempFile; + use vmm_sys_util::tempfile::TempFile; use super::*; use crate::snapshot::Snapshot; + use crate::utils::get_page_size; #[test] fn test_from_raw_regions() { diff --git a/src/vmm/src/vstate/vcpu/mod.rs b/src/vmm/src/vstate/vcpu/mod.rs index 7e5eb50dac2..89b167bbd5b 100644 --- a/src/vmm/src/vstate/vcpu/mod.rs +++ b/src/vmm/src/vstate/vcpu/mod.rs @@ -16,13 +16,13 @@ use kvm_ioctls::VcpuExit; use libc::{c_int, c_void, siginfo_t}; use log::{error, info, warn}; use seccompiler::{BpfProgram, BpfProgramRef}; -use utils::errno; -use utils::eventfd::EventFd; -use utils::signal::{register_signal_handler, sigrtmin, Killable}; -use utils::sm::StateMachine; +use vmm_sys_util::errno; +use vmm_sys_util::eventfd::EventFd; use crate::cpu_config::templates::{CpuConfiguration, GuestConfigError}; use crate::logger::{IncMetric, METRICS}; +use crate::utils::signal::{register_signal_handler, sigrtmin, Killable}; +use crate::utils::sm::StateMachine; use crate::vstate::vm::Vm; use crate::FcExitCode; @@ -49,7 +49,7 @@ pub enum VcpuError { /// Received error signaling kvm exit: {0} FaultyKvmExit(String), /// Failed to signal vcpu: {0} - SignalVcpu(utils::errno::Error), + SignalVcpu(vmm_sys_util::errno::Error), /// Unexpected kvm exit received: {0} UnhandledKvmExit(String), /// Failed to run action on vcpu: {0} @@ -620,7 +620,7 @@ pub struct VcpuHandle { /// Error type for [`VcpuHandle::send_event`]. #[derive(Debug, derive_more::From, thiserror::Error)] #[error("Failed to signal vCPU: {0}")] -pub struct VcpuSendEventError(pub utils::errno::Error); +pub struct VcpuSendEventError(pub vmm_sys_util::errno::Error); impl VcpuHandle { /// Creates a new [`VcpuHandle`]. @@ -699,14 +699,14 @@ pub mod tests { use std::sync::{Arc, Barrier, Mutex}; use linux_loader::loader::KernelLoader; - use utils::errno; - use utils::signal::validate_signal_num; + use vmm_sys_util::errno; use super::*; use crate::builder::StartMicrovmError; use crate::devices::bus::DummyDevice; use crate::devices::BusDevice; use crate::seccomp_filters::get_empty_filters; + use crate::utils::signal::validate_signal_num; use crate::vstate::memory::{GuestAddress, GuestMemoryMmap}; use crate::vstate::vcpu::VcpuError as EmulationError; use crate::vstate::vm::tests::setup_vm; @@ -877,9 +877,9 @@ pub mod tests { let mut path = PathBuf::from(env!("CARGO_MANIFEST_DIR")); #[cfg(target_arch = "x86_64")] - path.push("src/utilities/mock_resources/test_elf.bin"); + path.push("src/test_utils/mock_resources/test_elf.bin"); #[cfg(target_arch = "aarch64")] - path.push("src/utilities/mock_resources/test_pe.bin"); + path.push("src/test_utils/mock_resources/test_pe.bin"); let mut kernel_file = File::open(path).expect("Cannot open kernel file"); @@ -898,7 +898,7 @@ pub mod tests { entry_addr.unwrap().kernel_load } - fn vcpu_configured_for_boot() -> (VcpuHandle, utils::eventfd::EventFd) { + fn vcpu_configured_for_boot() -> (VcpuHandle, vmm_sys_util::eventfd::EventFd) { Vcpu::register_kick_signal_handler(); // Need enough mem to boot linux. let mem_size = 64 << 20; diff --git a/src/vmm/src/vstate/vcpu/x86_64.rs b/src/vmm/src/vstate/vcpu/x86_64.rs index 899bbff1123..6fee3933435 100644 --- a/src/vmm/src/vstate/vcpu/x86_64.rs +++ b/src/vmm/src/vstate/vcpu/x86_64.rs @@ -15,7 +15,7 @@ use kvm_bindings::{ use kvm_ioctls::{VcpuExit, VcpuFd}; use log::{error, warn}; use serde::{Deserialize, Serialize}; -use utils::fam; +use vmm_sys_util::fam; use crate::arch::x86_64::gen::msr_index::{MSR_IA32_TSC, MSR_IA32_TSC_DEADLINE}; use crate::arch::x86_64::interrupts; @@ -50,7 +50,7 @@ pub enum KvmVcpuError { /// Failed to convert `kvm_bindings::CpuId` to `Cpuid`: {0} ConvertCpuidType(#[from] cpuid::CpuidTryFromKvmCpuid), /// Failed FamStructWrapper operation: {0} - Fam(#[from] utils::fam::Error), + Fam(#[from] vmm_sys_util::fam::Error), /// Failed to get dumpable MSR index list: {0} GetMsrsToDump(#[from] crate::arch::x86_64::msr::MsrError), /// Cannot open the VCPU file descriptor: {0} @@ -106,7 +106,7 @@ pub enum KvmVcpuError { /// Error type for [`KvmVcpu::get_tsc_khz`] and [`KvmVcpu::is_tsc_scaling_required`]. #[derive(Debug, thiserror::Error, derive_more::From, Eq, PartialEq)] #[error("{0}")] -pub struct GetTscError(utils::errno::Error); +pub struct GetTscError(vmm_sys_util::errno::Error); /// Error type for [`KvmVcpu::set_tsc_khz`]. #[derive(Debug, thiserror::Error, Eq, PartialEq)] @@ -117,11 +117,11 @@ pub struct SetTscError(#[from] kvm_ioctls::Error); #[derive(Debug, thiserror::Error, displaydoc::Display, Eq, PartialEq)] pub enum KvmVcpuConfigureError { /// Failed to convert `Cpuid` to `kvm_bindings::CpuId`: {0} - ConvertCpuidType(#[from] utils::fam::Error), + ConvertCpuidType(#[from] vmm_sys_util::fam::Error), /// Failed to apply modifications to CPUID: {0} NormalizeCpuidError(#[from] cpuid::NormalizeCpuidError), /// Failed to set CPUID: {0} - SetCpuid(#[from] utils::errno::Error), + SetCpuid(#[from] vmm_sys_util::errno::Error), /// Failed to set MSRs: {0} SetMsrs(#[from] MsrError), /// Failed to setup registers: {0} diff --git a/src/vmm/src/vstate/vm.rs b/src/vmm/src/vstate/vm.rs index 55b0ec146e0..0f72abcf68f 100644 --- a/src/vmm/src/vstate/vm.rs +++ b/src/vmm/src/vstate/vm.rs @@ -17,14 +17,14 @@ use kvm_bindings::{ use kvm_bindings::{kvm_userspace_memory_region, KVM_API_VERSION, KVM_MEM_LOG_DIRTY_PAGES}; use kvm_ioctls::{Kvm, VmFd}; use serde::{Deserialize, Serialize}; -#[cfg(target_arch = "x86_64")] -use utils::u64_to_usize; #[cfg(target_arch = "aarch64")] use crate::arch::aarch64::gic::GICDevice; #[cfg(target_arch = "aarch64")] use crate::arch::aarch64::gic::GicState; use crate::cpu_config::templates::KvmCapability; +#[cfg(target_arch = "x86_64")] +use crate::utils::u64_to_usize; use crate::vstate::memory::{Address, GuestMemory, GuestMemoryMmap, GuestMemoryRegion}; /// Errors associated with the wrappers over KVM ioctls. @@ -470,7 +470,7 @@ pub(crate) mod tests { use super::*; #[cfg(target_arch = "x86_64")] use crate::snapshot::Snapshot; - use crate::utilities::test_utils::single_region_mem; + use crate::test_utils::single_region_mem; use crate::vstate::memory::GuestMemoryMmap; // Auxiliary function being used throughout the tests. diff --git a/src/vmm/tests/devices.rs b/src/vmm/tests/devices.rs index 3160a7cd3b9..1850bf540b0 100644 --- a/src/vmm/tests/devices.rs +++ b/src/vmm/tests/devices.rs @@ -8,10 +8,10 @@ use std::sync::{Arc, Mutex}; use event_manager::{EventManager, SubscriberOps}; use libc::EFD_NONBLOCK; -use utils::eventfd::EventFd; use vm_superio::Serial; use vmm::devices::legacy::serial::SerialOut; use vmm::devices::legacy::{EventFdTrigger, SerialEventsWrapper, SerialWrapper}; +use vmm_sys_util::eventfd::EventFd; fn create_serial( pipe: c_int, diff --git a/src/vmm/tests/integration_tests.rs b/src/vmm/tests/integration_tests.rs index 76956bb10d0..4312c6345db 100644 --- a/src/vmm/tests/integration_tests.rs +++ b/src/vmm/tests/integration_tests.rs @@ -5,7 +5,6 @@ use std::io::{Seek, SeekFrom}; use std::thread; use std::time::Duration; -use utils::tempfile::TempFile; use vmm::builder::build_and_boot_microvm; use vmm::devices::virtio::block::CacheType; use vmm::persist::{snapshot_state_sanity_check, MicrovmState, MicrovmStateError, VmInfo}; @@ -15,10 +14,10 @@ use vmm::rpc_interface::{ }; use vmm::seccomp_filters::get_empty_filters; use vmm::snapshot::Snapshot; -use vmm::utilities::mock_resources::{MockVmResources, NOISY_KERNEL_IMAGE}; #[cfg(target_arch = "x86_64")] -use vmm::utilities::test_utils::dirty_tracking_vmm; -use vmm::utilities::test_utils::{create_vmm, default_vmm, default_vmm_no_boot}; +use vmm::test_utils::dirty_tracking_vmm; +use vmm::test_utils::mock_resources::{MockVmResources, NOISY_KERNEL_IMAGE}; +use vmm::test_utils::{create_vmm, default_vmm, default_vmm_no_boot}; use vmm::vmm_config::balloon::BalloonDeviceConfig; use vmm::vmm_config::boot_source::BootSourceConfig; use vmm::vmm_config::drive::BlockDeviceConfig; @@ -30,6 +29,7 @@ use vmm::vmm_config::snapshot::{ }; use vmm::vmm_config::vsock::VsockDeviceConfig; use vmm::{DumpCpuConfigError, EventManager, FcExitCode}; +use vmm_sys_util::tempfile::TempFile; #[test] fn test_build_and_boot_microvm() { diff --git a/src/vmm/tests/io_uring.rs b/src/vmm/tests/io_uring.rs index 37c0bd3f16d..0a4ba2301d1 100644 --- a/src/vmm/tests/io_uring.rs +++ b/src/vmm/tests/io_uring.rs @@ -6,11 +6,11 @@ use std::os::unix::io::AsRawFd; use std::thread; use std::time::Duration; -use utils::epoll::{ControlOperation, Epoll, EpollEvent, EventSet}; -use utils::eventfd::EventFd; -use utils::tempfile::TempFile; use vm_memory::VolatileMemory; use vmm::vstate::memory::{Bytes, MmapRegion}; +use vmm_sys_util::epoll::{ControlOperation, Epoll, EpollEvent, EventSet}; +use vmm_sys_util::eventfd::EventFd; +use vmm_sys_util::tempfile::TempFile; mod test_utils { use vm_memory::VolatileMemory;