diff options
-rw-r--r-- | devices/src/pci/ac97.rs | 6 | ||||
-rw-r--r-- | devices/src/pci/vfio_pci.rs | 4 | ||||
-rw-r--r-- | devices/src/usb/xhci/xhci_controller.rs | 4 | ||||
-rw-r--r-- | devices/src/virtio/virtio_pci_device.rs | 6 | ||||
-rw-r--r-- | resources/src/lib.rs | 2 | ||||
-rw-r--r-- | resources/src/system_allocator.rs | 29 | ||||
-rw-r--r-- | src/linux.rs | 6 | ||||
-rw-r--r-- | vm_control/src/lib.rs | 6 |
8 files changed, 35 insertions, 28 deletions
diff --git a/devices/src/pci/ac97.rs b/devices/src/pci/ac97.rs index 2deef03..73a5093 100644 --- a/devices/src/pci/ac97.rs +++ b/devices/src/pci/ac97.rs @@ -5,7 +5,7 @@ use std::os::unix::io::RawFd; use audio_streams::StreamSource; -use resources::{Alloc, SystemAllocator}; +use resources::{Alloc, MmioType, SystemAllocator}; use sys_util::{error, EventFd, GuestMemory}; use crate::pci::ac97_bus_master::Ac97BusMaster; @@ -149,7 +149,7 @@ impl PciDevice for Ac97Dev { .expect("assign_bus_dev must be called prior to allocate_io_bars"); let mut ranges = Vec::new(); let mixer_regs_addr = resources - .mmio_allocator() + .mmio_allocator(MmioType::Mmio) .allocate_with_align( MIXER_REGS_SIZE, Alloc::PciBar { bus, dev, bar: 0 }, @@ -167,7 +167,7 @@ impl PciDevice for Ac97Dev { ranges.push((mixer_regs_addr, MIXER_REGS_SIZE)); let master_regs_addr = resources - .mmio_allocator() + .mmio_allocator(MmioType::Mmio) .allocate_with_align( MASTER_REGS_SIZE, Alloc::PciBar { bus, dev, bar: 1 }, diff --git a/devices/src/pci/vfio_pci.rs b/devices/src/pci/vfio_pci.rs index a1e7a74..c10715d 100644 --- a/devices/src/pci/vfio_pci.rs +++ b/devices/src/pci/vfio_pci.rs @@ -8,7 +8,7 @@ use std::u32; use kvm::Datamatch; use msg_socket::{MsgReceiver, MsgSender}; -use resources::{Alloc, SystemAllocator}; +use resources::{Alloc, MmioType, SystemAllocator}; use sys_util::{error, EventFd}; use vfio_sys::*; @@ -502,7 +502,7 @@ impl PciDevice for VfioPciDevice { size |= u64::from(low); size = !size + 1; let bar_addr = resources - .mmio_allocator() + .mmio_allocator(MmioType::Mmio) .allocate_with_align( size, Alloc::PciBar { diff --git a/devices/src/usb/xhci/xhci_controller.rs b/devices/src/usb/xhci/xhci_controller.rs index 5db31ef..dfba4a4 100644 --- a/devices/src/usb/xhci/xhci_controller.rs +++ b/devices/src/usb/xhci/xhci_controller.rs @@ -12,7 +12,7 @@ use crate::usb::xhci::xhci::Xhci; use crate::usb::xhci::xhci_backend_device_provider::XhciBackendDeviceProvider; use crate::usb::xhci::xhci_regs::{init_xhci_mmio_space_and_regs, XhciRegs}; use crate::utils::FailHandle; -use resources::{Alloc, SystemAllocator}; +use resources::{Alloc, MmioType, SystemAllocator}; use std::mem; use std::os::unix::io::RawFd; use std::sync::atomic::{AtomicBool, Ordering}; @@ -213,7 +213,7 @@ impl PciDevice for XhciController { .expect("assign_bus_dev must be called prior to allocate_io_bars"); // xHCI spec 5.2.1. let bar0_addr = resources - .mmio_allocator() + .mmio_allocator(MmioType::Mmio) .allocate_with_align( XHCI_BAR0_SIZE, Alloc::PciBar { bus, dev, bar: 0 }, diff --git a/devices/src/virtio/virtio_pci_device.rs b/devices/src/virtio/virtio_pci_device.rs index 033d4ee..bd94fe3 100644 --- a/devices/src/virtio/virtio_pci_device.rs +++ b/devices/src/virtio/virtio_pci_device.rs @@ -10,7 +10,7 @@ use sync::Mutex; use data_model::{DataInit, Le32}; use kvm::Datamatch; -use resources::{Alloc, SystemAllocator}; +use resources::{Alloc, MmioType, SystemAllocator}; use sys_util::{EventFd, GuestMemory, Result}; use super::*; @@ -384,7 +384,7 @@ impl PciDevice for VirtioPciDevice { // Allocate one bar for the structures pointed to by the capability structures. let mut ranges = Vec::new(); let settings_config_addr = resources - .mmio_allocator() + .mmio_allocator(MmioType::Mmio) .allocate_with_align( CAPABILITY_BAR_SIZE, Alloc::PciBar { bus, dev, bar: 0 }, @@ -422,7 +422,7 @@ impl PciDevice for VirtioPciDevice { let mut ranges = Vec::new(); for config in self.device.get_device_bars(bus, dev) { let device_addr = resources - .device_allocator() + .mmio_allocator(MmioType::Device) .allocate_with_align( config.get_size(), Alloc::PciBar { diff --git a/resources/src/lib.rs b/resources/src/lib.rs index ce4855a..27f6abc 100644 --- a/resources/src/lib.rs +++ b/resources/src/lib.rs @@ -17,7 +17,7 @@ pub use crate::address_allocator::AddressAllocator; pub use crate::gpu_allocator::{ GpuAllocatorError, GpuMemoryAllocator, GpuMemoryDesc, GpuMemoryPlaneDesc, }; -pub use crate::system_allocator::SystemAllocator; +pub use crate::system_allocator::{MmioType, SystemAllocator}; mod address_allocator; mod gpu_allocator; diff --git a/resources/src/system_allocator.rs b/resources/src/system_allocator.rs index 6cdb70e..b3a3062 100644 --- a/resources/src/system_allocator.rs +++ b/resources/src/system_allocator.rs @@ -13,7 +13,7 @@ use crate::{Alloc, Error, Result}; /// # Example - Use the `SystemAddress` builder. /// /// ``` -/// # use resources::{Alloc, SystemAllocator}; +/// # use resources::{Alloc, MmioType, SystemAllocator}; /// if let Ok(mut a) = SystemAllocator::builder() /// .add_io_addresses(0x1000, 0x10000) /// .add_device_addresses(0x10000000, 0x10000000) @@ -22,7 +22,7 @@ use crate::{Alloc, Error, Result}; /// assert_eq!(a.allocate_irq(), Some(5)); /// assert_eq!(a.allocate_irq(), Some(6)); /// assert_eq!( -/// a.device_allocator() +/// a.mmio_allocator(MmioType::Device) /// .allocate( /// 0x100, /// Alloc::PciBar { bus: 0, dev: 0, bar: 0 }, @@ -31,11 +31,20 @@ use crate::{Alloc, Error, Result}; /// Ok(0x10000000) /// ); /// assert_eq!( -/// a.device_allocator().get(&Alloc::PciBar { bus: 0, dev: 0, bar: 0 }), +/// a.mmio_allocator(MmioType::Device).get(&Alloc::PciBar { bus: 0, dev: 0, bar: 0 }), /// Some(&(0x10000000, 0x100, "bar0".to_string())) /// ); /// } /// ``` + +/// MMIO address Type +/// Mmio: address allocated from mmio_address_space +/// Device: address allocated from device_address_space +pub enum MmioType { + Mmio, + Device, +} + #[derive(Debug)] pub struct SystemAllocator { io_address_space: Option<AddressAllocator>, @@ -108,14 +117,12 @@ impl SystemAllocator { self.io_address_space.as_mut() } - /// Gets an allocator to be used for device memory. - pub fn device_allocator(&mut self) -> &mut AddressAllocator { - &mut self.device_address_space - } - - /// Gets an allocator to be used for MMIO memory. - pub fn mmio_allocator(&mut self) -> &mut AddressAllocator { - &mut self.mmio_address_space + /// Gets an allocator to be used for MMIO allocation. + pub fn mmio_allocator(&mut self, mmio_type: MmioType) -> &mut AddressAllocator { + match mmio_type { + MmioType::Device => &mut self.device_address_space, + MmioType::Mmio => &mut self.mmio_address_space, + } } /// Gets an allocator to be used for GPU memory. diff --git a/src/linux.rs b/src/linux.rs index 0a3860e..2816d55 100644 --- a/src/linux.rs +++ b/src/linux.rs @@ -38,7 +38,7 @@ use msg_socket::{MsgError, MsgReceiver, MsgSender, MsgSocket}; use net_util::{Error as NetError, MacAddress, Tap}; use rand_ish::SimpleRng; use remain::sorted; -use resources::{Alloc, SystemAllocator}; +use resources::{Alloc, MmioType, SystemAllocator}; use sync::{Condvar, Mutex}; use sys_util::net::{UnixSeqpacket, UnixSeqpacketListener, UnlinkUnixSeqpacketListener}; @@ -784,7 +784,7 @@ fn create_pmem_device( }; let mapping_address = resources - .device_allocator() + .mmio_allocator(MmioType::Device) .allocate_with_align( image_size, Alloc::PmemDevice(index), @@ -1424,7 +1424,7 @@ pub fn run_config(cfg: Config) -> Result<()> { // guest address space. let gpu_addr = linux .resources - .device_allocator() + .mmio_allocator(MmioType::Device) .allocate( RENDER_NODE_HOST_SIZE, Alloc::GpuRenderNode, diff --git a/vm_control/src/lib.rs b/vm_control/src/lib.rs index f25ab20..71bb193 100644 --- a/vm_control/src/lib.rs +++ b/vm_control/src/lib.rs @@ -19,7 +19,7 @@ use libc::{EINVAL, EIO, ENODEV}; use kvm::{IrqRoute, IrqSource, Vm}; use msg_socket::{MsgOnSocket, MsgReceiver, MsgResult, MsgSender, MsgSocket}; -use resources::{Alloc, GpuMemoryDesc, SystemAllocator}; +use resources::{Alloc, GpuMemoryDesc, MmioType, SystemAllocator}; use sys_util::{error, Error as SysError, EventFd, GuestAddress, MemoryMapping, MmapError, Result}; /// A file descriptor either borrowed or owned by this. @@ -404,7 +404,7 @@ fn register_memory( let addr = match allocation { Some((Alloc::PciBar { bus, dev, bar }, address)) => { match allocator - .device_allocator() + .mmio_allocator(MmioType::Device) .get(&Alloc::PciBar { bus, dev, bar }) { Some((start_addr, length, _)) => { @@ -420,7 +420,7 @@ fn register_memory( } None => { let alloc = allocator.get_anon_alloc(); - match allocator.device_allocator().allocate( + match allocator.mmio_allocator(MmioType::Device).allocate( size as u64, alloc, "vmcontrol_register_memory".to_string(), |