From c66c2b847053bcc22f1c367d59914536b69903c8 Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Fri, 3 Apr 2026 17:15:54 +0100 Subject: [PATCH] vmm: config: Implement PciDeviceCommonConfig::parse This parses a subset of the device configuration options used for devices that are PCI based. Signed-off-by: Rob Bradford --- vmm/src/config.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/vmm/src/config.rs b/vmm/src/config.rs index b2ae29a84..2cf80191d 100644 --- a/vmm/src/config.rs +++ b/vmm/src/config.rs @@ -209,6 +209,8 @@ pub enum Error { /// Failed Parsing FwCfgItem config #[error("Error parsing --fw-cfg-config items")] ParseFwCfgItem(#[source] OptionParserError), + #[error("Error parsing common PCI device config")] + ParsePciDeviceCommonConfig(#[source] OptionParserError), } #[derive(Debug, PartialEq, Eq, Error)] @@ -1197,6 +1199,35 @@ impl RateLimiterGroupConfig { } } +impl PciDeviceCommonConfig { + pub fn parse(input: &str) -> Result { + let mut parser = OptionParser::new(); + + parser.add("id").add("iommu").add("pci_segment"); + + parser + .parse_subset(input) + .map_err(Error::ParsePciDeviceCommonConfig)?; + + let id = parser.get("id"); + let iommu = parser + .convert::("iommu") + .map_err(Error::ParsePciDeviceCommonConfig)? + .unwrap_or(Toggle(false)) + .0; + let pci_segment = parser + .convert("pci_segment") + .map_err(Error::ParsePciDeviceCommonConfig)? + .unwrap_or_default(); + + Ok(Self { + id, + iommu, + pci_segment, + }) + } +} + impl DiskConfig { pub const SYNTAX: &'static str = "Disk parameters \ \"path=,readonly=on|off,direct=on|off,iommu=on|off,\