diff options
author | Daniel Verkamp <dverkamp@chromium.org> | 2018-10-05 11:40:59 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-10-12 23:07:16 -0700 |
commit | 56f283b297013a44e2f7d12c7a75e2267615c7f5 (patch) | |
tree | 57e35ee28119d718bb7b7c41f853d235b1ddcb96 /x86_64 | |
parent | ed31137fd027dcc53321fd946c6ead5a1726cf05 (diff) | |
download | crosvm-56f283b297013a44e2f7d12c7a75e2267615c7f5.tar crosvm-56f283b297013a44e2f7d12c7a75e2267615c7f5.tar.gz crosvm-56f283b297013a44e2f7d12c7a75e2267615c7f5.tar.bz2 crosvm-56f283b297013a44e2f7d12c7a75e2267615c7f5.tar.lz crosvm-56f283b297013a44e2f7d12c7a75e2267615c7f5.tar.xz crosvm-56f283b297013a44e2f7d12c7a75e2267615c7f5.tar.zst crosvm-56f283b297013a44e2f7d12c7a75e2267615c7f5.zip |
Revert "Revert "linux: Convert all virtio devices to PCI""
This reverts commit c8986f14a8dd9f256d6faed55996d955b50ff923. Re-land the virtio PCI conversion after the preceding fixes. BUG=chromium:854766 TEST=Boot crosvm on nami and kevin Change-Id: I3699e3ed1a45cecc99c51e352d0cf0c32bc4116f Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1265862 Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'x86_64')
-rw-r--r-- | x86_64/Cargo.toml | 1 | ||||
-rw-r--r-- | x86_64/src/lib.rs | 35 |
2 files changed, 12 insertions, 24 deletions
diff --git a/x86_64/Cargo.toml b/x86_64/Cargo.toml index d814814..687dec9 100644 --- a/x86_64/Cargo.toml +++ b/x86_64/Cargo.toml @@ -8,6 +8,7 @@ build = "build.rs" arch = { path = "../arch" } data_model = { path = "../data_model" } devices = { path = "../devices" } +io_jail = { path = "../io_jail" } kvm_sys = { path = "../kvm_sys" } kvm = { path = "../kvm" } sys_util = { path = "../sys_util" } diff --git a/x86_64/src/lib.rs b/x86_64/src/lib.rs index 244aa45..ba32022 100644 --- a/x86_64/src/lib.rs +++ b/x86_64/src/lib.rs @@ -6,6 +6,7 @@ extern crate arch; extern crate byteorder; extern crate data_model; extern crate devices; +extern crate io_jail; extern crate kernel_cmdline; extern crate kernel_loader; extern crate kvm; @@ -67,10 +68,11 @@ use std::mem; use std::result; use std::sync::{Arc, Mutex}; -use arch::{RunnableLinuxVm, VirtioDeviceStub, VmComponents}; +use arch::{RunnableLinuxVm, VmComponents}; use bootparam::boot_params; use bootparam::E820_RAM; -use devices::{PciConfigIo, PciInterruptPin}; +use devices::{PciConfigIo, PciDevice, PciInterruptPin}; +use io_jail::Minijail; use kvm::*; use resources::{AddressRanges, SystemAllocator}; use sys_util::{EventFd, GuestAddress, GuestMemory}; @@ -261,7 +263,7 @@ fn arch_memory_regions(size: u64) -> Vec<(GuestAddress, u64)> { impl arch::LinuxArch for X8664arch { fn build_vm<F>(mut components: VmComponents, virtio_devs: F) -> Result<RunnableLinuxVm> where - F: FnOnce(&GuestMemory, &EventFd) -> Result<Vec<VirtioDeviceStub>>, + F: FnOnce(&GuestMemory, &EventFd) -> Result<Vec<(Box<PciDevice + 'static>, Minijail)>>, { let mut resources = Self::get_resource_allocator(components.memory_mb, components.wayland_dmabuf); @@ -289,35 +291,20 @@ impl arch::LinuxArch for X8664arch { let mut mmio_bus = devices::Bus::new(); - let (pci, pci_irqs) = arch::generate_pci_root( - components.pci_devices, - &mut mmio_bus, - &mut resources, - &mut vm, - ).map_err(Error::CreatePciRoot)?; + let exit_evt = EventFd::new().map_err(Error::CreateEventFd)?; + + let pci_devices = virtio_devs(&mem, &exit_evt)?; + let (pci, pci_irqs) = + arch::generate_pci_root(pci_devices, &mut mmio_bus, &mut resources, &mut vm) + .map_err(Error::CreatePciRoot)?; let pci_bus = Arc::new(Mutex::new(PciConfigIo::new(pci))); - let exit_evt = EventFd::new().map_err(Error::CreateEventFd)?; let (io_bus, stdio_serial) = Self::setup_io_bus( &mut vm, exit_evt.try_clone().map_err(Error::CloneEventFd)?, Some(pci_bus.clone()), )?; - // Create a list of mmio devices to be added. - let mmio_devs = virtio_devs(&mem, &exit_evt)?; - - for stub in mmio_devs { - arch::register_mmio( - &mut mmio_bus, - &mut vm, - stub.dev, - stub.jail, - &mut resources, - &mut cmdline, - ).map_err(Error::RegisterVsock)?; - } - for param in components.extra_kernel_params { cmdline.insert_str(¶m).map_err(Error::Cmdline)?; } |