diff --git a/block_util/src/lib.rs b/block_util/src/lib.rs index 273cc48df..8f3db17e2 100644 --- a/block_util/src/lib.rs +++ b/block_util/src/lib.rs @@ -35,11 +35,12 @@ use std::sync::MutexGuard; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; use virtio_bindings::bindings::virtio_blk::*; -use virtio_queue::{AccessPlatform, DescriptorChain}; +use virtio_queue::DescriptorChain; use vm_memory::{ bitmap::AtomicBitmap, bitmap::Bitmap, ByteValued, Bytes, GuestAddress, GuestMemory, GuestMemoryError, GuestMemoryLoadGuard, }; +use vm_virtio::AccessPlatform; use vmm_sys_util::eventfd::EventFd; type GuestMemoryMmap = vm_memory::GuestMemoryMmap; diff --git a/net_util/src/ctrl_queue.rs b/net_util/src/ctrl_queue.rs index 745b3f8e7..7ccd6b9c7 100644 --- a/net_util/src/ctrl_queue.rs +++ b/net_util/src/ctrl_queue.rs @@ -13,8 +13,9 @@ use virtio_bindings::bindings::virtio_net::{ VIRTIO_NET_F_GUEST_ECN, VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6, VIRTIO_NET_F_GUEST_UFO, VIRTIO_NET_OK, }; -use virtio_queue::{AccessPlatform, Queue}; +use virtio_queue::Queue; use vm_memory::{ByteValued, Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryError}; +use vm_virtio::AccessPlatform; #[derive(Debug)] pub enum Error { diff --git a/net_util/src/queue_pair.rs b/net_util/src/queue_pair.rs index 643defe23..cb904e014 100644 --- a/net_util/src/queue_pair.rs +++ b/net_util/src/queue_pair.rs @@ -10,8 +10,9 @@ use std::num::Wrapping; use std::os::unix::io::{AsRawFd, RawFd}; use std::sync::atomic::{AtomicU64, Ordering}; use std::sync::Arc; -use virtio_queue::{AccessPlatform, Queue}; +use virtio_queue::Queue; use vm_memory::{Bytes, GuestAddress, GuestMemory, GuestMemoryAtomic}; +use vm_virtio::AccessPlatform; #[derive(Clone)] pub struct TxVirtio { diff --git a/virtio-devices/src/block.rs b/virtio-devices/src/block.rs index e5c17a6ff..00619ff07 100644 --- a/virtio-devices/src/block.rs +++ b/virtio-devices/src/block.rs @@ -35,10 +35,11 @@ use std::{collections::HashMap, convert::TryInto}; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; use virtio_bindings::bindings::virtio_blk::*; -use virtio_queue::{AccessPlatform, Queue}; +use virtio_queue::Queue; use vm_memory::{ByteValued, Bytes, GuestAddressSpace, GuestMemoryAtomic}; use vm_migration::VersionMapped; use vm_migration::{Migratable, MigratableError, Pausable, Snapshot, Snapshottable, Transportable}; +use vm_virtio::AccessPlatform; use vmm_sys_util::eventfd::EventFd; const SECTOR_SHIFT: u8 = 9; diff --git a/virtio-devices/src/console.rs b/virtio-devices/src/console.rs index 81206baa8..0a259f1e2 100644 --- a/virtio-devices/src/console.rs +++ b/virtio-devices/src/console.rs @@ -24,10 +24,11 @@ use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; use std::sync::{Arc, Barrier, Mutex}; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; -use virtio_queue::{AccessPlatform, Queue}; +use virtio_queue::Queue; use vm_memory::{ByteValued, Bytes, GuestAddress, GuestMemoryAtomic}; use vm_migration::VersionMapped; use vm_migration::{Migratable, MigratableError, Pausable, Snapshot, Snapshottable, Transportable}; +use vm_virtio::AccessPlatform; use vmm_sys_util::eventfd::EventFd; const QUEUE_SIZE: u16 = 256; diff --git a/virtio-devices/src/device.rs b/virtio-devices/src/device.rs index 7f8534d87..67bcc4597 100644 --- a/virtio-devices/src/device.rs +++ b/virtio-devices/src/device.rs @@ -19,9 +19,10 @@ use std::sync::{ Arc, Barrier, }; use std::thread; -use virtio_queue::{AccessPlatform, Queue}; +use virtio_queue::Queue; use vm_memory::{GuestAddress, GuestMemoryAtomic, GuestUsize}; use vm_migration::{MigratableError, Pausable}; +use vm_virtio::AccessPlatform; use vm_virtio::VirtioDeviceType; use vmm_sys_util::eventfd::EventFd; diff --git a/virtio-devices/src/iommu.rs b/virtio-devices/src/iommu.rs index 0dc1a139a..14d689f2b 100644 --- a/virtio-devices/src/iommu.rs +++ b/virtio-devices/src/iommu.rs @@ -23,7 +23,7 @@ use std::sync::atomic::AtomicBool; use std::sync::{Arc, Barrier, RwLock}; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; -use virtio_queue::{AccessPlatform, DescriptorChain, Queue}; +use virtio_queue::{DescriptorChain, Queue}; use vm_device::dma_mapping::ExternalDmaMapping; use vm_memory::{ Address, ByteValued, Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryError, @@ -31,6 +31,7 @@ use vm_memory::{ }; use vm_migration::VersionMapped; use vm_migration::{Migratable, MigratableError, Pausable, Snapshot, Snapshottable, Transportable}; +use vm_virtio::AccessPlatform; use vmm_sys_util::eventfd::EventFd; /// Queues sizes diff --git a/virtio-devices/src/net.rs b/virtio-devices/src/net.rs index ec5920612..4b98d9423 100644 --- a/virtio-devices/src/net.rs +++ b/virtio-devices/src/net.rs @@ -35,10 +35,11 @@ use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; use virtio_bindings::bindings::virtio_net::*; use virtio_bindings::bindings::virtio_ring::VIRTIO_RING_F_EVENT_IDX; -use virtio_queue::{AccessPlatform, Queue}; +use virtio_queue::Queue; use vm_memory::{ByteValued, GuestMemoryAtomic}; use vm_migration::VersionMapped; use vm_migration::{Migratable, MigratableError, Pausable, Snapshot, Snapshottable, Transportable}; +use vm_virtio::AccessPlatform; use vmm_sys_util::eventfd::EventFd; /// Control queue diff --git a/virtio-devices/src/pmem.rs b/virtio-devices/src/pmem.rs index 1227e93d2..2e205c0dd 100644 --- a/virtio-devices/src/pmem.rs +++ b/virtio-devices/src/pmem.rs @@ -27,13 +27,14 @@ use std::sync::atomic::AtomicBool; use std::sync::{Arc, Barrier}; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; -use virtio_queue::{AccessPlatform, DescriptorChain, Queue}; +use virtio_queue::{DescriptorChain, Queue}; use vm_memory::{ Address, ByteValued, Bytes, GuestAddress, GuestMemoryAtomic, GuestMemoryError, GuestMemoryLoadGuard, }; use vm_migration::VersionMapped; use vm_migration::{Migratable, MigratableError, Pausable, Snapshot, Snapshottable, Transportable}; +use vm_virtio::AccessPlatform; use vmm_sys_util::eventfd::EventFd; const QUEUE_SIZE: u16 = 256; diff --git a/virtio-devices/src/rng.rs b/virtio-devices/src/rng.rs index 208a189bd..2370005ce 100644 --- a/virtio-devices/src/rng.rs +++ b/virtio-devices/src/rng.rs @@ -21,10 +21,11 @@ use std::sync::atomic::AtomicBool; use std::sync::{Arc, Barrier}; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; -use virtio_queue::{AccessPlatform, Queue}; +use virtio_queue::Queue; use vm_memory::{Bytes, GuestAddress, GuestMemoryAtomic}; use vm_migration::VersionMapped; use vm_migration::{Migratable, MigratableError, Pausable, Snapshot, Snapshottable, Transportable}; +use vm_virtio::AccessPlatform; use vmm_sys_util::eventfd::EventFd; const QUEUE_SIZE: u16 = 256; diff --git a/virtio-devices/src/transport/pci_common_config.rs b/virtio-devices/src/transport/pci_common_config.rs index 0f37ecb44..8bb92d463 100644 --- a/virtio-devices/src/transport/pci_common_config.rs +++ b/virtio-devices/src/transport/pci_common_config.rs @@ -12,9 +12,10 @@ use std::sync::atomic::{AtomicU16, Ordering}; use std::sync::{Arc, Mutex}; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; -use virtio_queue::{AccessPlatform, Queue}; +use virtio_queue::Queue; use vm_memory::{GuestAddress, GuestMemoryAtomic}; use vm_migration::{MigratableError, Pausable, Snapshot, Snapshottable, VersionMapped}; +use vm_virtio::AccessPlatform; #[derive(Clone, Versionize)] pub struct VirtioPciCommonConfigState { diff --git a/virtio-devices/src/transport/pci_device.rs b/virtio-devices/src/transport/pci_device.rs index d56afbbcb..a467d65fc 100644 --- a/virtio-devices/src/transport/pci_device.rs +++ b/virtio-devices/src/transport/pci_device.rs @@ -29,7 +29,6 @@ use std::sync::atomic::{AtomicBool, AtomicU16, AtomicUsize, Ordering}; use std::sync::{Arc, Barrier, Mutex}; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; -use virtio_queue::AccessPlatform; use virtio_queue::{defs::VIRTQ_MSI_NO_VECTOR, Error as QueueError, Queue}; use vm_allocator::{AddressAllocator, SystemAllocator}; use vm_device::interrupt::{ @@ -40,6 +39,7 @@ use vm_memory::{Address, ByteValued, GuestAddress, GuestMemoryAtomic, GuestUsize use vm_migration::{ Migratable, MigratableError, Pausable, Snapshot, Snapshottable, Transportable, VersionMapped, }; +use vm_virtio::AccessPlatform; use vmm_sys_util::{errno::Result, eventfd::EventFd}; #[derive(Debug)] diff --git a/virtio-devices/src/vsock/device.rs b/virtio-devices/src/vsock/device.rs index 205146c22..16d863d88 100644 --- a/virtio-devices/src/vsock/device.rs +++ b/virtio-devices/src/vsock/device.rs @@ -47,11 +47,12 @@ use std::sync::atomic::AtomicBool; use std::sync::{Arc, Barrier, RwLock}; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; -use virtio_queue::{AccessPlatform, Queue}; +use virtio_queue::Queue; use vm_memory::GuestMemoryAtomic; use vm_migration::{ Migratable, MigratableError, Pausable, Snapshot, Snapshottable, Transportable, VersionMapped, }; +use vm_virtio::AccessPlatform; use vmm_sys_util::eventfd::EventFd; const QUEUE_SIZE: u16 = 256; diff --git a/virtio-devices/src/vsock/packet.rs b/virtio-devices/src/vsock/packet.rs index cdd2a30f9..6e0b8b177 100644 --- a/virtio-devices/src/vsock/packet.rs +++ b/virtio-devices/src/vsock/packet.rs @@ -21,8 +21,9 @@ use std::sync::Arc; use super::defs; use super::{Result, VsockError}; use crate::{get_host_address_range, GuestMemoryMmap}; -use virtio_queue::{AccessPlatform, DescriptorChain}; +use virtio_queue::DescriptorChain; use vm_memory::{GuestAddress, GuestMemoryLoadGuard}; +use vm_virtio::AccessPlatform; // The vsock packet header is defined by the C struct: // diff --git a/vm-virtio/src/lib.rs b/vm-virtio/src/lib.rs index bb5ce2598..5cebb3e80 100644 --- a/vm-virtio/src/lib.rs +++ b/vm-virtio/src/lib.rs @@ -10,7 +10,7 @@ //! Implements virtio queues -use std::fmt; +use std::fmt::{self, Debug}; pub mod queue; pub use queue::*; @@ -87,3 +87,10 @@ impl fmt::Display for VirtioDeviceType { write!(f, "{}", output) } } + +/// Trait for devices with access to data in memory being limited and/or +/// translated. +pub trait AccessPlatform: Send + Sync + Debug { + /// Provide a way to translate address ranges. + fn translate(&self, base: u64, size: u64) -> std::result::Result; +} diff --git a/vmm/src/device_manager.rs b/vmm/src/device_manager.rs index d9eabafb6..e1e6a906f 100644 --- a/vmm/src/device_manager.rs +++ b/vmm/src/device_manager.rs @@ -92,7 +92,6 @@ use virtio_devices::vhost_user::VhostUserConfig; use virtio_devices::{AccessPlatformMapping, VirtioMemMappingSource}; use virtio_devices::{Endpoint, IommuMapping}; use virtio_devices::{VirtioSharedMemory, VirtioSharedMemoryList}; -use virtio_queue::AccessPlatform; use vm_allocator::{AddressAllocator, SystemAllocator}; use vm_device::dma_mapping::vfio::VfioDmaMapping; use vm_device::interrupt::{ @@ -108,6 +107,7 @@ use vm_migration::{ protocol::MemoryRangeTable, Migratable, MigratableError, Pausable, Snapshot, SnapshotDataSection, Snapshottable, Transportable, }; +use vm_virtio::AccessPlatform; use vm_virtio::VirtioDeviceType; use vmm_sys_util::eventfd::EventFd;