Merge "[rialto] Shrink the memory range to the memory range in DT"
diff --git a/docs/getting_started/index.md b/docs/getting_started/index.md
index 62529b3..0e4f2be 100644
--- a/docs/getting_started/index.md
+++ b/docs/getting_started/index.md
@@ -56,7 +56,6 @@
all can run via `atest`.
```shell
-atest VirtualizationTestCases.64
atest MicrodroidHostTestCases
atest MicrodroidTestApp
```
diff --git a/pvmfw/src/instance.rs b/pvmfw/src/instance.rs
index b96ae1e..56468b2 100644
--- a/pvmfw/src/instance.rs
+++ b/pvmfw/src/instance.rs
@@ -29,9 +29,9 @@
use diced_open_dice::Hidden;
use log::trace;
use uuid::Uuid;
-use virtio_drivers::transport::pci::bus::PciRoot;
+use virtio_drivers::transport::{pci::bus::PciRoot, DeviceType, Transport};
use vmbase::util::ceiling_div;
-use vmbase::virtio::pci::VirtIOBlkIterator;
+use vmbase::virtio::pci::{PciTransportIterator, VirtIOBlk};
use zerocopy::AsBytes;
use zerocopy::FromBytes;
@@ -60,6 +60,8 @@
RecordedDiceModeMismatch,
/// Size of the instance.img entry being read or written is not supported.
UnsupportedEntrySize(usize),
+ /// Failed to create VirtIO Block device.
+ VirtIOBlkCreationFailed(virtio_drivers::Error),
}
impl fmt::Display for Error {
@@ -89,6 +91,9 @@
Self::RecordedCodeHashMismatch => write!(f, "Recorded code hash doesn't match"),
Self::RecordedDiceModeMismatch => write!(f, "Recorded DICE mode doesn't match"),
Self::UnsupportedEntrySize(sz) => write!(f, "Invalid entry size: {sz}"),
+ Self::VirtIOBlkCreationFailed(e) => {
+ write!(f, "Failed to create VirtIO Block device: {e}")
+ }
}
}
}
@@ -178,7 +183,10 @@
}
fn find_instance_img(pci_root: &mut PciRoot) -> Result<Partition> {
- for device in VirtIOBlkIterator::new(pci_root) {
+ for transport in
+ PciTransportIterator::new(pci_root).filter(|t| DeviceType::Block == t.device_type())
+ {
+ let device = VirtIOBlk::new(transport).map_err(Error::VirtIOBlkCreationFailed)?;
match Partition::get_by_name(device, "vm-instance") {
Ok(Some(p)) => return Ok(p),
Ok(None) => {}
diff --git a/vmbase/src/virtio/pci.rs b/vmbase/src/virtio/pci.rs
index b54f7d1..cbb4d26 100644
--- a/vmbase/src/virtio/pci.rs
+++ b/vmbase/src/virtio/pci.rs
@@ -23,12 +23,9 @@
use once_cell::race::OnceBox;
use virtio_drivers::{
device::blk,
- transport::{
- pci::{
- bus::{BusDeviceIterator, PciRoot},
- virtio_device_type, PciTransport,
- },
- DeviceType, Transport,
+ transport::pci::{
+ bus::{BusDeviceIterator, PciRoot},
+ virtio_device_type, PciTransport,
},
};
@@ -81,13 +78,13 @@
/// Virtio Block device.
pub type VirtIOBlk = blk::VirtIOBlk<HalImpl, PciTransport>;
-/// Virtio Block device iterator.
-pub struct VirtIOBlkIterator<'a> {
+/// An iterator that iterates over the PCI transport for each device.
+pub struct PciTransportIterator<'a> {
pci_root: &'a mut PciRoot,
bus: BusDeviceIterator,
}
-impl<'a> VirtIOBlkIterator<'a> {
+impl<'a> PciTransportIterator<'a> {
/// Creates a new iterator.
pub fn new(pci_root: &'a mut PciRoot) -> Self {
let bus = pci_root.enumerate_bus(0);
@@ -95,8 +92,8 @@
}
}
-impl<'a> Iterator for VirtIOBlkIterator<'a> {
- type Item = VirtIOBlk;
+impl<'a> Iterator for PciTransportIterator<'a> {
+ type Item = PciTransport;
fn next(&mut self) -> Option<Self::Item> {
loop {
@@ -112,17 +109,7 @@
};
debug!(" VirtIO {:?}", virtio_type);
- let mut transport =
- PciTransport::new::<HalImpl>(self.pci_root, device_function).unwrap();
- debug!(
- "Detected virtio PCI device with device type {:?}, features {:#018x}",
- transport.device_type(),
- transport.read_device_features(),
- );
-
- if virtio_type == DeviceType::Block {
- return Some(Self::Item::new(transport).expect("failed to create blk driver"));
- }
+ return PciTransport::new::<HalImpl>(self.pci_root, device_function).ok();
}
}
}