Revert "linux: Convert all virtio devices to PCI"

This reverts commit d635acbaf348c0863bc05b8f889b2fa5f8156aaa.

This commit seems to be responsible for introducing hung tasks in tests,
so let's revert it for now to get the tests green and debug it offline.

BUG=chromium:891806
TEST=None

Change-Id: I83504058baeae00909d9fb4f4bb704a144a0dfaf
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1259408
Reviewed-by: Dylan Reid <dgreid@chromium.org>
diff --git a/aarch64/src/lib.rs b/aarch64/src/lib.rs
index cab05d5..8d71d44 100644
--- a/aarch64/src/lib.rs
+++ b/aarch64/src/lib.rs
@@ -6,7 +6,6 @@
 extern crate byteorder;
 extern crate data_model;
 extern crate devices;
-extern crate io_jail;
 extern crate kernel_cmdline;
 extern crate kvm;
 extern crate kvm_sys;
@@ -23,9 +22,8 @@
 use std::os::unix::io::FromRawFd;
 use std::os::unix::net::UnixDatagram;
 
-use arch::{RunnableLinuxVm, VmComponents};
-use devices::{Bus, BusError, PciConfigMmio, PciDevice, PciInterruptPin};
-use io_jail::Minijail;
+use arch::{RunnableLinuxVm, VirtioDeviceStub, VmComponents};
+use devices::{Bus, BusError, PciConfigMmio, PciInterruptPin};
 use sys_util::{EventFd, GuestAddress, GuestMemory};
 use resources::{AddressRanges, SystemAllocator};
 
@@ -195,7 +193,7 @@
 impl arch::LinuxArch for AArch64 {
     fn build_vm<F>(mut components: VmComponents, virtio_devs: F) -> Result<RunnableLinuxVm>
         where
-            F: FnOnce(&GuestMemory, &EventFd) -> Result<Vec<(Box<PciDevice + 'static>, Minijail)>>
+            F: FnOnce(&GuestMemory, &EventFd) -> Result<Vec<VirtioDeviceStub>>
     {
         let mut resources = Self::get_resource_allocator(components.memory_mb,
                                                          components.wayland_dmabuf);
@@ -218,20 +216,27 @@
 
         let mut mmio_bus = devices::Bus::new();
 
-        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,
+        let (pci, pci_irqs) = arch::generate_pci_root(components.pci_devices,
                                                       &mut mmio_bus,
                                                       &mut resources,
                                                       &mut vm)
             .map_err(Error::CreatePciRoot)?;
         let pci_bus = Arc::new(Mutex::new(PciConfigMmio::new(pci)));
 
+        let exit_evt = EventFd::new().map_err(Error::CreateEventFd)?;
         let (io_bus, stdio_serial) = Self::setup_io_bus()?;
 
+        // Create a list of mmio devices to be added.
+        let mmio_devs = virtio_devs(&mem, &exit_evt)?;
+
         Self::add_arch_devs(&mut vm, &mut mmio_bus)?;
 
+        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)?;
+        }
+
         mmio_bus.insert(pci_bus.clone(), AARCH64_PCI_CFG_BASE, AARCH64_PCI_CFG_SIZE, false)
             .map_err(Error::RegisterPci)?;