From 5f9dd9d8666773ef9e351eedeca498f19e563da4 Mon Sep 17 00:00:00 2001 From: Shalini Chellathurai Saroja Date: Thu, 18 Jun 2020 10:25:16 +0200 Subject: [PATCH] qemu: move ZPCI uid validation into device validation The ZPCI device validation is specific to qemu. So, let us move the ZPCI uid validation out of domain xml parsing into qemu domain device validation. Signed-off-by: Shalini Chellathurai Saroja Reviewed-by: Bjoern Walk Reviewed-by: Boris Fiuczynski Reviewed-by: Andrea Bolognani --- src/conf/device_conf.c | 3 --- src/libvirt_private.syms | 1 - src/qemu/qemu_validate.c | 18 +++++++++++++++++- src/util/virpci.c | 20 -------------------- src/util/virpci.h | 1 - 5 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c index 64a713a5f9..7d48a3fb94 100644 --- a/src/conf/device_conf.c +++ b/src/conf/device_conf.c @@ -77,9 +77,6 @@ virZPCIDeviceAddressParseXML(xmlNodePtr node, def.fid.isSet = true; } - if (!virZPCIDeviceAddressIsValid(&def)) - return -1; - addr->zpci = def; return 0; diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 83e38dfc9a..ae0e253ab9 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2841,7 +2841,6 @@ virPCIStubDriverTypeFromString; virPCIStubDriverTypeToString; virZPCIDeviceAddressIsIncomplete; virZPCIDeviceAddressIsPresent; -virZPCIDeviceAddressIsValid; # util/virperf.h diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 07826fb7ab..78efa68584 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -1018,7 +1018,9 @@ static int qemuValidateDomainDeviceDefZPCIAddress(virDomainDeviceInfoPtr info, virQEMUCapsPtr qemuCaps) { - if (virZPCIDeviceAddressIsPresent(&info->addr.pci.zpci) && + virZPCIDeviceAddressPtr zpci = &info->addr.pci.zpci; + + if (virZPCIDeviceAddressIsPresent(zpci) && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ZPCI)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -1026,6 +1028,20 @@ qemuValidateDomainDeviceDefZPCIAddress(virDomainDeviceInfoPtr info, return -1; } + /* We don't need to check fid because fid covers + * all range of uint32 type. + */ + if (zpci->uid.isSet && + (zpci->uid.value > VIR_DOMAIN_DEVICE_ZPCI_MAX_UID || + zpci->uid.value == 0)) { + virReportError(VIR_ERR_XML_ERROR, + _("Invalid PCI address uid='0x%.4x', " + "must be > 0x0000 and <= 0x%.4x"), + zpci->uid.value, + VIR_DOMAIN_DEVICE_ZPCI_MAX_UID); + return -1; + } + return 0; } diff --git a/src/util/virpci.c b/src/util/virpci.c index 4843195a67..47c671daa0 100644 --- a/src/util/virpci.c +++ b/src/util/virpci.c @@ -2167,26 +2167,6 @@ virPCIDeviceAddressParse(char *address, } -bool -virZPCIDeviceAddressIsValid(virZPCIDeviceAddressPtr zpci) -{ - /* We don't need to check fid because fid covers - * all range of uint32 type. - */ - if (zpci->uid.isSet && - (zpci->uid.value > VIR_DOMAIN_DEVICE_ZPCI_MAX_UID || - zpci->uid.value == 0)) { - virReportError(VIR_ERR_XML_ERROR, - _("Invalid PCI address uid='0x%.4x', " - "must be > 0x0000 and <= 0x%.4x"), - zpci->uid.value, - VIR_DOMAIN_DEVICE_ZPCI_MAX_UID); - return false; - } - - return true; -} - bool virZPCIDeviceAddressIsIncomplete(const virZPCIDeviceAddress *addr) { diff --git a/src/util/virpci.h b/src/util/virpci.h index f198df5d7c..b3322ba61b 100644 --- a/src/util/virpci.h +++ b/src/util/virpci.h @@ -254,7 +254,6 @@ int virPCIDeviceAddressParse(char *address, virPCIDeviceAddressPtr bdf); bool virZPCIDeviceAddressIsIncomplete(const virZPCIDeviceAddress *addr); bool virZPCIDeviceAddressIsPresent(const virZPCIDeviceAddress *addr); -bool virZPCIDeviceAddressIsValid(virZPCIDeviceAddressPtr zpci); int virPCIGetVirtualFunctionInfo(const char *vf_sysfs_device_path, int pfNetDevIdx, -- GitLab