On Wed, 2020-10-07 at 14:20 +0100, Steven Newbury wrote: > On Wed, 2020-10-07 at 15:07 +0200, Peter Krempa wrote: > > On Wed, Oct 07, 2020 at 13:59:35 +0100, Steven Newbury wrote: > > > > > > 7 files changed, 26 insertions(+) > > > > > > diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c > > > index 87bf32bbc6..02d226747e 100644 > > > --- a/src/conf/device_conf.c > > > +++ b/src/conf/device_conf.c > > > @@ -215,6 +215,7 @@ virPCIDeviceAddressParseXML(xmlNodePtr node, > > > g_autofree char *slot = virXMLPropString(node, "slot"); > > > g_autofree char *function = virXMLPropString(node, > > > "function"); > > > g_autofree char *multi = virXMLPropString(node, > > > "multifunction"); > > > + g_autofree char *vga = virXMLPropString(node, "vga"); > > > > > > memset(addr, 0, sizeof(*addr)); > > > > > > @@ -253,6 +254,14 @@ virPCIDeviceAddressParseXML(xmlNodePtr node, > > > multi); > > > return -1; > > > > > > + } > > > + if (vga && > > > + ((addr->vga = virTristateSwitchTypeFromString(vga)) <= > > > 0)) > > > { > > > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > > > + _("Unknown value '%s' for <address> 'vga' > > > attribute"), > > > + vga); > > > + return -1; > > > + > > > } > > > if (!virPCIDeviceAddressIsEmpty(addr) && > > > !virPCIDeviceAddressIsValid(addr, true)) > > > return -1; > > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > > > index c003b5c030..048b0f4028 100644 > > > --- a/src/conf/domain_conf.c > > > +++ b/src/conf/domain_conf.c > > > @@ -7587,6 +7587,10 @@ virDomainDeviceInfoFormat(virBufferPtr > > > buf, > > > virBufferAsprintf(&attrBuf, " multifunction='%s'", > > > virTristateSwitchTypeToString(info > > > - > > > > addr.pci.multi)); > > > } > > > + if (info->addr.pci.vga) { > > > + virBufferAsprintf(&attrBuf, " vga='%s'", > > > + virTristateSwitchTypeToString(info > > > - > > > > addr.pci.vga)); > > > + } > > > > > > if (virZPCIDeviceAddressIsPresent(&info->addr.pci.zpci)) > > > { > > > virBufferAsprintf(&childBuf, > > > > We also need validation that this isn't used with devices where it > > doesn't make sense ... such as disk, or network card. As I see it there are two distinct validation requirements: 1) It should only apply to hostdev PCI vfio devices 2) It is only relevant to PCI Class 3 (Display Controller), but libvirt doesn't know about the PCI device class, does it? 1 is the most important probably. Should it just be hard error if it's defined for each devices type except for hostdev in domain_conf.c or check for device type hostdev before setting the parameter and ignore it otherwise?