diff --git a/src/firecracker/src/api_server/parsed_request.rs b/src/firecracker/src/api_server/parsed_request.rs index 216e7c7fcf2..d16be7a63be 100644 --- a/src/firecracker/src/api_server/parsed_request.rs +++ b/src/firecracker/src/api_server/parsed_request.rs @@ -157,7 +157,7 @@ impl ParsedRequest { } pub(crate) fn convert_to_response( - request_outcome: &std::result::Result, + request_outcome: &Result, ) -> Response { match request_outcome { Ok(vmm_data) => match vmm_data { diff --git a/src/jailer/src/cgroup.rs b/src/jailer/src/cgroup.rs index 8128a2b482f..3daea49ec25 100644 --- a/src/jailer/src/cgroup.rs +++ b/src/jailer/src/cgroup.rs @@ -522,7 +522,7 @@ pub mod test_util { pub fn create_file_with_contents + Debug>( filename: P, contents: &str, - ) -> std::result::Result<(), std::io::Error> { + ) -> Result<(), std::io::Error> { let mut file = OpenOptions::new() .read(true) .write(true) @@ -534,7 +534,7 @@ pub mod test_util { Ok(()) } - pub fn new() -> std::result::Result { + pub fn new() -> Result { let mock_jailer_dir = TempDir::new().unwrap(); let mock_proc_mounts = mock_jailer_dir.as_path().join("proc/mounts"); let mock_sys_cgroups = mock_jailer_dir.as_path().join("sys_cgroup"); @@ -557,7 +557,7 @@ pub mod test_util { // Populate the mocked proc/mounts file with cgroupv2 entries // Also create a directory structure that simulates cgroupsv2 layout - pub fn add_v2_mounts(&mut self) -> std::result::Result<(), std::io::Error> { + pub fn add_v2_mounts(&mut self) -> Result<(), std::io::Error> { writeln!( self.mounts_file, "cgroupv2 {}/unified cgroup2 rw,nosuid,nodev,noexec,relatime,nsdelegate 0 0", @@ -574,7 +574,7 @@ pub mod test_util { } // Populate the mocked proc/mounts file with cgroupv1 entries - pub fn add_v1_mounts(&mut self) -> std::result::Result<(), std::io::Error> { + pub fn add_v1_mounts(&mut self) -> Result<(), std::io::Error> { let controllers = vec![ "memory", "net_cls,net_prio", @@ -610,7 +610,7 @@ mod tests { use crate::cgroup::test_util::MockCgroupFs; // Utility function to read the first line in a file - fn read_first_line

(filename: P) -> std::result::Result + fn read_first_line

(filename: P) -> Result where P: AsRef + Debug, { diff --git a/src/vmm/src/device_manager/mod.rs b/src/vmm/src/device_manager/mod.rs index d11996ad06d..f35190b5841 100644 --- a/src/vmm/src/device_manager/mod.rs +++ b/src/vmm/src/device_manager/mod.rs @@ -471,7 +471,7 @@ impl<'a> Persist<'a> for DeviceManager { fn restore( constructor_args: Self::ConstructorArgs, state: &Self::State, - ) -> std::result::Result { + ) -> Result { // Setup legacy devices in case of x86 #[cfg(target_arch = "x86_64")] let legacy_devices = Self::create_legacy_devices( diff --git a/src/vmm/src/device_manager/pci_mngr.rs b/src/vmm/src/device_manager/pci_mngr.rs index b9fab1afa3a..a9290886997 100644 --- a/src/vmm/src/device_manager/pci_mngr.rs +++ b/src/vmm/src/device_manager/pci_mngr.rs @@ -396,7 +396,7 @@ impl<'a> Persist<'a> for PciDevices { fn restore( constructor_args: Self::ConstructorArgs, state: &Self::State, - ) -> std::result::Result { + ) -> Result { let mem = constructor_args.mem; let mut pci_devices = PciDevices::new(); if !state.pci_enabled { diff --git a/src/vmm/src/device_manager/persist.rs b/src/vmm/src/device_manager/persist.rs index b6b2ff7eb70..f874975981b 100644 --- a/src/vmm/src/device_manager/persist.rs +++ b/src/vmm/src/device_manager/persist.rs @@ -193,7 +193,7 @@ impl<'a> Persist<'a> for ACPIDeviceManager { fn restore( constructor_args: Self::ConstructorArgs, state: &Self::State, - ) -> std::result::Result { + ) -> Result { let mut dev_manager = ACPIDeviceManager::new(); if let Some(vmgenid_args) = &state.vmgenid { let vmgenid = VmGenId::restore( diff --git a/src/vmm/src/devices/acpi/vmgenid.rs b/src/vmm/src/devices/acpi/vmgenid.rs index 8dc89289c98..18881cd39c9 100644 --- a/src/vmm/src/devices/acpi/vmgenid.rs +++ b/src/vmm/src/devices/acpi/vmgenid.rs @@ -151,7 +151,7 @@ impl<'a> Persist<'a> for VmGenId { fn restore( constructor_args: Self::ConstructorArgs, state: &Self::State, - ) -> std::result::Result { + ) -> Result { Self::from_parts(GuestAddress(state.addr), state.gsi, constructor_args.mem) } } diff --git a/src/vmm/src/devices/virtio/device.rs b/src/vmm/src/devices/virtio/device.rs index 8d98b3f0d11..5f7d2170f21 100644 --- a/src/vmm/src/devices/virtio/device.rs +++ b/src/vmm/src/devices/virtio/device.rs @@ -197,6 +197,7 @@ pub(crate) mod tests { #[derive(Debug)] struct MockVirtioDevice { + avail_features: u64, acked_features: u64, } @@ -204,15 +205,15 @@ pub(crate) mod tests { impl_device_type!(0); fn avail_features(&self) -> u64 { - todo!() + self.avail_features } fn acked_features(&self) -> u64 { self.acked_features } - fn set_acked_features(&mut self, _acked_features: u64) { - todo!() + fn set_acked_features(&mut self, acked_features: u64) { + self.acked_features = acked_features } fn queues(&self) -> &[Queue] { @@ -254,7 +255,10 @@ pub(crate) mod tests { #[test] fn test_has_feature() { - let mut device = MockVirtioDevice { acked_features: 0 }; + let mut device = MockVirtioDevice { + avail_features: 0, + acked_features: 0, + }; let mock_feature_1 = 1u64; assert!(!device.has_feature(mock_feature_1)); @@ -267,4 +271,29 @@ pub(crate) mod tests { assert!(device.has_feature(mock_feature_1)); assert!(device.has_feature(mock_feature_2)); } + + #[test] + fn test_features() { + let features: u64 = 0x11223344_55667788; + + let mut device = MockVirtioDevice { + avail_features: features, + acked_features: 0, + }; + + assert_eq!( + device.avail_features_by_page(0), + (features & 0xFFFFFFFF) as u32, + ); + assert_eq!(device.avail_features_by_page(1), (features >> 32) as u32); + for i in 2..10 { + assert_eq!(device.avail_features_by_page(i), 0u32); + } + + for i in 0..10 { + device.ack_features_by_page(i, u32::MAX); + } + + assert_eq!(device.acked_features, features); + } } diff --git a/src/vmm/src/devices/virtio/net/device.rs b/src/vmm/src/devices/virtio/net/device.rs index d235c539c83..4ce89c342c7 100755 --- a/src/vmm/src/devices/virtio/net/device.rs +++ b/src/vmm/src/devices/virtio/net/device.rs @@ -1156,41 +1156,6 @@ pub mod tests { assert_eq!(net.device_type(), VIRTIO_ID_NET); } - #[test] - fn test_virtio_device_features() { - let mut net = default_net(); - set_mac(&mut net, MacAddr::from_str("11:22:33:44:55:66").unwrap()); - - // Test `features()` and `ack_features()`. - let features = (1 << VIRTIO_NET_F_GUEST_CSUM) - | (1 << VIRTIO_NET_F_CSUM) - | (1 << VIRTIO_NET_F_GUEST_TSO4) - | (1 << VIRTIO_NET_F_GUEST_TSO6) - | (1 << VIRTIO_NET_F_MAC) - | (1 << VIRTIO_NET_F_GUEST_UFO) - | (1 << VIRTIO_NET_F_HOST_TSO4) - | (1 << VIRTIO_NET_F_HOST_TSO6) - | (1 << VIRTIO_NET_F_HOST_UFO) - | (1 << VIRTIO_F_VERSION_1) - | (1 << VIRTIO_NET_F_MRG_RXBUF) - | (1 << VIRTIO_RING_F_EVENT_IDX); - - assert_eq!( - net.avail_features_by_page(0), - (features & 0xFFFFFFFF) as u32, - ); - assert_eq!(net.avail_features_by_page(1), (features >> 32) as u32); - for i in 2..10 { - assert_eq!(net.avail_features_by_page(i), 0u32); - } - - for i in 0..10 { - net.ack_features_by_page(i, u32::MAX); - } - - assert_eq!(net.acked_features, features); - } - #[test] // Test that `Net::build_tap_offload_features` creates the TAP offload features that we expect // it to do, based on the available guest features diff --git a/src/vmm/src/devices/virtio/rng/device.rs b/src/vmm/src/devices/virtio/rng/device.rs index 6f488fbe217..1f2ce079aed 100644 --- a/src/vmm/src/devices/virtio/rng/device.rs +++ b/src/vmm/src/devices/virtio/rng/device.rs @@ -410,31 +410,6 @@ mod tests { assert_eq!(read_config, vec![0; 10]); } - #[test] - fn test_virtio_device_features() { - let mut entropy_dev = default_entropy(); - - let features = 1 << VIRTIO_F_VERSION_1; - - assert_eq!( - entropy_dev.avail_features_by_page(0), - (features & 0xFFFFFFFF) as u32, - ); - assert_eq!( - entropy_dev.avail_features_by_page(1), - (features >> 32) as u32 - ); - for i in 2..10 { - assert_eq!(entropy_dev.avail_features_by_page(i), 0u32); - } - - for i in 0..10 { - entropy_dev.ack_features_by_page(i, u32::MAX); - } - - assert_eq!(entropy_dev.acked_features, features); - } - #[test] fn test_handle_one() { let mem = create_virtio_mem(); diff --git a/src/vmm/src/devices/virtio/transport/pci/device.rs b/src/vmm/src/devices/virtio/transport/pci/device.rs index 9bc604fc7c1..4b48562ea25 100644 --- a/src/vmm/src/devices/virtio/transport/pci/device.rs +++ b/src/vmm/src/devices/virtio/transport/pci/device.rs @@ -14,7 +14,6 @@ use std::io::{ErrorKind, Write}; use std::sync::atomic::{AtomicBool, AtomicU16, AtomicU32, AtomicUsize, Ordering}; use std::sync::{Arc, Barrier, Mutex}; -use anyhow::anyhow; use kvm_ioctls::{IoEventAddress, NoDatamatch}; use log::warn; use pci::{ @@ -39,7 +38,7 @@ use crate::devices::virtio::transport::{VirtioInterrupt, VirtioInterruptType}; use crate::logger::{debug, error}; use crate::pci::configuration::{PciCapability, PciConfiguration, PciConfigurationState}; use crate::pci::msix::{MsixCap, MsixConfig, MsixConfigState}; -use crate::pci::{BarReprogrammingParams, PciDevice}; +use crate::pci::{BarReprogrammingParams, DeviceRelocationError, PciDevice}; use crate::snapshot::Persist; use crate::utils::u64_to_usize; use crate::vstate::bus::BusDevice; @@ -251,11 +250,10 @@ pub struct VirtioPciDeviceState { #[derive(Debug, thiserror::Error, displaydoc::Display)] pub enum VirtioPciDeviceError { /// Failed creating VirtioPciDevice: {0} - CreateVirtioPciDevice(#[from] anyhow::Error), + CreateVirtioPciDevice(#[from] DeviceRelocationError), /// Error creating MSI configuration: {0} Msi(#[from] InterruptError), } -pub type Result = std::result::Result; pub struct VirtioPciDevice { id: String, @@ -370,7 +368,7 @@ impl VirtioPciDevice { device: Arc>, msix_vectors: Arc, pci_device_bdf: u32, - ) -> Result { + ) -> Result { let num_queues = device.lock().expect("Poisoned lock").queues().len(); let msix_config = Arc::new(Mutex::new(MsixConfig::new( @@ -419,7 +417,7 @@ impl VirtioPciDevice { vm: &Arc, device: Arc>, state: VirtioPciDeviceState, - ) -> Result { + ) -> Result { let msix_config = MsixConfig::from_state(state.msix_state, vm.clone(), state.pci_device_bdf.into())?; let vectors = msix_config.vectors.clone(); @@ -603,7 +601,7 @@ impl VirtioPciDevice { } /// Register the IoEvent notification for a VirtIO device - pub fn register_notification_ioevent(&self, vm: &Vm) -> std::result::Result<(), errno::Error> { + pub fn register_notification_ioevent(&self, vm: &Vm) -> Result<(), errno::Error> { let bar_addr = self.config_bar_addr(); for (i, queue_evt) in self .device @@ -676,7 +674,7 @@ impl VirtioInterruptMsix { } impl VirtioInterrupt for VirtioInterruptMsix { - fn trigger(&self, int_type: VirtioInterruptType) -> std::result::Result<(), InterruptError> { + fn trigger(&self, int_type: VirtioInterruptType) -> Result<(), InterruptError> { let vector = match int_type { VirtioInterruptType::Config => self.config_vector.load(Ordering::Acquire), VirtioInterruptType::Queue(queue_index) => *self @@ -783,7 +781,7 @@ impl PciDevice for VirtioPciDevice { self.configuration.detect_bar_reprogramming(reg_idx, data) } - fn move_bar(&mut self, old_base: u64, new_base: u64) -> std::result::Result<(), anyhow::Error> { + fn move_bar(&mut self, old_base: u64, new_base: u64) -> Result<(), DeviceRelocationError> { // We only update our idea of the bar in order to support free_bars() above. // The majority of the reallocation is done inside DeviceManager. if self.bar_address == old_base { diff --git a/src/vmm/src/dumbo/pdu/arp.rs b/src/vmm/src/dumbo/pdu/arp.rs index 7beef7e4d37..8a38aab4cb2 100644 --- a/src/vmm/src/dumbo/pdu/arp.rs +++ b/src/vmm/src/dumbo/pdu/arp.rs @@ -10,7 +10,6 @@ use std::convert::From; use std::fmt::Debug; use std::net::Ipv4Addr; -use std::result::Result; use super::bytes::{InnerBytes, NetworkBytes, NetworkBytesMut}; use super::ethernet::{self, ETHERTYPE_IPV4}; diff --git a/src/vmm/src/dumbo/pdu/ethernet.rs b/src/vmm/src/dumbo/pdu/ethernet.rs index 6b7112e36ea..d69ccdc17cf 100644 --- a/src/vmm/src/dumbo/pdu/ethernet.rs +++ b/src/vmm/src/dumbo/pdu/ethernet.rs @@ -5,7 +5,6 @@ //! 802.1Q tags. use std::fmt::Debug; -use std::result::Result; use super::Incomplete; use super::bytes::{InnerBytes, NetworkBytes, NetworkBytesMut}; diff --git a/src/vmm/src/dumbo/pdu/ipv4.rs b/src/vmm/src/dumbo/pdu/ipv4.rs index e49a1f9a025..f47cb5284b7 100644 --- a/src/vmm/src/dumbo/pdu/ipv4.rs +++ b/src/vmm/src/dumbo/pdu/ipv4.rs @@ -10,7 +10,6 @@ use std::convert::From; use std::fmt::Debug; use std::net::Ipv4Addr; -use std::result::Result; use crate::dumbo::pdu::bytes::{InnerBytes, NetworkBytes, NetworkBytesMut}; use crate::dumbo::pdu::{Incomplete, ethernet}; diff --git a/src/vmm/src/dumbo/pdu/tcp.rs b/src/vmm/src/dumbo/pdu/tcp.rs index ab46da2367a..4ff1da93dd7 100644 --- a/src/vmm/src/dumbo/pdu/tcp.rs +++ b/src/vmm/src/dumbo/pdu/tcp.rs @@ -11,7 +11,6 @@ use std::cmp::min; use std::fmt::Debug; use std::net::Ipv4Addr; use std::num::NonZeroU16; -use std::result::Result; use bitflags::bitflags; diff --git a/src/vmm/src/mmds/ns.rs b/src/vmm/src/mmds/ns.rs index a31cb7247b9..fbb3870168f 100644 --- a/src/vmm/src/mmds/ns.rs +++ b/src/vmm/src/mmds/ns.rs @@ -7,7 +7,6 @@ use std::convert::From; use std::net::Ipv4Addr; use std::num::NonZeroUsize; -use std::result::Result; use std::str::FromStr; use std::sync::{Arc, Mutex}; diff --git a/src/vmm/src/mmds/persist.rs b/src/vmm/src/mmds/persist.rs index e770a0a373b..56e507ff332 100644 --- a/src/vmm/src/mmds/persist.rs +++ b/src/vmm/src/mmds/persist.rs @@ -37,10 +37,7 @@ impl Persist<'_> for MmdsNetworkStack { } } - fn restore( - mmds: Self::ConstructorArgs, - state: &Self::State, - ) -> std::result::Result { + fn restore(mmds: Self::ConstructorArgs, state: &Self::State) -> Result { Ok(MmdsNetworkStack::new( MacAddr::from_bytes_unchecked(&state.mac_addr), Ipv4Addr::from(state.ipv4_addr), diff --git a/src/vmm/src/pci/bus.rs b/src/vmm/src/pci/bus.rs index a88263226de..12076b093c3 100644 --- a/src/vmm/src/pci/bus.rs +++ b/src/vmm/src/pci/bus.rs @@ -458,7 +458,7 @@ mod tests { use super::{PciBus, PciConfigIo, PciConfigMmio, PciRoot}; use crate::pci::bus::{DEVICE_ID_INTEL_VIRT_PCIE_HOST, VENDOR_ID_INTEL}; use crate::pci::configuration::PciConfiguration; - use crate::pci::{BarReprogrammingParams, DeviceRelocation, PciDevice}; + use crate::pci::{BarReprogrammingParams, DeviceRelocation, DeviceRelocationError, PciDevice}; use crate::vstate::bus::BusDevice; #[derive(Debug, Default)] @@ -479,7 +479,7 @@ mod tests { _new_base: u64, _len: u64, _pci_dev: &mut dyn PciDevice, - ) -> Result<(), anyhow::Error> { + ) -> Result<(), DeviceRelocationError> { self.reloc_cnt .fetch_add(1, std::sync::atomic::Ordering::SeqCst); Ok(()) diff --git a/src/vmm/src/pci/mod.rs b/src/vmm/src/pci/mod.rs index 2d4826349f8..f32a3197ada 100644 --- a/src/vmm/src/pci/mod.rs +++ b/src/vmm/src/pci/mod.rs @@ -59,11 +59,18 @@ pub trait PciDevice: Send { None } /// Relocates the BAR to a different address in guest address space. - fn move_bar(&mut self, _old_base: u64, _new_base: u64) -> Result<(), anyhow::Error> { + fn move_bar(&mut self, _old_base: u64, _new_base: u64) -> Result<(), DeviceRelocationError> { Ok(()) } } +/// Errors for device manager. +#[derive(Debug, thiserror::Error, displaydoc::Display)] +pub enum DeviceRelocationError { + /// Device relocation not supported. + NotSupported, +} + /// This trait defines a set of functions which can be triggered whenever a /// PCI device is modified in any way. pub trait DeviceRelocation: Send + Sync { @@ -75,5 +82,5 @@ pub trait DeviceRelocation: Send + Sync { new_base: u64, len: u64, pci_dev: &mut dyn PciDevice, - ) -> Result<(), anyhow::Error>; + ) -> Result<(), DeviceRelocationError>; } diff --git a/src/vmm/src/rpc_interface.rs b/src/vmm/src/rpc_interface.rs index 8f2ff6b7740..e0701e740ef 100644 --- a/src/vmm/src/rpc_interface.rs +++ b/src/vmm/src/rpc_interface.rs @@ -290,7 +290,7 @@ pub enum LoadSnapshotError { /// Shorthand type for a request containing a boxed VmmAction. pub type ApiRequest = Box; /// Shorthand type for a response containing a boxed Result. -pub type ApiResponse = Box>; +pub type ApiResponse = Box>; /// Error type for `PrebootApiController::build_microvm_from_requests`. #[derive(Debug, thiserror::Error, displaydoc::Display)] diff --git a/src/vmm/src/snapshot/persist.rs b/src/vmm/src/snapshot/persist.rs index fa9a62696d4..4e8436363e0 100644 --- a/src/vmm/src/snapshot/persist.rs +++ b/src/vmm/src/snapshot/persist.rs @@ -21,5 +21,5 @@ where fn restore( constructor_args: Self::ConstructorArgs, state: &Self::State, - ) -> std::result::Result; + ) -> Result; } diff --git a/src/vmm/src/utils/mod.rs b/src/vmm/src/utils/mod.rs index 430f9fe9a71..8577bdcfd08 100644 --- a/src/vmm/src/utils/mod.rs +++ b/src/vmm/src/utils/mod.rs @@ -11,7 +11,6 @@ pub mod signal; pub mod sm; use std::num::Wrapping; -use std::result::Result; /// How many bits to left-shift by to convert MiB to bytes const MIB_TO_BYTES_SHIFT: usize = 20; diff --git a/src/vmm/src/utils/net/mac.rs b/src/vmm/src/utils/net/mac.rs index 86f92881b04..5f82485169c 100644 --- a/src/vmm/src/utils/net/mac.rs +++ b/src/vmm/src/utils/net/mac.rs @@ -11,7 +11,6 @@ //! [here]: https://en.wikipedia.org/wiki/MAC_address use std::fmt; -use std::result::Result; use std::str::FromStr; use serde::de::{Deserialize, Deserializer, Error}; diff --git a/src/vmm/src/vstate/resources.rs b/src/vmm/src/vstate/resources.rs index 9e51e6a9e57..2f906460333 100644 --- a/src/vmm/src/vstate/resources.rs +++ b/src/vmm/src/vstate/resources.rs @@ -178,7 +178,7 @@ impl<'a> Persist<'a> for ResourceAllocator { fn restore( _constructor_args: Self::ConstructorArgs, state: &Self::State, - ) -> std::result::Result { + ) -> Result { Ok(state.clone()) } } diff --git a/src/vmm/src/vstate/vm.rs b/src/vmm/src/vstate/vm.rs index 8a479348747..5099694cf54 100644 --- a/src/vmm/src/vstate/vm.rs +++ b/src/vmm/src/vstate/vm.rs @@ -11,7 +11,6 @@ use std::io::Write; use std::path::Path; use std::sync::{Arc, Mutex, MutexGuard}; -use anyhow::anyhow; #[cfg(target_arch = "x86_64")] use kvm_bindings::KVM_IRQCHIP_IOAPIC; use kvm_bindings::{ @@ -27,7 +26,7 @@ use vmm_sys_util::eventfd::EventFd; pub use crate::arch::{ArchVm as Vm, ArchVmError, VmState}; use crate::arch::{GSI_MSI_END, host_page_size}; use crate::logger::info; -use crate::pci::{DeviceRelocation, PciDevice}; +use crate::pci::{DeviceRelocation, DeviceRelocationError, PciDevice}; use crate::persist::CreateSnapshotError; use crate::utils::u64_to_usize; use crate::vmm_config::snapshot::SnapshotType; @@ -481,8 +480,8 @@ impl DeviceRelocation for Vm { _new_base: u64, _len: u64, _pci_dev: &mut dyn PciDevice, - ) -> Result<(), anyhow::Error> { - Err(anyhow!("pci: device relocation not supported")) + ) -> Result<(), DeviceRelocationError> { + Err(DeviceRelocationError::NotSupported) } }