From 174fc8f44b93f25402b06b7eaba66f994ade7b39 Mon Sep 17 00:00:00 2001 From: Pavel Mores Date: Wed, 24 Apr 2024 17:57:43 +0200 Subject: [PATCH] runtime-rs: support iommu_platform for qemu virtio-net device Note that it's only supported on CCW systems. Signed-off-by: Pavel Mores --- .../crates/hypervisor/src/qemu/cmdline_generator.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/runtime-rs/crates/hypervisor/src/qemu/cmdline_generator.rs b/src/runtime-rs/crates/hypervisor/src/qemu/cmdline_generator.rs index 3ab04e106..720f13829 100644 --- a/src/runtime-rs/crates/hypervisor/src/qemu/cmdline_generator.rs +++ b/src/runtime-rs/crates/hypervisor/src/qemu/cmdline_generator.rs @@ -997,6 +997,7 @@ pub struct DeviceVirtioNet { disable_modern: bool, num_queues: u32, + iommu_platform: bool, } impl DeviceVirtioNet { @@ -1007,6 +1008,7 @@ impl DeviceVirtioNet { mac_address, disable_modern: false, num_queues: 1, + iommu_platform: false, } } @@ -1019,6 +1021,11 @@ impl DeviceVirtioNet { self.num_queues = num_queues; self } + + fn set_iommu_platform(&mut self, iommu_platform: bool) -> &mut Self { + self.iommu_platform = iommu_platform; + self + } } #[async_trait] @@ -1035,6 +1042,9 @@ impl ToQemuParams for DeviceVirtioNet { if self.disable_modern { params.push("disable-modern=true".to_owned()); } + if self.iommu_platform { + params.push("iommu_platform=on".to_owned()); + } params.push("mq=on".to_owned()); params.push(format!("vectors={}", 2 * self.num_queues + 2)); @@ -1378,6 +1388,9 @@ impl<'a> QemuCmdLine<'a> { if should_disable_modern() { virtio_net_device.set_disable_modern(true); } + if self.config.device_info.enable_iommu_platform && self.bus_type() == VirtioBusType::Ccw { + virtio_net_device.set_iommu_platform(true); + } if self.config.network_info.network_queues > 1 { virtio_net_device.set_num_queues(self.config.network_info.network_queues); }