diff --git a/src/linux/mod.rs b/src/linux/mod.rs index a243ed649f..554c2f11e6 100644 --- a/src/linux/mod.rs +++ b/src/linux/mod.rs @@ -1310,6 +1310,22 @@ where irqs.push(direct_irq); } + // Reserve direct mmio range in advance. + #[cfg(feature = "direct")] + if let Some(mmio) = &cfg.direct_mmio { + for range in mmio.ranges.iter() { + sys_allocator + .reserve_mmio(range.base, range.len) + .with_context(|| { + format!( + "failed to reserved direct mmio: {:x}-{:x}", + range.base, + range.base + range.len - 1, + ) + })?; + } + }; + let mut iommu_attached_endpoints: BTreeMap>>> = BTreeMap::new(); let mut iova_max_addr: Option = None;