[libvirt] [PATCH v4 00/12] PCI passthrough support on s390
Abstract ======== The PCI representation in QEMU has recently been extended for S390 allowing configuration of zPCI attributes like uid (user-defined identifier) and fid (PCI function identifier). The details can be found here: https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg07262.html To support the new zPCI feature of the S390 platform, two new XML attributes, @uid and @fid, are introduced for device addresses of type 'pci', i.e.: <hostdev mode='subsystem' type='pci'> <driver name='vfio'/> <source> <address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/> </source> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' uid='0x0003' fid='0x00000027'/> </hostdev> uid and fid are optional attributes. If they are defined by the user, unique values within the guest domain must be used. If they are not specified and the architecture requires them, they are automatically generated with non-conflicting values. Current implementation is the most seamless one for the user as it unites the address specific data of a PCI device on one XML element. It could accommodate both specifying our special parameters (uid and fid) and re-using standard statements (domain, bus, slot and function) for PCI devices. User can still specify bus/slot/function for the virtualized PCI devices in the XML. Thus uid/fid act as an extension to the PCI address and are stored in a new structure 'virZPCIDeviceAddress' which is a member of common PCI Address structure. Additionally, two hashtables are used for assignment and reservation of uid/fid. In support of extending the PCI address, a new PCI address extension flag is introduced. This extension flag allows is not only dedicated for the S390 platform but also other architectures needing certain extensions to PCI address space. Code Base ========= commit in master: 3b89e1f962 docs: api_extension: Don't encourage other tools than git Change Log ========== v3->v4: 1. Update docs. 2. Format code style. 3. Optimize zPCI support check. 4. Move the check of zPCI defined in xml but unsupported by Qemu to qemuDomainDeviceDefValidate(). 5. Change zpci address member of PCI address struct from pointer to instance. 6. Modify zpci address definition principle. Currently the user must either define both of uid and fid or not. v2->v3: 1. Revise code style. 2. Update test cases. 3. Introduce qemuDomainCollectPCIAddressExtension() to collect PCI extension addresses. 4. Introduce virDeviceInfoPCIAddressExtensionPresent() to check if zPCI address exists. 5. Optimize zPCI address check logic. 6. Optimize passed parameters of zPCI addr alloc/release/reserve functions. 7. Report enum range error in qemuDomainDeviceSupportZPCI(). 8. Update commit messages. v1->v2: 1. Separate test commit and merge testcases into corresponding commits that introduce the functionalities firstly. 2. Spare some checks for zpci device. 3. Add vsock and controller support. 4. Add uin32 type schema. 5. Rename zpciuid and zpcifid to zpci_uid and zpci_fid. 6. Always return multibus support on S390. Yi Min Zhao (12): conf: Add definitions for 'uid' and 'fid' PCI address attributes qemu: Introduce zPCI capability conf: Introduce a new PCI address extension flag qemu: Enable PCI multi bus for S390 guests qemu: Auto add pci-root for s390/s390x guests conf: Introduce address caching for PCI extensions conf: Introduce parser, formatter for uid and fid conf: Allocate/release 'uid' and 'fid' in PCI address qemu: Generate and use zPCI device in QEMU command line qemu: Add hotpluging support for PCI devices on S390 guests docs: Add 'uid' and 'fid' information news: Update news for PCI address extension attributes cfg.mk | 1 + docs/formatdomain.html.in | 9 +- docs/news.xml | 10 + docs/schemas/basictypes.rng | 23 ++ docs/schemas/domaincommon.rng | 1 + src/conf/device_conf.c | 62 ++++ src/conf/device_conf.h | 14 + src/conf/domain_addr.c | 331 +++++++++++++++++++++ src/conf/domain_addr.h | 29 ++ src/conf/domain_conf.c | 6 + src/libvirt_private.syms | 4 + src/qemu/qemu_capabilities.c | 6 + src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 95 ++++++ src/qemu/qemu_command.h | 2 + src/qemu/qemu_domain.c | 27 ++ src/qemu/qemu_domain_address.c | 205 ++++++++++++- src/qemu/qemu_hotplug.c | 151 +++++++++- src/util/virpci.h | 11 + tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml | 1 + tests/qemuxml2argvdata/disk-virtio-s390-zpci.args | 26 ++ tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml | 17 ++ .../hostdev-vfio-zpci-autogenerate.args | 25 ++ .../hostdev-vfio-zpci-autogenerate.xml | 18 ++ .../hostdev-vfio-zpci-boundaries.args | 29 ++ .../hostdev-vfio-zpci-boundaries.xml | 26 ++ .../hostdev-vfio-zpci-multidomain-many.args | 39 +++ .../hostdev-vfio-zpci-multidomain-many.xml | 67 +++++ tests/qemuxml2argvdata/hostdev-vfio-zpci.args | 25 ++ tests/qemuxml2argvdata/hostdev-vfio-zpci.xml | 19 ++ tests/qemuxml2argvtest.c | 20 ++ tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml | 29 ++ .../hostdev-vfio-zpci-autogenerate.xml | 30 ++ .../hostdev-vfio-zpci-boundaries.xml | 42 +++ .../hostdev-vfio-zpci-multidomain-many.xml | 79 +++++ tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml | 30 ++ tests/qemuxml2xmltest.c | 17 ++ 42 files changed, 1518 insertions(+), 14 deletions(-) create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.args create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.xml create mode 100644 tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-multidomain-many.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml -- Yi Min
Add zPCI definitions in preparation of extending the PCI address with parameters uid (user-defined identifier) and fid (PCI function identifier). Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- cfg.mk | 1 + src/util/virpci.h | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/cfg.mk b/cfg.mk index 609ae869c2..1116feb299 100644 --- a/cfg.mk +++ b/cfg.mk @@ -472,6 +472,7 @@ sc_prohibit_canonicalize_file_name: # Insist on correct types for [pug]id. sc_correct_id_types: @prohibit='\<(int|long) *[pug]id\>' \ + exclude='exempt from syntax-check' \ halt='use pid_t for pid, uid_t for uid, gid_t for gid' \ $(_sc_search_regexp) diff --git a/src/util/virpci.h b/src/util/virpci.h index 2ac87694df..b7bcfa6d9f 100644 --- a/src/util/virpci.h +++ b/src/util/virpci.h @@ -37,12 +37,20 @@ typedef virPCIDeviceAddress *virPCIDeviceAddressPtr; typedef struct _virPCIDeviceList virPCIDeviceList; typedef virPCIDeviceList *virPCIDeviceListPtr; +typedef struct _virZPCIDeviceAddress virZPCIDeviceAddress; +typedef virZPCIDeviceAddress *virZPCIDeviceAddressPtr; +struct _virZPCIDeviceAddress { + unsigned int uid; /* exempt from syntax-check */ + unsigned int fid; +}; + struct _virPCIDeviceAddress { unsigned int domain; unsigned int bus; unsigned int slot; unsigned int function; int multi; /* virTristateSwitch */ + virZPCIDeviceAddress zpci; }; typedef enum { -- Yi Min
Let's introduce zPCI capability. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_capabilities.c | 2 ++ src/qemu/qemu_capabilities.h | 1 + tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml | 1 + 8 files changed, 9 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c258053834..406a62e3bf 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -508,6 +508,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, /* 315 */ "vfio-pci.display", "blockdev", + "zpci", ); @@ -1147,6 +1148,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "vhost-vsock-device", QEMU_CAPS_DEVICE_VHOST_VSOCK }, { "mch", QEMU_CAPS_DEVICE_MCH }, { "sev-guest", QEMU_CAPS_SEV_GUEST }, + { "zpci", QEMU_CAPS_DEVICE_ZPCI }, }; static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index fdfbde48fe..87e1f5aa7e 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -492,6 +492,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ /* 315 */ QEMU_CAPS_VFIO_PCI_DISPLAY, /* -device vfio-pci.display */ QEMU_CAPS_BLOCKDEV, /* -blockdev and blockdev-add are supported */ + QEMU_CAPS_DEVICE_ZPCI, /* -device zpci */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml index aa61a331b8..9bf1a1a625 100644 --- a/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml @@ -118,6 +118,7 @@ <flag name='blockdev-del'/> <flag name='vhost-vsock'/> <flag name='egl-headless'/> + <flag name='zpci'/> <version>2010000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>307493</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml index 2bb4a767e4..2ba3eeced0 100644 --- a/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml @@ -125,6 +125,7 @@ <flag name='vhost-vsock'/> <flag name='tpm-emulator'/> <flag name='egl-headless'/> + <flag name='zpci'/> <version>2011000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>346345</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml index d1d9353f35..ccb41fa486 100644 --- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml @@ -133,6 +133,7 @@ <flag name='tpm-emulator'/> <flag name='egl-headless'/> <flag name='vfio-pci.display'/> + <flag name='zpci'/> <version>2012000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>375593</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml index 945afab5c4..d08b30cfd7 100644 --- a/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml @@ -105,6 +105,7 @@ <flag name='nbd-tls'/> <flag name='virtual-css-bridge'/> <flag name='sdl-gl'/> + <flag name='zpci'/> <version>2007000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>220386</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml index 00549630c1..5dc736ccc4 100644 --- a/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml @@ -108,6 +108,7 @@ <flag name='virtual-css-bridge'/> <flag name='sdl-gl'/> <flag name='vhost-vsock'/> + <flag name='zpci'/> <version>2007093</version> <kvmVersion>0</kvmVersion> <microcodeVersion>245800</microcodeVersion> diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml index 789279e24d..cb4ce1229d 100644 --- a/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml @@ -112,6 +112,7 @@ <flag name='sdl-gl'/> <flag name='blockdev-del'/> <flag name='vhost-vsock'/> + <flag name='zpci'/> <version>2009000</version> <kvmVersion>0</kvmVersion> <microcodeVersion>269219</microcodeVersion> -- Yi Min
This patch introduces a new attribute PCI address extension flag to deal with the extension PCI attributes such as 'uid' and 'fid' on the S390 platform. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> --- src/conf/device_conf.h | 1 + src/conf/domain_addr.h | 5 ++ src/qemu/qemu_domain_address.c | 142 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 146 insertions(+), 2 deletions(-) diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index a31ce9c376..6f926dff1d 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -164,6 +164,7 @@ struct _virDomainDeviceInfo { * assignment, never saved and never reported. */ int pciConnectFlags; /* enum virDomainPCIConnectFlags */ + int pciAddressExtFlags; /* enum virDomainPCIAddressExtensionFlags */ char *loadparm; /* PCI devices will only be automatically placed on a PCI bus diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h index 5ad9d8ef3d..5219d2f208 100644 --- a/src/conf/domain_addr.h +++ b/src/conf/domain_addr.h @@ -29,6 +29,11 @@ # define VIR_PCI_ADDRESS_SLOT_LAST 31 # define VIR_PCI_ADDRESS_FUNCTION_LAST 7 +typedef enum { + VIR_PCI_ADDRESS_EXTENSION_NONE = 0, /* no extension */ + VIR_PCI_ADDRESS_EXTENSION_ZPCI = 1 << 0, /* zpci support */ +} virDomainPCIAddressExtensionFlags; + typedef enum { VIR_PCI_CONNECT_HOTPLUGGABLE = 1 << 0, /* is hotplug needed/supported */ diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 29a1def24c..e4642ffaf9 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -509,6 +509,64 @@ qemuDomainAssignVirtioMMIOAddresses(virDomainDefPtr def, } +static bool +qemuDomainDeviceSupportZPCI(virDomainDeviceDefPtr device) +{ + switch ((virDomainDeviceType) device->type) { + case VIR_DOMAIN_DEVICE_CHR: + return false; + + case VIR_DOMAIN_DEVICE_CONTROLLER: + case VIR_DOMAIN_DEVICE_DISK: + case VIR_DOMAIN_DEVICE_LEASE: + case VIR_DOMAIN_DEVICE_FS: + case VIR_DOMAIN_DEVICE_NET: + case VIR_DOMAIN_DEVICE_INPUT: + case VIR_DOMAIN_DEVICE_SOUND: + case VIR_DOMAIN_DEVICE_VIDEO: + case VIR_DOMAIN_DEVICE_HOSTDEV: + case VIR_DOMAIN_DEVICE_WATCHDOG: + case VIR_DOMAIN_DEVICE_GRAPHICS: + case VIR_DOMAIN_DEVICE_HUB: + case VIR_DOMAIN_DEVICE_REDIRDEV: + case VIR_DOMAIN_DEVICE_SMARTCARD: + case VIR_DOMAIN_DEVICE_MEMBALLOON: + case VIR_DOMAIN_DEVICE_NVRAM: + case VIR_DOMAIN_DEVICE_RNG: + case VIR_DOMAIN_DEVICE_SHMEM: + case VIR_DOMAIN_DEVICE_TPM: + case VIR_DOMAIN_DEVICE_PANIC: + case VIR_DOMAIN_DEVICE_MEMORY: + case VIR_DOMAIN_DEVICE_IOMMU: + case VIR_DOMAIN_DEVICE_VSOCK: + break; + + case VIR_DOMAIN_DEVICE_NONE: + case VIR_DOMAIN_DEVICE_LAST: + default: + virReportEnumRangeError(virDomainDeviceType, device->type); + return false; + } + + return true; +} + + +static virDomainPCIAddressExtensionFlags +qemuDomainDeviceCalculatePCIAddressExtensionFlags(virQEMUCapsPtr qemuCaps, + virDomainDeviceDefPtr dev) +{ + virDomainPCIAddressExtensionFlags extFlags = 0; + + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ZPCI) && + qemuDomainDeviceSupportZPCI(dev)) { + extFlags |= VIR_PCI_ADDRESS_EXTENSION_ZPCI; + } + + return extFlags; +} + + /** * qemuDomainDeviceCalculatePCIConnectFlags: * @@ -991,6 +1049,56 @@ qemuDomainFillAllPCIConnectFlags(virDomainDefPtr def, } +/** + * qemuDomainFillDevicePCIExtensionFlagsIter: + * + * @def: the entire DomainDef + * @dev: The device to be checked + * @info: virDomainDeviceInfo within the device + * @opaque: qemu capabilities + * + * Sets the pciAddressExtFlags for a single device's info. Has properly + * formatted arguments to be called by virDomainDeviceInfoIterate(). + * + * Always returns 0 - there is no failure. + */ +static int +qemuDomainFillDevicePCIExtensionFlagsIter(virDomainDefPtr def ATTRIBUTE_UNUSED, + virDomainDeviceDefPtr dev, + virDomainDeviceInfoPtr info, + void *opaque) +{ + virQEMUCapsPtr qemuCaps = opaque; + + info->pciAddressExtFlags + = qemuDomainDeviceCalculatePCIAddressExtensionFlags(qemuCaps, dev); + + return 0; +} + + +/** + * qemuDomainFillAllPCIExtensionFlags: + * + * @def: the entire DomainDef + * @qemuCaps: as you'd expect + * + * Set the info->pciAddressExtFlags for all devices in the domain. + * + * Returns 0 on success or -1 on failure (the only possibility of + * failure would be some internal problem with + * virDomainDeviceInfoIterate()) + */ +static int +qemuDomainFillAllPCIExtensionFlags(virDomainDefPtr def, + virQEMUCapsPtr qemuCaps) +{ + return virDomainDeviceInfoIterate(def, + qemuDomainFillDevicePCIExtensionFlagsIter, + qemuCaps); +} + + /** * qemuDomainFindUnusedIsolationGroupIter: * @def: domain definition @@ -1265,6 +1373,29 @@ qemuDomainFillDevicePCIConnectFlags(virDomainDefPtr def, } +/** + * qemuDomainFillDevicePCIExtensionFlags: + * + * @dev: The device to be checked + * @qemuCaps: as you'd expect + * + * Set the info->pciAddressExtFlags for a single device. + * + * No return value. + */ +static void +qemuDomainFillDevicePCIExtensionFlags(virDomainDeviceDefPtr dev, + virQEMUCapsPtr qemuCaps) +{ + virDomainDeviceInfoPtr info = virDomainDeviceGetInfo(dev); + + if (info) { + info->pciAddressExtFlags + = qemuDomainDeviceCalculatePCIAddressExtensionFlags(qemuCaps, dev); + } +} + + static int qemuDomainPCIAddressReserveNextAddr(virDomainPCIAddressSetPtr addrs, virDomainDeviceInfoPtr dev) @@ -2400,6 +2531,9 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, if (qemuDomainFillAllPCIConnectFlags(def, qemuCaps, driver) < 0) goto cleanup; + if (qemuDomainFillAllPCIExtensionFlags(def, qemuCaps) < 0) + goto cleanup; + if (qemuDomainSetupIsolationGroups(def) < 0) goto cleanup; @@ -2435,7 +2569,8 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, */ virDomainDeviceInfo info = { .pciConnectFlags = (VIR_PCI_CONNECT_HOTPLUGGABLE | - VIR_PCI_CONNECT_TYPE_PCI_DEVICE) + VIR_PCI_CONNECT_TYPE_PCI_DEVICE), + .pciAddressExtFlags = VIR_PCI_ADDRESS_EXTENSION_NONE }; bool buses_reserved = true; @@ -2472,7 +2607,8 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, qemuDomainHasPCIeRoot(def)) { virDomainDeviceInfo info = { .pciConnectFlags = (VIR_PCI_CONNECT_HOTPLUGGABLE | - VIR_PCI_CONNECT_TYPE_PCIE_DEVICE) + VIR_PCI_CONNECT_TYPE_PCIE_DEVICE), + .pciAddressExtFlags = VIR_PCI_ADDRESS_EXTENSION_NONE }; /* if there isn't an empty pcie-root-port, this will @@ -2989,6 +3125,8 @@ qemuDomainEnsurePCIAddress(virDomainObjPtr obj, qemuDomainFillDevicePCIConnectFlags(obj->def, dev, priv->qemuCaps, driver); + qemuDomainFillDevicePCIExtensionFlags(dev, priv->qemuCaps); + return virDomainPCIAddressEnsureAddr(priv->pciaddrs, info, info->pciConnectFlags); } -- Yi Min
QEMU on s390 supports PCI multibus since forever. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_capabilities.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 406a62e3bf..6df2321e28 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1790,6 +1790,10 @@ bool virQEMUCapsHasPCIMultiBus(virQEMUCapsPtr qemuCaps, return false; } + /* S390 supports PCI-multibus. */ + if (ARCH_IS_S390(def->os.arch)) + return true; + /* If ARM 'virt' supports PCI, it supports multibus. * No extra conditions here for simplicity. */ -- Yi Min
The pci-root depends on zpci capability. So autogenerate pci-root if zpci exists. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> --- src/qemu/qemu_domain.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 886e3fbb72..a6e143dc33 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -3284,6 +3284,7 @@ qemuDomainDefAddDefaultDevices(virDomainDefPtr def, case VIR_ARCH_S390X: addDefaultUSB = false; addPanicDevice = true; + addPCIRoot = virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ZPCI); break; case VIR_ARCH_SPARC: -- Yi Min
This patch provides a caching mechanism for the device address extensions uid and fid on S390. For efficient sparse address allocation, we introduce two hash tables for uid/fid which hold the address set information per domain. Also in order to improve performance of searching available value, we introduce our own callbacks for the two hashtables. In this way, uid/fid is saved in hash key and hash value could be any non-NULL pointer due to no operation on hash value. That is also the reason why we don't introduce hash value free callback. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_addr.c | 85 ++++++++++++++++++++++++++++++++++++++++++ src/conf/domain_addr.h | 9 +++++ src/libvirt_private.syms | 1 + src/qemu/qemu_domain_address.c | 7 ++++ 4 files changed, 102 insertions(+) diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index 16f7ffa928..8d3e75f19a 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -27,11 +27,23 @@ #include "virlog.h" #include "virstring.h" #include "domain_addr.h" +#include "virhashcode.h" #define VIR_FROM_THIS VIR_FROM_DOMAIN VIR_LOG_INIT("conf.domain_addr"); +static void +virDomainPCIAddressSetExtensionFree(virDomainPCIAddressSetPtr addrs) +{ + if (!addrs || !addrs->zpciIds) + return; + + virHashFree(addrs->zpciIds->uids); + virHashFree(addrs->zpciIds->fids); + VIR_FREE(addrs->zpciIds); +} + virDomainPCIConnectFlags virDomainPCIControllerModelToConnectType(virDomainControllerModelPCI model) { @@ -741,6 +753,78 @@ virDomainPCIAddressReleaseAddr(virDomainPCIAddressSetPtr addrs, addrs->buses[addr->bus].slot[addr->slot].functions &= ~(1 << addr->function); } + +static uint32_t +virZPCIAddrCode(const void *name, + uint32_t seed) +{ + unsigned int value = *((unsigned int *)name); + return virHashCodeGen(&value, sizeof(value), seed); +} + + +static bool +virZPCIAddrEqual(const void *namea, + const void *nameb) +{ + return *((unsigned int *)namea) == *((unsigned int *)nameb); +} + + +static void * +virZPCIAddrCopy(const void *name) +{ + unsigned int *copy; + + if (VIR_ALLOC(copy) < 0) + return NULL; + + *copy = *((unsigned int *)name); + return (void *)copy; +} + + +static void +virZPCIAddrKeyFree(void *name) +{ + VIR_FREE(name); +} + + +int +virDomainPCIAddressSetExtensionAlloc(virDomainPCIAddressSetPtr addrs, + virDomainPCIAddressExtensionFlags extFlags) +{ + if (extFlags & VIR_PCI_ADDRESS_EXTENSION_ZPCI) { + if (addrs->zpciIds) + return 0; + + if (VIR_ALLOC(addrs->zpciIds) < 0) + return -1; + + if (!(addrs->zpciIds->uids = virHashCreateFull(10, NULL, + virZPCIAddrCode, + virZPCIAddrEqual, + virZPCIAddrCopy, + virZPCIAddrKeyFree))) + goto error; + + if (!(addrs->zpciIds->fids = virHashCreateFull(10, NULL, + virZPCIAddrCode, + virZPCIAddrEqual, + virZPCIAddrCopy, + virZPCIAddrKeyFree))) + goto error; + } + + return 0; + + error: + virDomainPCIAddressSetExtensionFree(addrs); + return -1; +} + + virDomainPCIAddressSetPtr virDomainPCIAddressSetAlloc(unsigned int nbuses) { @@ -767,6 +851,7 @@ virDomainPCIAddressSetFree(virDomainPCIAddressSetPtr addrs) if (!addrs) return; + virDomainPCIAddressSetExtensionFree(addrs); VIR_FREE(addrs->buses); VIR_FREE(addrs); } diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h index 5219d2f208..d1ec869da4 100644 --- a/src/conf/domain_addr.h +++ b/src/conf/domain_addr.h @@ -116,6 +116,11 @@ typedef struct { } virDomainPCIAddressBus; typedef virDomainPCIAddressBus *virDomainPCIAddressBusPtr; +typedef struct { + virHashTablePtr uids, fids; +} virDomainZPCIAddressIds; +typedef virDomainZPCIAddressIds *virDomainZPCIAddressIdsPtr; + struct _virDomainPCIAddressSet { virDomainPCIAddressBus *buses; size_t nbuses; @@ -125,6 +130,7 @@ struct _virDomainPCIAddressSet { bool areMultipleRootsSupported; /* If true, the guest can use the pcie-to-pci-bridge controller */ bool isPCIeToPCIBridgeSupported; + virDomainZPCIAddressIdsPtr zpciIds; }; typedef struct _virDomainPCIAddressSet virDomainPCIAddressSet; typedef virDomainPCIAddressSet *virDomainPCIAddressSetPtr; @@ -132,6 +138,9 @@ typedef virDomainPCIAddressSet *virDomainPCIAddressSetPtr; char *virDomainPCIAddressAsString(virPCIDeviceAddressPtr addr) ATTRIBUTE_NONNULL(1); +int virDomainPCIAddressSetExtensionAlloc(virDomainPCIAddressSetPtr addrs, + virDomainPCIAddressExtensionFlags extFlags); + virDomainPCIAddressSetPtr virDomainPCIAddressSetAlloc(unsigned int nbuses); void virDomainPCIAddressSetFree(virDomainPCIAddressSetPtr addrs); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 47ea35f864..0e9c02922e 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -116,6 +116,7 @@ virDomainPCIAddressReserveAddr; virDomainPCIAddressReserveNextAddr; virDomainPCIAddressSetAllMulti; virDomainPCIAddressSetAlloc; +virDomainPCIAddressSetExtensionAlloc; virDomainPCIAddressSetFree; virDomainPCIAddressSlotInUse; virDomainPCIAddressValidate; diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index e4642ffaf9..2eea2ab77f 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -1514,6 +1514,13 @@ qemuDomainPCIAddressSetCreate(virDomainDefPtr def, addrs->dryRun = dryRun; + /* create zpci address set for s390 domain */ + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ZPCI) && + virDomainPCIAddressSetExtensionAlloc(addrs, + VIR_PCI_ADDRESS_EXTENSION_ZPCI)) { + goto error; + } + /* pSeries domains support multiple pci-root controllers */ if (qemuDomainIsPSeries(def)) addrs->areMultipleRootsSupported = true; -- Yi Min
This patch introduces new XML parser/formatter functions. Uid is 16-bit and non-zero. Fid is 32-bit. They are added as two new attributes of PCI address, and parsed/formatted along with PCI address parser/formatter. The related test is also added. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- docs/schemas/basictypes.rng | 23 ++++++++ docs/schemas/domaincommon.rng | 1 + src/conf/device_conf.c | 62 ++++++++++++++++++++++ src/conf/device_conf.h | 6 +++ src/conf/domain_addr.c | 3 ++ src/conf/domain_conf.c | 6 +++ src/qemu/qemu_domain.c | 26 +++++++++ src/util/virpci.h | 3 ++ tests/qemuxml2argvdata/disk-virtio-s390-zpci.args | 25 +++++++++ tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml | 17 ++++++ tests/qemuxml2argvdata/hostdev-vfio-zpci.args | 23 ++++++++ tests/qemuxml2argvdata/hostdev-vfio-zpci.xml | 19 +++++++ tests/qemuxml2argvtest.c | 7 +++ tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml | 29 ++++++++++ tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml | 30 +++++++++++ tests/qemuxml2xmltest.c | 6 +++ 16 files changed, 286 insertions(+) create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.args create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.xml create mode 100644 tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml diff --git a/docs/schemas/basictypes.rng b/docs/schemas/basictypes.rng index 14a3670e5c..3defb56316 100644 --- a/docs/schemas/basictypes.rng +++ b/docs/schemas/basictypes.rng @@ -65,6 +65,17 @@ </data> </choice> </define> + <define name="uint32"> + <choice> + <data type="string"> + <param name="pattern">(0x)?[0-9a-fA-F]{1,8}</param> + </data> + <data type="unsignedInt"> + <param name="minInclusive">0</param> + <param name="maxInclusive">4294967295</param> + </data> + </choice> + </define> <define name="UUID"> <choice> @@ -111,6 +122,18 @@ </attribute> </optional> </define> + <define name="zpciaddress"> + <optional> + <attribute name="uid"> + <ref name="uint16"/> + </attribute> + </optional> + <optional> + <attribute name="fid"> + <ref name="uint32"/> + </attribute> + </optional> + </define> <!-- a 6 byte MAC address in ASCII-hex format, eg "12:34:56:78:9A:BC" --> <!-- The lowest bit of the 1st byte is the "multicast" bit. a --> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index f176538195..e74180af79 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -5219,6 +5219,7 @@ <value>pci</value> </attribute> <ref name="pciaddress"/> + <ref name="zpciaddress"/> </group> <group> <attribute name="type"> diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c index d69f94fadf..192526e95d 100644 --- a/src/conf/device_conf.c +++ b/src/conf/device_conf.c @@ -32,6 +32,65 @@ #define VIR_FROM_THIS VIR_FROM_DEVICE +static int +virZPCIDeviceAddressIsValid(virZPCIDeviceAddressPtr zpci) +{ + /* We don't need to check fid because fid covers + * all range of uint32 type. + */ + if (zpci->uid > VIR_DOMAIN_DEVICE_ZPCI_MAX_UID || + zpci->uid == 0) { + virReportError(VIR_ERR_XML_ERROR, + _("Invalid PCI address uid='0x%x', " + "must be > 0x0 and <= 0x%x"), + zpci->uid, + VIR_DOMAIN_DEVICE_ZPCI_MAX_UID); + return 0; + } + + return 1; +} + +static int +virZPCIDeviceAddressParseXML(xmlNodePtr node, + virPCIDeviceAddressPtr addr) +{ + char *uid, *fid; + int ret = -1; + virZPCIDeviceAddress def = { 0 }; + + uid = virXMLPropString(node, "uid"); + fid = virXMLPropString(node, "fid"); + + if (uid) { + if (virStrToLong_uip(uid, NULL, 0, &def.uid) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot parse <address> 'uid' attribute")); + goto cleanup; + } + } + + if (fid) { + if (virStrToLong_uip(fid, NULL, 0, &def.fid) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Cannot parse <address> 'fid' attribute")); + goto cleanup; + } + } + + if (!virZPCIDeviceAddressIsEmpty(&def) && + !virZPCIDeviceAddressIsValid(&def)) + goto cleanup; + + addr->zpci = def; + ret = 0; + + cleanup: + VIR_FREE(uid); + VIR_FREE(fid); + return ret; +} + int virDomainDeviceInfoCopy(virDomainDeviceInfoPtr dst, virDomainDeviceInfoPtr src) @@ -245,6 +304,9 @@ virPCIDeviceAddressParseXML(xmlNodePtr node, if (!virPCIDeviceAddressIsEmpty(addr) && !virPCIDeviceAddressIsValid(addr, true)) goto cleanup; + if (virZPCIDeviceAddressParseXML(node, addr) < 0) + goto cleanup; + ret = 0; cleanup: diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index 6f926dff1d..1e787d3752 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -211,6 +211,12 @@ virDeviceInfoPCIAddressPresent(const virDomainDeviceInfo *info) !virPCIDeviceAddressIsEmpty(&info->addr.pci); } +static inline bool +virZPCIDeviceAddressIsEmpty(const virZPCIDeviceAddress *addr) +{ + return !(addr->uid || addr->fid); +} + int virPCIDeviceAddressParseXML(xmlNodePtr node, virPCIDeviceAddressPtr addr); diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index 8d3e75f19a..90d8abc1f4 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -1044,6 +1044,9 @@ virDomainPCIAddressReserveNextAddr(virDomainPCIAddressSetPtr addrs, dev->isolationGroup, function) < 0) return -1; + if (dev->pciAddressExtFlags & VIR_PCI_ADDRESS_EXTENSION_ZPCI) + addr.zpci = dev->addr.pci.zpci; + if (virDomainPCIAddressReserveAddrInternal(addrs, &addr, flags, dev->isolationGroup, false) < 0) return -1; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index bde9fef914..591c85759d 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6509,6 +6509,12 @@ virDomainDeviceInfoFormat(virBufferPtr buf, info->addr.pci.slot, info->addr.pci.function); } + if (!virZPCIDeviceAddressIsEmpty(&info->addr.pci.zpci)) { + virBufferAsprintf(buf, " uid='0x%.4x'", + info->addr.pci.zpci.uid); + virBufferAsprintf(buf, " fid='0x%.8x'", + info->addr.pci.zpci.fid); + } if (info->addr.pci.multi) { virBufferAsprintf(buf, " multifunction='%s'", virTristateSwitchTypeToString(info->addr.pci.multi)); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index a6e143dc33..d437c432e3 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5716,6 +5716,27 @@ qemuDomainDeviceDefValidateGraphics(const virDomainGraphicsDef *graphics, } +static int +qemuDomainZPCIAddressDefValidate(virDomainDeviceDef *dev, + virQEMUCapsPtr qemuCaps) +{ + virDomainDeviceInfoPtr info = virDomainDeviceGetInfo(dev); + + if (!info || (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI)) + return 0; + + if (!virZPCIDeviceAddressIsEmpty(&info->addr.pci.zpci) && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ZPCI)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + "%s", + _("This QEMU binary doesn't support zPCI.")); + return -1; + } + + return 0; +} + + static int qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, const virDomainDef *def, @@ -5729,6 +5750,10 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, def->emulator))) return -1; + ret = qemuDomainZPCIAddressDefValidate((virDomainDeviceDef *)dev, qemuCaps); + if (ret < 0) + goto out; + switch ((virDomainDeviceType)dev->type) { case VIR_DOMAIN_DEVICE_NET: ret = qemuDomainDeviceDefValidateNetwork(dev->data.net); @@ -5804,6 +5829,7 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, break; } + out: virObjectUnref(qemuCaps); return ret; } diff --git a/src/util/virpci.h b/src/util/virpci.h index b7bcfa6d9f..e2ffe11625 100644 --- a/src/util/virpci.h +++ b/src/util/virpci.h @@ -37,6 +37,9 @@ typedef virPCIDeviceAddress *virPCIDeviceAddressPtr; typedef struct _virPCIDeviceList virPCIDeviceList; typedef virPCIDeviceList *virPCIDeviceListPtr; +# define VIR_DOMAIN_DEVICE_ZPCI_MAX_UID UINT16_MAX +# define VIR_DOMAIN_DEVICE_ZPCI_MAX_FID UINT32_MAX + typedef struct _virZPCIDeviceAddress virZPCIDeviceAddress; typedef virZPCIDeviceAddress *virZPCIDeviceAddressPtr; struct _virZPCIDeviceAddress { diff --git a/tests/qemuxml2argvdata/disk-virtio-s390-zpci.args b/tests/qemuxml2argvdata/disk-virtio-s390-zpci.args new file mode 100644 index 0000000000..8ac435cb3e --- /dev/null +++ b/tests/qemuxml2argvdata/disk-virtio-s390-zpci.args @@ -0,0 +1,25 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-s390x \ +-name QEMUGuest1 \ +-S \ +-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ +server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \ +-device virtio-blk-pci,bus=pci.0,addr=0x8,drive=drive-virtio-disk0,\ +id=virtio-disk0,bootindex=1 \ +-device virtio-balloon-ccw,id=balloon0,devno=fe.0.0000 diff --git a/tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml b/tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml new file mode 100644 index 0000000000..7887b97b2c --- /dev/null +++ b/tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml @@ -0,0 +1,17 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory>219136</memory> + <vcpu>1</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <disk type='block' device='disk'> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='hda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0' uid='0x0019' fid='0x0000001f'/> + </disk> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci.args b/tests/qemuxml2argvdata/hostdev-vfio-zpci.args new file mode 100644 index 0000000000..d6b1520c47 --- /dev/null +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci.args @@ -0,0 +1,23 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-s390x \ +-name QEMUGuest1 \ +-S \ +-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ +server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-device vfio-pci,host=00:00.0,id=hostdev0,bus=pci.0,addr=0x8 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x1 diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci.xml b/tests/qemuxml2argvdata/hostdev-vfio-zpci.xml new file mode 100644 index 0000000000..cde333e220 --- /dev/null +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci.xml @@ -0,0 +1,19 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory>219100</memory> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0' uid='0x0019' fid='0x0000001f'/> + </hostdev> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 82b5b7bbea..5297dd80e0 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1058,6 +1058,10 @@ mymain(void) QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390); DO_TEST("disk-virtio-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390); + DO_TEST("disk-virtio-s390-zpci", + QEMU_CAPS_DEVICE_ZPCI, + QEMU_CAPS_CCW, + QEMU_CAPS_VIRTIO_S390); DO_TEST("disk-order", QEMU_CAPS_VIRTIO_BLK_SCSI); DO_TEST("disk-virtio-queues", QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES); @@ -1651,6 +1655,9 @@ mymain(void) DO_TEST_PARSE_ERROR("hostdev-mdev-display-missing-graphics", QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_VFIO_PCI_DISPLAY); + DO_TEST("hostdev-vfio-zpci", + QEMU_CAPS_DEVICE_VFIO_PCI, + QEMU_CAPS_DEVICE_ZPCI); DO_TEST("pci-rom", NONE); DO_TEST("pci-rom-disabled", NONE); DO_TEST("pci-rom-disabled-invalid", NONE); diff --git a/tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml b/tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml new file mode 100644 index 0000000000..39b5acdf3b --- /dev/null +++ b/tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml @@ -0,0 +1,29 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219136</memory> + <currentMemory unit='KiB'>219136</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <disk type='block' device='disk'> + <driver name='qemu' type='raw'/> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='hda' bus='virtio'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0' uid='0x0019' fid='0x0000001f'/> + </disk> + <controller type='pci' index='0' model='pci-root'/> + <memballoon model='virtio'> + <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> + </memballoon> + <panic model='s390'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml new file mode 100644 index 0000000000..1f48c44e30 --- /dev/null +++ b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml @@ -0,0 +1,30 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0' uid='0x0019' fid='0x0000001f'/> + </hostdev> + <memballoon model='virtio'> + <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0000'/> + </memballoon> + <panic model='s390'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 43fd4e5f0f..47f3b9431b 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -379,6 +379,9 @@ mymain(void) QEMU_CAPS_VIRTIO_SCSI); DO_TEST("disk-virtio-scsi-ioeventfd", QEMU_CAPS_VIRTIO_SCSI); + DO_TEST("disk-virtio-s390-zpci", + QEMU_CAPS_DEVICE_ZPCI, + QEMU_CAPS_CCW); DO_TEST("disk-scsi-megasas", QEMU_CAPS_SCSI_MEGASAS); DO_TEST("disk-scsi-mptsas1068", @@ -460,6 +463,9 @@ mymain(void) DO_TEST("hostdev-usb-address", NONE); DO_TEST("hostdev-pci-address", NONE); DO_TEST("hostdev-vfio", NONE); + DO_TEST("hostdev-vfio-zpci", + QEMU_CAPS_DEVICE_ZPCI, + QEMU_CAPS_CCW); DO_TEST("hostdev-mdev-precreated", NONE); DO_TEST("hostdev-mdev-display", QEMU_CAPS_VFIO_PCI_DISPLAY); DO_TEST("pci-rom", NONE); -- Yi Min
在 2018/8/27 下午1:48, Yi Min Zhao 写道:
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index a6e143dc33..d437c432e3 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5716,6 +5716,27 @@ qemuDomainDeviceDefValidateGraphics(const virDomainGraphicsDef *graphics, }
+static int +qemuDomainZPCIAddressDefValidate(virDomainDeviceDef *dev, + virQEMUCapsPtr qemuCaps) +{ + virDomainDeviceInfoPtr info = virDomainDeviceGetInfo(dev); + + if (!info || (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI)) + return 0; + + if (!virZPCIDeviceAddressIsEmpty(&info->addr.pci.zpci) && + !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_ZPCI)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + "%s", + _("This QEMU binary doesn't support zPCI.")); + return -1; + } + + return 0; +} + + static int qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, const virDomainDef *def, @@ -5729,6 +5750,10 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, def->emulator))) return -1;
+ ret = qemuDomainZPCIAddressDefValidate((virDomainDeviceDef *)dev, qemuCaps); + if (ret < 0) + goto out; + switch ((virDomainDeviceType)dev->type) { case VIR_DOMAIN_DEVICE_NET: ret = qemuDomainDeviceDefValidateNetwork(dev->data.net); @@ -5804,6 +5829,7 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev, break; }
+ out: virObjectUnref(qemuCaps); return ret; } I think this should be separated into single patch. Right?
This patch adds new functions for reservation, assignment and release to handle the uid/fid. If the uid/fid is defined in the domain XML, they will be reserved directly in collecting phase. If any of them is not defined, we will find out an available value for it from zPCI address hashtable, and reserve it. For hotplug case, there might be or not zPCI definition. So allocate and reserve uid/fid for undefined case. Assign if needed and reserve uid/fid for defined case. If the user define zPCI extension address but zPCI capability doesn't exist, an error will be reported. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- src/conf/device_conf.h | 7 ++ src/conf/domain_addr.c | 243 +++++++++++++++++++++++++++++++++++++++++ src/conf/domain_addr.h | 15 +++ src/libvirt_private.syms | 3 + src/qemu/qemu_domain_address.c | 56 +++++++++- 5 files changed, 323 insertions(+), 1 deletion(-) diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h index 1e787d3752..8f17619f3f 100644 --- a/src/conf/device_conf.h +++ b/src/conf/device_conf.h @@ -217,6 +217,13 @@ virZPCIDeviceAddressIsEmpty(const virZPCIDeviceAddress *addr) return !(addr->uid || addr->fid); } +static inline bool +virDeviceInfoPCIAddressExtensionIsPresent(const virDomainDeviceInfo *info) +{ + return info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI && + !virZPCIDeviceAddressIsEmpty(&info->addr.pci.zpci); +} + int virPCIDeviceAddressParseXML(xmlNodePtr node, virPCIDeviceAddressPtr addr); diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index 90d8abc1f4..8af1943ff2 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -33,6 +33,152 @@ VIR_LOG_INIT("conf.domain_addr"); +static int +virDomainZPCIAddressReserveId(virHashTablePtr set, + unsigned int id, + const char *name) +{ + if (virHashLookup(set, &id)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("zPCI %s %u is already reserved"), + name, id); + return -1; + } + + if (virHashAddEntry(set, &id, (void*)1) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to reserve %s %u"), + name, id); + return -1; + } + + return 0; +} + + +static int +virDomainZPCIAddressReserveUid(virHashTablePtr set, + virZPCIDeviceAddressPtr addr) +{ + return virDomainZPCIAddressReserveId(set, addr->uid, "uid"); +} + + +static int +virDomainZPCIAddressReserveFid(virHashTablePtr set, + virZPCIDeviceAddressPtr addr) +{ + return virDomainZPCIAddressReserveId(set, addr->fid, "fid"); +} + + +static int +virDomainZPCIAddressAssignId(virHashTablePtr set, + unsigned int *id, + unsigned int min, + unsigned int max, + const char *name) +{ + while (virHashLookup(set, &min)) { + if (min == max) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("There is no more free %s."), + name); + return -1; + } + ++min; + } + *id = min; + + return 0; +} + + +static int +virDomainZPCIAddressAssignUid(virHashTablePtr set, + virZPCIDeviceAddressPtr addr) +{ + return virDomainZPCIAddressAssignId(set, &addr->uid, 1, + VIR_DOMAIN_DEVICE_ZPCI_MAX_UID, "uid"); +} + + +static int +virDomainZPCIAddressAssignFid(virHashTablePtr set, + virZPCIDeviceAddressPtr addr) +{ + return virDomainZPCIAddressAssignId(set, &addr->fid, 0, + VIR_DOMAIN_DEVICE_ZPCI_MAX_FID, "fid"); +} + + +static void +virDomainZPCIAddressReleaseUid(virHashTablePtr set, + virZPCIDeviceAddressPtr addr) +{ + if (virHashRemoveEntry(set, &addr->uid) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Release uid %u failed"), addr->uid); + } + + addr->uid = 0; +} + + +static void +virDomainZPCIAddressReleaseFid(virHashTablePtr set, + virZPCIDeviceAddressPtr addr) +{ + if (virHashRemoveEntry(set, &addr->fid) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Release fid %u failed"), addr->fid); + } + + addr->fid = 0; +} + + +static void +virDomainZPCIAddressReleaseIds(virDomainZPCIAddressIdsPtr zpciIds, + virZPCIDeviceAddressPtr addr) +{ + if (!zpciIds || virZPCIDeviceAddressIsEmpty(addr)) + return; + + virDomainZPCIAddressReleaseUid(zpciIds->uids, addr); + + virDomainZPCIAddressReleaseFid(zpciIds->fids, addr); +} + + +static int +virDomainZPCIAddressReserveNextUid(virHashTablePtr uids, + virZPCIDeviceAddressPtr zpci) +{ + if (virDomainZPCIAddressAssignUid(uids, zpci) < 0) + return -1; + + if (virDomainZPCIAddressReserveUid(uids, zpci) < 0) + return -1; + + return 0; +} + + +static int +virDomainZPCIAddressReserveNextFid(virHashTablePtr fids, + virZPCIDeviceAddressPtr zpci) +{ + if (virDomainZPCIAddressAssignFid(fids, zpci) < 0) + return -1; + + if (virDomainZPCIAddressReserveFid(fids, zpci) < 0) + return -1; + + return 0; +} + + static void virDomainPCIAddressSetExtensionFree(virDomainPCIAddressSetPtr addrs) { @@ -44,6 +190,91 @@ virDomainPCIAddressSetExtensionFree(virDomainPCIAddressSetPtr addrs) VIR_FREE(addrs->zpciIds); } + +static int +virDomainZPCIAddressReserveAddr(virDomainZPCIAddressIdsPtr zpciIds, + virZPCIDeviceAddressPtr addr) +{ + if (virDomainZPCIAddressReserveUid(zpciIds->uids, addr) < 0) { + return -1; + } + + if (virDomainZPCIAddressReserveFid(zpciIds->fids, addr) < 0) { + virDomainZPCIAddressReleaseUid(zpciIds->uids, addr); + return -1; + } + + return 0; +} + + +static int +virDomainZPCIAddressReserveNextAddr(virDomainZPCIAddressIdsPtr zpciIds, + virZPCIDeviceAddressPtr addr) +{ + if (virDomainZPCIAddressReserveNextUid(zpciIds->uids, addr) < 0) + return -1; + + if (virDomainZPCIAddressReserveNextFid(zpciIds->fids, addr) < 0) { + virDomainZPCIAddressReleaseUid(zpciIds->uids, addr); + return -1; + } + + return 0; +} + + +int +virDomainPCIAddressExtensionReserveAddr(virDomainPCIAddressSetPtr addrs, + virPCIDeviceAddressPtr addr, + virDomainPCIAddressExtensionFlags extFlags) +{ + if (extFlags & VIR_PCI_ADDRESS_EXTENSION_ZPCI) { + /* Reserve uid/fid to ZPCI device which has defined uid/fid + * in the domain. + */ + return virDomainZPCIAddressReserveAddr(addrs->zpciIds, &addr->zpci); + } + + return 0; +} + + +int +virDomainPCIAddressExtensionReserveNextAddr(virDomainPCIAddressSetPtr addrs, + virPCIDeviceAddressPtr dev, + virDomainPCIAddressExtensionFlags extFlags) +{ + if ((extFlags & VIR_PCI_ADDRESS_EXTENSION_ZPCI) && + virZPCIDeviceAddressIsEmpty(&dev->zpci)) { + virZPCIDeviceAddress zpci = { 0 }; + + if (virDomainZPCIAddressReserveNextAddr(addrs->zpciIds, &zpci) < 0) + return -1; + + if (!addrs->dryRun) + dev->zpci = zpci; + } + + return 0; +} + +static int +virDomainPCIAddressExtensionEnsureAddr(virDomainPCIAddressSetPtr addrs, + virDomainDeviceInfoPtr dev) +{ + if (dev->pciAddressExtFlags & VIR_PCI_ADDRESS_EXTENSION_ZPCI) { + virZPCIDeviceAddressPtr zpci = &dev->addr.pci.zpci; + + if (virZPCIDeviceAddressIsEmpty(zpci)) + return virDomainZPCIAddressReserveNextAddr(addrs->zpciIds, zpci); + else + return virDomainZPCIAddressReserveAddr(addrs->zpciIds, zpci); + } + + return 0; +} + virDomainPCIConnectFlags virDomainPCIControllerModelToConnectType(virDomainControllerModelPCI model) { @@ -740,12 +971,24 @@ virDomainPCIAddressEnsureAddr(virDomainPCIAddressSetPtr addrs, ret = virDomainPCIAddressReserveNextAddr(addrs, dev, flags, -1); } + ret = virDomainPCIAddressExtensionEnsureAddr(addrs, dev); + cleanup: VIR_FREE(addrStr); return ret; } +void +virDomainPCIAddressExtensionReleaseAddr(virDomainPCIAddressSetPtr addrs, + virPCIDeviceAddressPtr addr, + int extFlags) +{ + if ((extFlags & VIR_PCI_ADDRESS_EXTENSION_ZPCI)) + virDomainZPCIAddressReleaseIds(addrs->zpciIds, &addr->zpci); +} + + void virDomainPCIAddressReleaseAddr(virDomainPCIAddressSetPtr addrs, virPCIDeviceAddressPtr addr) diff --git a/src/conf/domain_addr.h b/src/conf/domain_addr.h index d1ec869da4..a1f71f15f4 100644 --- a/src/conf/domain_addr.h +++ b/src/conf/domain_addr.h @@ -164,6 +164,16 @@ bool virDomainPCIAddressSlotInUse(virDomainPCIAddressSetPtr addrs, virPCIDeviceAddressPtr addr) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); +int virDomainPCIAddressExtensionReserveAddr(virDomainPCIAddressSetPtr addrs, + virPCIDeviceAddressPtr addr, + virDomainPCIAddressExtensionFlags extFlags) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + +int virDomainPCIAddressExtensionReserveNextAddr(virDomainPCIAddressSetPtr addrs, + virPCIDeviceAddressPtr addr, + virDomainPCIAddressExtensionFlags extFlags) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + int virDomainPCIAddressReserveAddr(virDomainPCIAddressSetPtr addrs, virPCIDeviceAddressPtr addr, virDomainPCIConnectFlags flags, @@ -185,6 +195,11 @@ void virDomainPCIAddressReleaseAddr(virDomainPCIAddressSetPtr addrs, virPCIDeviceAddressPtr addr) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); +void virDomainPCIAddressExtensionReleaseAddr(virDomainPCIAddressSetPtr addrs, + virPCIDeviceAddressPtr addr, + int extFlags) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + void virDomainPCIAddressSetAllMulti(virDomainDefPtr def) ATTRIBUTE_NONNULL(1); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 0e9c02922e..f3e23d048f 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -111,6 +111,9 @@ virDomainPCIAddressAsString; virDomainPCIAddressBusIsFullyReserved; virDomainPCIAddressBusSetModel; virDomainPCIAddressEnsureAddr; +virDomainPCIAddressExtensionReleaseAddr; +virDomainPCIAddressExtensionReserveAddr; +virDomainPCIAddressExtensionReserveNextAddr; virDomainPCIAddressReleaseAddr; virDomainPCIAddressReserveAddr; virDomainPCIAddressReserveNextAddr; diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 2eea2ab77f..f1afea53fe 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -1405,6 +1405,22 @@ qemuDomainPCIAddressReserveNextAddr(virDomainPCIAddressSetPtr addrs, } +static int +qemuDomainAssignPCIAddressExtension(virDomainDefPtr def ATTRIBUTE_UNUSED, + virDomainDeviceDefPtr device ATTRIBUTE_UNUSED, + virDomainDeviceInfoPtr info, + void *opaque) +{ + virDomainPCIAddressSetPtr addrs = opaque; + virPCIDeviceAddressPtr addr = &info->addr.pci; + virDomainPCIAddressExtensionFlags extFlags = info->pciAddressExtFlags; + + if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) + return virDomainPCIAddressExtensionReserveNextAddr(addrs, addr, extFlags); + + return 0; +} + static int qemuDomainCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED, virDomainDeviceDefPtr device, @@ -1498,6 +1514,29 @@ qemuDomainCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED, return ret; } +static int +qemuDomainCollectPCIAddressExtension(virDomainDefPtr def ATTRIBUTE_UNUSED, + virDomainDeviceDefPtr device, + virDomainDeviceInfoPtr info, + void *opaque) +{ + virDomainPCIAddressSetPtr addrs = opaque; + virPCIDeviceAddressPtr addr = &info->addr.pci; + + if (!virDeviceInfoPCIAddressExtensionIsPresent(info) || + ((device->type == VIR_DOMAIN_DEVICE_HOSTDEV) && + (device->data.hostdev->parent.type != VIR_DOMAIN_DEVICE_NONE))) { + /* If a hostdev has a parent, its info will be a part of the + * parent, and will have its address collected during the scan + * of the parent's device type. + */ + return 0; + } + + return virDomainPCIAddressExtensionReserveAddr(addrs, addr, + info->pciAddressExtFlags); +} + static virDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def, virQEMUCapsPtr qemuCaps, @@ -1592,6 +1631,12 @@ qemuDomainPCIAddressSetCreate(virDomainDefPtr def, if (virDomainDeviceInfoIterate(def, qemuDomainCollectPCIAddress, addrs) < 0) goto error; + if (virDomainDeviceInfoIterate(def, + qemuDomainCollectPCIAddressExtension, + addrs) < 0) { + goto error; + } + return addrs; error: @@ -2595,6 +2640,9 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, if (qemuDomainAssignDevicePCISlots(def, qemuCaps, addrs) < 0) goto cleanup; + if (virDomainDeviceInfoIterate(def, qemuDomainAssignPCIAddressExtension, addrs) < 0) + goto cleanup; + /* Only for *new* domains with pcie-root (and no other * manually specified PCI controllers in the definition): If, * after assigning addresses/reserving slots for all devices, @@ -2689,6 +2737,9 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def, if (qemuDomainAssignDevicePCISlots(def, qemuCaps, addrs) < 0) goto cleanup; + if (virDomainDeviceInfoIterate(def, qemuDomainAssignPCIAddressExtension, addrs) < 0) + goto cleanup; + /* set multi attribute for devices at function 0 of * any slot that has multiple functions in use */ @@ -3148,8 +3199,11 @@ qemuDomainReleaseDeviceAddress(virDomainObjPtr vm, if (!devstr) devstr = info->alias; - if (virDeviceInfoPCIAddressPresent(info)) + if (virDeviceInfoPCIAddressPresent(info)) { virDomainPCIAddressReleaseAddr(priv->pciaddrs, &info->addr.pci); + virDomainPCIAddressExtensionReleaseAddr(priv->pciaddrs, &info->addr.pci, + info->pciAddressExtFlags); + } if (virDomainUSBAddressRelease(priv->usbaddrs, info) < 0) VIR_WARN("Unable to release USB address on %s", NULLSTR(devstr)); -- Yi Min
在 2018/8/27 下午1:48, Yi Min Zhao 写道:
+ +static int +virDomainZPCIAddressReserveAddr(virDomainZPCIAddressIdsPtr zpciIds, + virZPCIDeviceAddressPtr addr) +{ + if (virDomainZPCIAddressReserveUid(zpciIds->uids, addr) < 0) { + return -1; + } Here, should remove curly brackets. + + if (virDomainZPCIAddressReserveFid(zpciIds->fids, addr) < 0) { + virDomainZPCIAddressReleaseUid(zpciIds->uids, addr); + return -1; + } + + return 0; +} +
Add new functions to generate zPCI command string and append it to QEMU command line. And the related tests are added. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_command.c | 95 ++++++++++++++++++++++ src/qemu/qemu_command.h | 2 + tests/qemuxml2argvdata/disk-virtio-s390-zpci.args | 1 + .../hostdev-vfio-zpci-autogenerate.args | 25 ++++++ .../hostdev-vfio-zpci-autogenerate.xml | 18 ++++ .../hostdev-vfio-zpci-boundaries.args | 29 +++++++ .../hostdev-vfio-zpci-boundaries.xml | 26 ++++++ .../hostdev-vfio-zpci-multidomain-many.args | 39 +++++++++ .../hostdev-vfio-zpci-multidomain-many.xml | 67 +++++++++++++++ tests/qemuxml2argvdata/hostdev-vfio-zpci.args | 2 + tests/qemuxml2argvtest.c | 13 +++ .../hostdev-vfio-zpci-autogenerate.xml | 30 +++++++ .../hostdev-vfio-zpci-boundaries.xml | 42 ++++++++++ .../hostdev-vfio-zpci-multidomain-many.xml | 79 ++++++++++++++++++ tests/qemuxml2xmltest.c | 11 +++ 15 files changed, 479 insertions(+) create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-multidomain-many.xml diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index fd9e58fd5d..7c7d767655 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2155,6 +2155,50 @@ qemuBuildDiskDeviceStr(const virDomainDef *def, return NULL; } +char * +qemuBuildZPCIDevStr(virDomainDeviceInfoPtr dev) +{ + virBuffer buf = VIR_BUFFER_INITIALIZER; + + virBufferAddLit(&buf, "zpci"); + virBufferAsprintf(&buf, ",uid=%u", dev->addr.pci.zpci.uid); + virBufferAsprintf(&buf, ",fid=%u", dev->addr.pci.zpci.fid); + virBufferAsprintf(&buf, ",target=%s", dev->alias); + virBufferAsprintf(&buf, ",id=zpci%u", dev->addr.pci.zpci.uid); + + if (virBufferCheckError(&buf) < 0) { + virBufferFreeAndReset(&buf); + return NULL; + } + + return virBufferContentAndReset(&buf); +} + +static int +qemuAppendZPCIDevStr(virCommandPtr cmd, + virDomainDeviceInfoPtr dev) +{ + char *devstr = NULL; + + virCommandAddArg(cmd, "-device"); + if (!(devstr = qemuBuildZPCIDevStr(dev))) + return -1; + + virCommandAddArg(cmd, devstr); + + VIR_FREE(devstr); + return 0; +} + +static int +qemuBuildExtensionCommandLine(virCommandPtr cmd, + virDomainDeviceInfoPtr dev) +{ + if (!virZPCIDeviceAddressIsEmpty(&dev->addr.pci.zpci)) + return qemuAppendZPCIDevStr(cmd, dev); + + return 0; +} static int qemuBuildFloppyCommandLineControllerOptions(virCommandPtr cmd, @@ -2391,6 +2435,9 @@ qemuBuildDiskCommandLine(virCommandPtr cmd, if (!qemuDiskBusNeedsDriveArg(disk->bus)) { if (disk->bus != VIR_DOMAIN_DISK_BUS_FDC || virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) { + if (qemuBuildExtensionCommandLine(cmd, &disk->info) < 0) + return -1; + virCommandAddArg(cmd, "-device"); if (!(optstr = qemuBuildDiskDeviceStr(def, disk, bootindex, @@ -2591,6 +2638,9 @@ qemuBuildFSDevCommandLine(virCommandPtr cmd, virCommandAddArg(cmd, optstr); VIR_FREE(optstr); + if (qemuBuildExtensionCommandLine(cmd, &fs->info) < 0) + return -1; + virCommandAddArg(cmd, "-device"); if (!(optstr = qemuBuildFSDevStr(def, fs, qemuCaps))) return -1; @@ -3075,6 +3125,10 @@ qemuBuildControllerDevCommandLine(virCommandPtr cmd, goto cleanup; if (devstr) { + if (qemuBuildExtensionCommandLine(cmd, &cont->info) < 0) { + VIR_FREE(devstr); + goto cleanup; + } virCommandAddArg(cmd, "-device"); virCommandAddArg(cmd, devstr); VIR_FREE(devstr); @@ -3878,6 +3932,9 @@ qemuBuildWatchdogCommandLine(virCommandPtr cmd, if (!def->watchdog) return 0; + if (qemuBuildExtensionCommandLine(cmd, &def->watchdog->info) < 0) + return -1; + virCommandAddArg(cmd, "-device"); optstr = qemuBuildWatchdogDevStr(def, watchdog, qemuCaps); @@ -3962,6 +4019,9 @@ qemuBuildMemballoonCommandLine(virCommandPtr cmd, if (qemuBuildVirtioOptionsStr(&buf, def->memballoon->virtio, qemuCaps) < 0) goto error; + if (qemuBuildExtensionCommandLine(cmd, &def->memballoon->info) < 0) + goto error; + virCommandAddArg(cmd, "-device"); virCommandAddArgBuffer(cmd, &buf); return 0; @@ -4184,6 +4244,9 @@ qemuBuildInputCommandLine(virCommandPtr cmd, virDomainInputDefPtr input = def->inputs[i]; char *devstr = NULL; + if (qemuBuildExtensionCommandLine(cmd, &input->info) < 0) + return -1; + if (qemuBuildInputDevStr(&devstr, def, input, qemuCaps) < 0) return -1; @@ -4325,6 +4388,9 @@ qemuBuildSoundCommandLine(virCommandPtr cmd, if (sound->model == VIR_DOMAIN_SOUND_MODEL_PCSPK) { virCommandAddArgList(cmd, "-soundhw", "pcspk", NULL); } else { + if (qemuBuildExtensionCommandLine(cmd, &sound->info) < 0) + return -1; + virCommandAddArg(cmd, "-device"); if (!(str = qemuBuildSoundDevStr(def, sound, qemuCaps))) return -1; @@ -4564,6 +4630,9 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, if (video->primary) { if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VIDEO_PRIMARY)) { + if (qemuBuildExtensionCommandLine(cmd, + &def->videos[i]->info) < 0) + return -1; virCommandAddArg(cmd, "-device"); if (!(str = qemuBuildDeviceVideoStr(def, video, qemuCaps))) @@ -4576,6 +4645,9 @@ qemuBuildVideoCommandLine(virCommandPtr cmd, return -1; } } else { + if (qemuBuildExtensionCommandLine(cmd, &def->videos[i]->info) < 0) + return -1; + virCommandAddArg(cmd, "-device"); if (!(str = qemuBuildDeviceVideoStr(def, video, qemuCaps))) @@ -5447,6 +5519,10 @@ qemuBuildHostdevCommandLine(virCommandPtr cmd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); } } + + if (qemuBuildExtensionCommandLine(cmd, hostdev->info) < 0) + return -1; + virCommandAddArg(cmd, "-device"); devstr = qemuBuildPCIHostdevDevStr(def, hostdev, bootIndex, configfd_name, qemuCaps); @@ -5913,6 +5989,9 @@ qemuBuildRNGCommandLine(virLogManagerPtr logManager, virCommandAddArgBuffer(cmd, &buf); /* add the device */ + if (qemuBuildExtensionCommandLine(cmd, &rng->info) < 0) + return -1; + if (!(tmp = qemuBuildRNGDevStr(def, rng, qemuCaps))) return -1; virCommandAddArgList(cmd, "-device", tmp, NULL); @@ -8383,6 +8462,9 @@ qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver, virCommandAddArg(cmd, "-netdev"); virCommandAddArg(cmd, netdev); + if (qemuBuildExtensionCommandLine(cmd, &net->info) < 0) + goto cleanup; + if (!(nic = qemuBuildNicDevStr(def, net, bootindex, queues, qemuCaps))) { goto cleanup; @@ -8664,6 +8746,9 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver, * New way: -netdev type=tap,id=netdev1 -device e1000,id=netdev1 */ if (qemuDomainSupportsNicdev(def, net)) { + if (qemuBuildExtensionCommandLine(cmd, &net->info) < 0) + goto cleanup; + if (!(nic = qemuBuildNicDevStr(def, net, bootindex, vhostfdSize, qemuCaps))) goto cleanup; @@ -9084,6 +9169,9 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, switch ((virDomainShmemModel)shmem->model) { case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM: + if (qemuBuildExtensionCommandLine(cmd, &shmem->info) < 0) + return -1; + devstr = qemuBuildShmemDevLegacyStr(def, shmem, qemuCaps); break; @@ -9102,6 +9190,9 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager, ATTRIBUTE_FALLTHROUGH; case VIR_DOMAIN_SHMEM_MODEL_IVSHMEM_DOORBELL: + if (qemuBuildExtensionCommandLine(cmd, &shmem->info) < 0) + return -1; + devstr = qemuBuildShmemDevStr(def, shmem, qemuCaps); break; @@ -10274,6 +10365,10 @@ qemuBuildVsockCommandLine(virCommandPtr cmd, virCommandPassFD(cmd, priv->vhostfd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); priv->vhostfd = -1; + + if (qemuBuildExtensionCommandLine(cmd, &vsock->info) < 0) + goto cleanup; + virCommandAddArgList(cmd, "-device", devstr, NULL); ret = 0; diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 98d4ac90b5..d382cd592a 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -174,6 +174,8 @@ char *qemuBuildRedirdevDevStr(const virDomainDef *def, virDomainRedirdevDefPtr dev, virQEMUCapsPtr qemuCaps); +char *qemuBuildZPCIDevStr(virDomainDeviceInfoPtr dev); + int qemuNetworkPrepareDevices(virDomainDefPtr def); int qemuGetDriveSourceString(virStorageSourcePtr src, diff --git a/tests/qemuxml2argvdata/disk-virtio-s390-zpci.args b/tests/qemuxml2argvdata/disk-virtio-s390-zpci.args index 8ac435cb3e..3daa8316b6 100644 --- a/tests/qemuxml2argvdata/disk-virtio-s390-zpci.args +++ b/tests/qemuxml2argvdata/disk-virtio-s390-zpci.args @@ -20,6 +20,7 @@ server,nowait \ -rtc base=utc \ -no-shutdown \ -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-virtio-disk0 \ +-device zpci,uid=25,fid=31,target=virtio-disk0,id=zpci25 \ -device virtio-blk-pci,bus=pci.0,addr=0x8,drive=drive-virtio-disk0,\ id=virtio-disk0,bootindex=1 \ -device virtio-balloon-ccw,id=balloon0,devno=fe.0.0000 diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args b/tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args new file mode 100644 index 0000000000..4309cdf2be --- /dev/null +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args @@ -0,0 +1,25 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-s390x \ +-name QEMUGuest1 \ +-S \ +-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ +server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-device zpci,uid=1,fid=0,target=hostdev0,id=zpci1 \ +-device vfio-pci,host=00:00.0,id=hostdev0,bus=pci.0,addr=0x1 \ +-device zpci,uid=2,fid=1,target=balloon0,id=zpci2 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml b/tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml new file mode 100644 index 0000000000..36161006ab --- /dev/null +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml @@ -0,0 +1,18 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory>219100</memory> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci'/> + </hostdev> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args b/tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args new file mode 100644 index 0000000000..01b06837c8 --- /dev/null +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args @@ -0,0 +1,29 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-s390x \ +-name QEMUGuest1 \ +-S \ +-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ +server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-device zpci,uid=3,fid=2,target=pci.1,id=zpci3 \ +-device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1 \ +-device zpci,uid=65535,fid=4294967295,target=hostdev0,id=zpci65535 \ +-device vfio-pci,host=ffff:00:00.0,id=hostdev0,bus=pci.1,addr=0x1f \ +-device zpci,uid=1,fid=0,target=hostdev1,id=zpci1 \ +-device vfio-pci,host=00:00.0,id=hostdev1,bus=pci.0,addr=0x2 \ +-device zpci,uid=2,fid=1,target=balloon0,id=zpci2 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml b/tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml new file mode 100644 index 0000000000..779eb12ac2 --- /dev/null +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml @@ -0,0 +1,26 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory>219100</memory> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0xffff' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x01' slot='0x1f' function='0x0' fid='0xffffffff' uid='0xffff'/> + </hostdev> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' fid='0x00000000' uid='0x0001'/> + </hostdev> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.args b/tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.args new file mode 100644 index 0000000000..60b6a2e0d2 --- /dev/null +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.args @@ -0,0 +1,39 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/home/test \ +USER=test \ +LOGNAME=test \ +QEMU_AUDIO_DRV=none \ +/usr/bin/qemu-system-s390x \ +-name QEMUGuest1 \ +-S \ +-machine s390-ccw-virtio,accel=tcg,usb=off,dump-guest-core=off \ +-m 214 \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ +server,nowait \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-device zpci,uid=35,fid=63,target=hostdev0,id=zpci35 \ +-device vfio-pci,host=0001:00:00.0,id=hostdev0,bus=pci.0,addr=0x3 \ +-device zpci,uid=53,fid=104,target=hostdev1,id=zpci53 \ +-device vfio-pci,host=0002:00:00.0,id=hostdev1,bus=pci.0,addr=0x1 \ +-device zpci,uid=1,fid=1,target=hostdev2,id=zpci1 \ +-device vfio-pci,host=0003:00:00.0,id=hostdev2,bus=pci.0,addr=0x2 \ +-device zpci,uid=2,fid=2,target=hostdev3,id=zpci2 \ +-device vfio-pci,host=0004:00:00.0,id=hostdev3,bus=pci.0,addr=0x5 \ +-device zpci,uid=83,fid=0,target=hostdev4,id=zpci83 \ +-device vfio-pci,host=0005:00:00.0,id=hostdev4,bus=pci.0,addr=0x7 \ +-device zpci,uid=3,fid=114,target=hostdev5,id=zpci3 \ +-device vfio-pci,host=0006:00:00.0,id=hostdev5,bus=pci.0,addr=0x9 \ +-device zpci,uid=23,fid=3,target=hostdev6,id=zpci23 \ +-device vfio-pci,host=0007:00:00.0,id=hostdev6,bus=pci.0,addr=0x4 \ +-device zpci,uid=4,fid=40,target=hostdev7,id=zpci4 \ +-device vfio-pci,host=0008:00:00.0,id=hostdev7,bus=pci.0,addr=0x6 \ +-device zpci,uid=5,fid=4,target=balloon0,id=zpci5 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8 diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.xml b/tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.xml new file mode 100644 index 0000000000..a6c36e1f12 --- /dev/null +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.xml @@ -0,0 +1,67 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory>219100</memory> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + </os> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' uid='0x0023' fid='0x0000003f'/> + </hostdev> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0002' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' uid='0x0035' fid='0x00000068'/> + </hostdev> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0003' bus='0x00' slot='0x00' function='0x0'/> + </source> + </hostdev> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0004' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> + </hostdev> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0005' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0' uid='0x0053'/> + </hostdev> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0006' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0' uid='0x0003' fid='0x00000072'/> + </hostdev> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0007' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' uid='0x0017' fid='0x00000003'/> + </hostdev> + <hostdev mode='subsystem' type='pci'> + <driver name='vfio'/> + <source> + <address domain='0x0008' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' uid='0x0004' fid='0x00000028'/> + </hostdev> + </devices> +</domain> diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci.args b/tests/qemuxml2argvdata/hostdev-vfio-zpci.args index d6b1520c47..7ca4257a34 100644 --- a/tests/qemuxml2argvdata/hostdev-vfio-zpci.args +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci.args @@ -19,5 +19,7 @@ server,nowait \ -mon chardev=charmonitor,id=monitor,mode=control \ -rtc base=utc \ -no-shutdown \ +-device zpci,uid=25,fid=31,target=hostdev0,id=zpci25 \ -device vfio-pci,host=00:00.0,id=hostdev0,bus=pci.0,addr=0x8 \ +-device zpci,uid=1,fid=0,target=balloon0,id=zpci1 \ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x1 diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 5297dd80e0..2fee2e1d85 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1658,6 +1658,19 @@ mymain(void) DO_TEST("hostdev-vfio-zpci", QEMU_CAPS_DEVICE_VFIO_PCI, QEMU_CAPS_DEVICE_ZPCI); + DO_TEST("hostdev-vfio-zpci-multidomain-many", + QEMU_CAPS_DEVICE_VFIO_PCI, + QEMU_CAPS_DEVICE_PCI_BRIDGE, + QEMU_CAPS_DEVICE_ZPCI); + DO_TEST("hostdev-vfio-zpci-autogenerate", + QEMU_CAPS_DEVICE_VFIO_PCI, + QEMU_CAPS_DEVICE_ZPCI); + DO_TEST("hostdev-vfio-zpci-boundaries", + QEMU_CAPS_DEVICE_VFIO_PCI, + QEMU_CAPS_DEVICE_PCI_BRIDGE, + QEMU_CAPS_DEVICE_ZPCI); + DO_TEST_PARSE_ERROR("hostdev-vfio-zpci", + QEMU_CAPS_DEVICE_VFIO_PCI); DO_TEST("pci-rom", NONE); DO_TEST("pci-rom-disabled", NONE); DO_TEST("pci-rom-disabled-invalid", NONE); diff --git a/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml new file mode 100644 index 0000000000..8647cab1fc --- /dev/null +++ b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml @@ -0,0 +1,30 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' uid='0x0001' fid='0x00000000'/> + </hostdev> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' uid='0x0002' fid='0x00000001'/> + </memballoon> + <panic model='s390'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml new file mode 100644 index 0000000000..0b48c7658a --- /dev/null +++ b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml @@ -0,0 +1,42 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <controller type='pci' index='1' model='pci-bridge'> + <model name='pci-bridge'/> + <target chassisNr='1'/> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> + </controller> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0xffff' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x01' slot='0x1f' function='0x0' uid='0xffff' fid='0xffffffff'/> + </hostdev> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0000' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' uid='0x0001' fid='0x00000000'/> + </hostdev> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' uid='0x0002' fid='0x00000001'/> + </memballoon> + <panic model='s390'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-multidomain-many.xml b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-multidomain-many.xml new file mode 100644 index 0000000000..2197493393 --- /dev/null +++ b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-multidomain-many.xml @@ -0,0 +1,79 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='s390x' machine='s390-ccw-virtio'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-s390x</emulator> + <controller type='pci' index='0' model='pci-root'/> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' uid='0x0023' fid='0x0000003f'/> + </hostdev> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0002' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' uid='0x0035' fid='0x00000068'/> + </hostdev> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0003' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' uid='0x0001' fid='0x00000001'/> + </hostdev> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0004' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' uid='0x0002' fid='0x00000002'/> + </hostdev> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0005' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0' uid='0x0053' fid='0x00000000'/> + </hostdev> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0006' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0' uid='0x0003' fid='0x00000072'/> + </hostdev> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0007' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' uid='0x0017' fid='0x00000003'/> + </hostdev> + <hostdev mode='subsystem' type='pci' managed='no'> + <driver name='vfio'/> + <source> + <address domain='0x0008' bus='0x00' slot='0x00' function='0x0'/> + </source> + <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0' uid='0x0004' fid='0x00000028'/> + </hostdev> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0' uid='0x0005' fid='0x00000004'/> + </memballoon> + <panic model='s390'/> + </devices> +</domain> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 47f3b9431b..96820a1f6b 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -466,6 +466,17 @@ mymain(void) DO_TEST("hostdev-vfio-zpci", QEMU_CAPS_DEVICE_ZPCI, QEMU_CAPS_CCW); + DO_TEST("hostdev-vfio-zpci-multidomain-many", + QEMU_CAPS_DEVICE_VFIO_PCI, + QEMU_CAPS_DEVICE_PCI_BRIDGE, + QEMU_CAPS_DEVICE_ZPCI); + DO_TEST("hostdev-vfio-zpci-autogenerate", + QEMU_CAPS_DEVICE_VFIO_PCI, + QEMU_CAPS_DEVICE_ZPCI); + DO_TEST("hostdev-vfio-zpci-boundaries", + QEMU_CAPS_DEVICE_VFIO_PCI, + QEMU_CAPS_DEVICE_PCI_BRIDGE, + QEMU_CAPS_DEVICE_ZPCI); DO_TEST("hostdev-mdev-precreated", NONE); DO_TEST("hostdev-mdev-display", QEMU_CAPS_VFIO_PCI_DISPLAY); DO_TEST("pci-rom", NONE); -- Yi Min
This commit adds hotplug support for PCI devices on S390 guests. There's no need to implement hot unplug for zPCI as QEMU implements an unplug callback which will unplug both PCI and zPCI device in a cascaded way. Currently, the following PCI devices are supported: virtio-blk-pci virtio-net-pci virtio-rng-pci virtio-input-host-pci virtio-keyboard-pci virtio-mouse-pci virtio-tablet-pci vfio-pci SCSIVhost device Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- src/qemu/qemu_hotplug.c | 151 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 141 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 0b84a503bb..594e43304a 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -154,6 +154,70 @@ qemuHotplugPrepareDiskAccess(virQEMUDriverPtr driver, } +static int +qemuDomainAttachZPCIDevice(qemuMonitorPtr mon, + virDomainDeviceInfoPtr info) +{ + int ret = -1; + char *devstr_zpci = NULL; + + if (!(devstr_zpci = qemuBuildZPCIDevStr(info))) + goto cleanup; + + if (qemuMonitorAddDevice(mon, devstr_zpci) < 0) + goto cleanup; + + ret = 0; + + cleanup: + VIR_FREE(devstr_zpci); + return ret; +} + + +static int +qemuDomainDetachZPCIDevice(qemuMonitorPtr mon, + virDomainDeviceInfoPtr info) +{ + char *zpciAlias = NULL; + int ret = -1; + + if (virAsprintf(&zpciAlias, "zpci%d", info->addr.pci.zpci.uid) < 0) + goto cleanup; + + if (qemuMonitorDelDevice(mon, zpciAlias) < 0) + goto cleanup; + + ret = 0; + + cleanup: + VIR_FREE(zpciAlias); + return ret; +} + + +static int +qemuDomainAttachExtensionDevice(qemuMonitorPtr mon, + virDomainDeviceInfoPtr info) +{ + if (!virZPCIDeviceAddressIsEmpty(&info->addr.pci.zpci)) + return qemuDomainAttachZPCIDevice(mon, info); + + return 0; +} + + +static int +qemuDomainDetachExtensionDevice(qemuMonitorPtr mon, + virDomainDeviceInfoPtr info) +{ + if (!virZPCIDeviceAddressIsEmpty(&info->addr.pci.zpci)) + return qemuDomainDetachZPCIDevice(mon, info); + + return 0; +} + + static int qemuHotplugWaitForTrayEject(virDomainObjPtr vm, virDomainDiskDefPtr disk) @@ -805,8 +869,13 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, if (qemuHotplugDiskSourceAttach(priv->mon, diskdata) < 0) goto exit_monitor; - if (qemuMonitorAddDevice(priv->mon, devstr) < 0) + if (qemuDomainAttachExtensionDevice(priv->mon, &disk->info) < 0) + goto exit_monitor; + + if (qemuMonitorAddDevice(priv->mon, devstr) < 0) { + ignore_value(qemuDomainDetachExtensionDevice(priv->mon, &disk->info)); goto exit_monitor; + } if (qemuDomainObjExitMonitor(driver, vm) < 0) { ret = -2; @@ -913,7 +982,15 @@ int qemuDomainAttachControllerDevice(virQEMUDriverPtr driver, goto cleanup; qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorAddDevice(priv->mon, devstr); + + if (qemuDomainAttachExtensionDevice(priv->mon, &controller->info) < 0) { + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + goto cleanup; + } + + if ((ret = qemuMonitorAddDevice(priv->mon, devstr)) < 0) + ignore_value(qemuDomainDetachExtensionDevice(priv->mon, &controller->info)); + if (qemuDomainObjExitMonitor(driver, vm) < 0) { releaseaddr = false; ret = -1; @@ -1377,7 +1454,8 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, goto cleanup; } - if (qemuDomainIsS390CCW(vm->def) && + if (net->info.type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI && + qemuDomainIsS390CCW(vm->def) && virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_CCW)) { net->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW; if (!(ccwaddrs = virDomainCCWAddressSetCreateFromDomain(vm->def))) @@ -1447,7 +1525,15 @@ qemuDomainAttachNetDevice(virQEMUDriverPtr driver, goto try_remove; qemuDomainObjEnterMonitor(driver, vm); + + if (qemuDomainAttachExtensionDevice(priv->mon, &net->info) < 0) { + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + virDomainAuditNet(vm, NULL, net, "attach", false); + goto try_remove; + } + if (qemuMonitorAddDevice(priv->mon, nicstr) < 0) { + ignore_value(qemuDomainDetachExtensionDevice(priv->mon, &net->info)); ignore_value(qemuDomainObjExitMonitor(driver, vm)); virDomainAuditNet(vm, NULL, net, "attach", false); goto try_remove; @@ -1665,8 +1751,15 @@ qemuDomainAttachHostPCIDevice(virQEMUDriverPtr driver, goto error; qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorAddDeviceWithFd(priv->mon, devstr, - configfd, configfd_name); + + if ((ret = qemuDomainAttachExtensionDevice(priv->mon, hostdev->info)) < 0) + goto exit_monitor; + + if ((ret = qemuMonitorAddDeviceWithFd(priv->mon, devstr, + configfd, configfd_name)) < 0) + ignore_value(qemuDomainDetachExtensionDevice(priv->mon, hostdev->info)); + + exit_monitor: if (qemuDomainObjExitMonitor(driver, vm) < 0) goto error; @@ -2322,8 +2415,13 @@ qemuDomainAttachRNGDevice(virQEMUDriverPtr driver, if (qemuMonitorAddObject(priv->mon, &props, &objAlias) < 0) goto exit_monitor; - if (qemuMonitorAddDevice(priv->mon, devstr) < 0) + if (qemuDomainAttachExtensionDevice(priv->mon, &rng->info) < 0) + goto exit_monitor; + + if (qemuMonitorAddDevice(priv->mon, devstr) < 0) { + ignore_value(qemuDomainDetachExtensionDevice(priv->mon, &rng->info)); goto exit_monitor; + } if (qemuDomainObjExitMonitor(driver, vm) < 0) { releaseaddr = false; @@ -2816,8 +2914,16 @@ qemuDomainAttachSCSIVHostDevice(virQEMUDriverPtr driver, qemuDomainObjEnterMonitor(driver, vm); - ret = qemuMonitorAddDeviceWithFd(priv->mon, devstr, vhostfd, vhostfdName); + if ((ret = qemuDomainAttachExtensionDevice(priv->mon, hostdev->info)) < 0) + goto exit_monitor; + + if ((ret = qemuMonitorAddDeviceWithFd(priv->mon, devstr, vhostfd, + vhostfdName)) < 0) { + ignore_value(qemuDomainDetachExtensionDevice(priv->mon, hostdev->info)); + goto exit_monitor; + } + exit_monitor: if (qemuDomainObjExitMonitor(driver, vm) < 0 || ret < 0) goto audit; @@ -3062,9 +3168,14 @@ qemuDomainAttachShmemDevice(virQEMUDriverPtr driver, release_backing = true; - if (qemuMonitorAddDevice(priv->mon, shmstr) < 0) + if (qemuDomainAttachExtensionDevice(priv->mon, &shmem->info) < 0) goto exit_monitor; + if (qemuMonitorAddDevice(priv->mon, shmstr) < 0) { + ignore_value(qemuDomainDetachExtensionDevice(priv->mon, &shmem->info)); + goto exit_monitor; + } + if (qemuDomainObjExitMonitor(driver, vm) < 0) { release_address = false; goto cleanup; @@ -3236,8 +3347,17 @@ qemuDomainAttachInputDevice(virQEMUDriverPtr driver, goto cleanup; qemuDomainObjEnterMonitor(driver, vm); - if (qemuMonitorAddDevice(priv->mon, devstr) < 0) + + if (input->bus == VIR_DOMAIN_INPUT_BUS_VIRTIO) { + if (qemuDomainAttachExtensionDevice(priv->mon, &input->info) < 0) + goto exit_monitor; + } + + if (qemuMonitorAddDevice(priv->mon, devstr) < 0) { + if (input->bus == VIR_DOMAIN_INPUT_BUS_VIRTIO) + ignore_value(qemuDomainDetachExtensionDevice(priv->mon, &input->info)); goto exit_monitor; + } if (qemuDomainObjExitMonitor(driver, vm) < 0) { releaseaddr = false; @@ -3315,9 +3435,15 @@ qemuDomainAttachVsockDevice(virQEMUDriverPtr driver, goto cleanup; qemuDomainObjEnterMonitor(driver, vm); - if (qemuMonitorAddDeviceWithFd(priv->mon, devstr, vsockPriv->vhostfd, fdname) < 0) + + if (qemuDomainAttachExtensionDevice(priv->mon, &vsock->info) < 0) goto exit_monitor; + if (qemuMonitorAddDeviceWithFd(priv->mon, devstr, vsockPriv->vhostfd, fdname) < 0) { + ignore_value(qemuDomainDetachExtensionDevice(priv->mon, &vsock->info)); + goto exit_monitor; + } + if (qemuDomainObjExitMonitor(driver, vm) < 0) { releaseaddr = false; goto cleanup; @@ -5286,6 +5412,11 @@ int qemuDomainDetachControllerDevice(virQEMUDriverPtr driver, qemuDomainMarkDeviceForRemoval(vm, &detach->info); qemuDomainObjEnterMonitor(driver, vm); + if (detach->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI && + qemuDomainDetachExtensionDevice(priv->mon, &detach->info)) { + ignore_value(qemuDomainObjExitMonitor(driver, vm)); + goto cleanup; + } if (qemuMonitorDelDevice(priv->mon, detach->info.alias)) { ignore_value(qemuDomainObjExitMonitor(driver, vm)); goto cleanup; -- Yi Min
Update 'Device address' section to describe the 'uid' and 'fid' attributes. Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> Reviewed-by: Andrea Bolognani <abologna@redhat.com> --- docs/formatdomain.html.in | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 0cbf570a13..50881a9ff7 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -3921,7 +3921,14 @@ (<span class="since">since 0.9.7, requires QEMU 0.13</span>). <code>multifunction</code> defaults to 'off', but should be set to 'on' for function 0 of a slot that will - have multiple functions used.<br/> + have multiple functions used. (<span class="since">Since 4.7.0 + </span>), PCI address extensions depending on the architecture + are supported. E.g. for S390 guests, PCI addresses have + additional attributes: <code>uid</code> (a hex value between + 0x1 and 0xffff, inclusive), and <code>fid</code> (a hex value + between 0x00000000 and 0xffffffff, inclusive), which are used + by PCI devices on S390 for User-defined Identifiers and + Function Identifiers.<br/> <span class="since">Since 1.3.5</span>, some hypervisor drivers may accept an <code><address type='pci'/></code> element with no other attributes as an explicit request to -- Yi Min
Signed-off-by: Yi Min Zhao <zyimin@linux.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Reviewed-by: Stefan Zimmermann <stzi@linux.ibm.com> Reviewed-by: Ján Tomko <jtomko@redhat.com> --- docs/news.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/news.xml b/docs/news.xml index 2b6d08dc02..a3f5afba11 100644 --- a/docs/news.xml +++ b/docs/news.xml @@ -61,6 +61,16 @@ riscv32 and riscv64 guest architectures are now supported. </description> </change> + <change> + <summary> + qemu: Added support for PCI device passthrough on S390 + </summary> + <description> + PCI addresses can now include the new uid (user-defined identifier) + and fid (PCI function identifier) attributes, which make the + corresponding devices usable by S390 guests. + </description> + </change> </section> <section title="Improvements"> <change> -- Yi Min
Hi,
This series was run against 'syntax-check' test by patchew.org, which failed, please find the details below:
Type: series
Message-id: 20180827054813.68439-1-zyimin@linux.ibm.com
Subject: [libvirt] [PATCH v4 00/12] PCI passthrough support on s390
=== TEST SCRIPT BEGIN ===
#!/bin/bash
# Testing script will be invoked under the git checkout with
# HEAD pointing to a commit that has the patches applied on top of "base"
# branch
time bash -c './autogen.sh && make syntax-check'
=== TEST SCRIPT END ===
Updating bcb55ab053bc79561b55d0394490f4b64e0f2d01
>From https://github.com/patchew-project/libvirt
* [new tag] patchew/20180827054813.68439-1-zyimin@linux.ibm.com -> patchew/20180827054813.68439-1-zyimin@linux.ibm.com
Switched to a new branch 'test'
fdb4f1fcde news: Update news for PCI address extension attributes
82c22fc18d docs: Add 'uid' and 'fid' information
dab44ebae7 qemu: Add hotpluging support for PCI devices on S390 guests
9eae47f2ea qemu: Generate and use zPCI device in QEMU command line
0e2b913a52 conf: Allocate/release 'uid' and 'fid' in PCI address
7934559e87 conf: Introduce parser, formatter for uid and fid
b40bca6c8b conf: Introduce address caching for PCI extensions
cb2e1e3aa8 qemu: Auto add pci-root for s390/s390x guests
887f2c9750 qemu: Enable PCI multi bus for S390 guests
8a10535299 conf: Introduce a new PCI address extension flag
5b809e3f52 qemu: Introduce zPCI capability
271099959e conf: Add definitions for 'uid' and 'fid' PCI address attributes
=== OUTPUT BEGIN ===
Updating submodules...
Submodule 'gnulib' (https://git.savannah.gnu.org/git/gnulib.git/) registered for path '.gnulib'
Submodule 'keycodemapdb' (https://gitlab.com/keycodemap/keycodemapdb.git) registered for path 'src/keycodemapdb'
Cloning into '/var/tmp/patchew-tester-tmp-rvz3l73s/src/.gnulib'...
Cloning into '/var/tmp/patchew-tester-tmp-rvz3l73s/src/src/keycodemapdb'...
Submodule path '.gnulib': checked out '68df637b5f1b5c10370f6981d2a43a5cf74368df'
Submodule path 'src/keycodemapdb': checked out '16e5b0787687d8904dad2c026107409eb9bfcb95'
Running bootstrap...
./bootstrap: Bootstrapping from checked-out libvirt sources...
./bootstrap: consider installing git-merge-changelog from gnulib
./bootstrap: getting gnulib files...
running: libtoolize --install --copy
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'build-aux'.
libtoolize: copying file 'build-aux/config.guess'
libtoolize: copying file 'build-aux/config.sub'
libtoolize: copying file 'build-aux/install-sh'
libtoolize: copying file 'build-aux/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
./bootstrap: .gnulib/gnulib-tool --no-changelog --aux-dir=build-aux --doc-base=doc --lib=libgnu --m4-base=m4/ --source-base=gnulib/lib/ --tests-base=gnulib/tests --local-dir=gnulib/local --lgpl=2 --with-tests --makefile-name=gnulib.mk --avoid=pt_chown --avoid=lock-tests --libtool --import ...
Module list with included dependencies (indented):
absolute-header
accept
accept-tests
alloca
alloca-opt
alloca-opt-tests
allocator
areadlink
areadlink-tests
arpa_inet
arpa_inet-tests
assure
autobuild
base64
base64-tests
binary-io
binary-io-tests
bind
bind-tests
bitrotate
bitrotate-tests
btowc
btowc-tests
builtin-expect
byteswap
byteswap-tests
c-ctype
c-ctype-tests
c-strcase
c-strcase-tests
c-strcasestr
c-strcasestr-tests
calloc-posix
canonicalize-lgpl
canonicalize-lgpl-tests
careadlinkat
chown
chown-tests
clock-time
cloexec
cloexec-tests
close
close-tests
configmake
connect
connect-tests
count-leading-zeros
count-leading-zeros-tests
count-one-bits
count-one-bits-tests
ctype
ctype-tests
dirname-lgpl
dosname
double-slash-root
dup
dup-tests
dup2
dup2-tests
environ
environ-tests
errno
errno-tests
error
execinfo
exitfail
extensions
extern-inline
fatal-signal
fclose
fclose-tests
fcntl
fcntl-h
fcntl-h-tests
fcntl-tests
fd-hook
fdatasync
fdatasync-tests
fdopen
fdopen-tests
fflush
fflush-tests
ffs
ffs-tests
ffsl
ffsl-tests
fgetc-tests
filename
flexmember
float
float-tests
fnmatch
fnmatch-tests
fpieee
fpucw
fpurge
fpurge-tests
fputc-tests
fread-tests
freading
freading-tests
fseek
fseek-tests
fseeko
fseeko-tests
fstat
fstat-tests
fsync
fsync-tests
ftell
ftell-tests
ftello
ftello-tests
ftruncate
ftruncate-tests
func
func-tests
fwrite-tests
getaddrinfo
getaddrinfo-tests
getcwd-lgpl
getcwd-lgpl-tests
getdelim
getdelim-tests
getdtablesize
getdtablesize-tests
getgroups
getgroups-tests
gethostname
gethostname-tests
getline
getline-tests
getopt-posix
getopt-posix-tests
getpagesize
getpass
getpeername
getpeername-tests
getprogname
getprogname-tests
getsockname
getsockname-tests
getsockopt
getsockopt-tests
gettext-h
gettimeofday
gettimeofday-tests
getugroups
gitlog-to-changelog
gnumakefile
grantpt
grantpt-tests
hard-locale
havelib
host-cpu-c-abi
hostent
ignore-value
ignore-value-tests
include_next
inet_ntop
inet_ntop-tests
inet_pton
inet_pton-tests
intprops
intprops-tests
inttypes
inttypes-incomplete
inttypes-tests
ioctl
ioctl-tests
isatty
isatty-tests
isblank
isblank-tests
isnand-nolibm
isnand-nolibm-tests
isnanf-nolibm
isnanf-nolibm-tests
isnanl-nolibm
isnanl-nolibm-tests
langinfo
langinfo-tests
largefile
ldexp
ldexp-tests
limits-h
limits-h-tests
listen
listen-tests
localcharset
localcharset-tests
locale
locale-tests
localeconv
localeconv-tests
localename
localename-tests
localtime-buffer
lock
lseek
lseek-tests
lstat
lstat-tests
maintainer-makefile
malloc-posix
malloca
malloca-tests
manywarnings
math
math-tests
mbrtowc
mbrtowc-tests
mbsinit
mbsinit-tests
mbsrtowcs
mbsrtowcs-tests
mbtowc
memchr
memchr-tests
mgetgroups
mkdtemp
mkostemp
mkostemps
mktempd
mktime
mktime-internal
msvc-inval
msvc-nothrow
multiarch
nanosleep
nanosleep-tests
net_if
net_if-tests
netdb
netdb-tests
netinet_in
netinet_in-tests
nl_langinfo
nl_langinfo-tests
nocrash
nonblocking
nonblocking-pipe-tests
nonblocking-socket-tests
nonblocking-tests
open
open-tests
openpty
openpty-tests
passfd
passfd-tests
pathmax
pathmax-tests
perror
perror-tests
physmem
pipe-posix
pipe-posix-tests
pipe2
pipe2-tests
poll
poll-h
poll-h-tests
poll-tests
posix-shell
posix_openpt
posix_openpt-tests
posix_spawn-internal
posix_spawn_file_actions_addclose
posix_spawn_file_actions_addclose-tests
posix_spawn_file_actions_adddup2
posix_spawn_file_actions_adddup2-tests
posix_spawn_file_actions_addopen
posix_spawn_file_actions_addopen-tests
posix_spawn_file_actions_destroy
posix_spawn_file_actions_init
posix_spawnattr_destroy
posix_spawnattr_init
posix_spawnattr_setflags
posix_spawnattr_setsigmask
posix_spawnp
posix_spawnp-tests
pthread
pthread_sigmask
pthread_sigmask-tests
ptsname
ptsname-tests
ptsname_r
ptsname_r-tests
pty
pty-tests
putenv
raise
raise-tests
rawmemchr
rawmemchr-tests
read
read-tests
readlink
readlink-tests
realloc-posix
recv
recv-tests
regex
regex-tests
same-inode
sched
sched-tests
secure_getenv
select
select-tests
send
send-tests
servent
setenv
setenv-tests
setlocale
setlocale-tests
setsockopt
setsockopt-tests
sigaction
sigaction-tests
signal-h
signal-h-tests
signbit
signbit-tests
sigpipe
sigpipe-tests
sigprocmask
sigprocmask-tests
size_max
sleep
sleep-tests
snippet/_Noreturn
snippet/arg-nonnull
snippet/c++defs
snippet/unused-parameter
snippet/warn-on-use
snprintf
snprintf-tests
socket
socketlib
sockets
sockets-tests
socklen
spawn
spawn-tests
ssize_t
stat
stat-tests
stat-time
stat-time-tests
stdalign
stdalign-tests
stdarg
stdbool
stdbool-tests
stddef
stddef-tests
stdint
stdint-tests
stdio
stdio-tests
stdlib
stdlib-tests
stpcpy
strcase
strchrnul
strchrnul-tests
strdup-posix
streq
strerror
strerror-override
strerror-tests
strerror_r-posix
strerror_r-posix-tests
string
string-tests
strings
strings-tests
strndup
strnlen
strnlen-tests
strnlen1
strptime
strsep
strtok_r
symlink
symlink-tests
sys_ioctl
sys_ioctl-tests
sys_select
sys_select-tests
sys_socket
sys_socket-tests
sys_stat
sys_stat-tests
sys_time
sys_time-tests
sys_types
sys_types-tests
sys_uio
sys_uio-tests
sys_utsname
sys_utsname-tests
sys_wait
sys_wait-tests
tempname
termios
termios-tests
test-framework-sh
test-framework-sh-tests
thread
thread-tests
threadlib
time
time-tests
time_r
timegm
ttyname_r
ttyname_r-tests
uname
uname-tests
unistd
unistd-tests
unlockpt
unlockpt-tests
unsetenv
unsetenv-tests
useless-if-before-free
usleep
usleep-tests
vasnprintf
vasnprintf-tests
vasprintf
vasprintf-tests
vc-list-files
vc-list-files-tests
verify
verify-tests
vsnprintf
vsnprintf-tests
wait-process
waitpid
warnings
wchar
wchar-tests
wcrtomb
wcrtomb-tests
wctob
wctomb
wctype-h
wctype-h-tests
write
write-tests
xalloc
xalloc-die
xalloc-die-tests
xalloc-oversized
xsize
Notice from module vasprintf:
If you are using GNU gettext version 0.16.1 or older, add the following options
to XGETTEXT_OPTIONS in your po/Makevars:
--flag=asprintf:2:c-format --flag=vasprintf:2:c-format
File list:
build-aux/config.rpath
build-aux/gitlog-to-changelog
build-aux/mktempd
build-aux/useless-if-before-free
build-aux/vc-list-files
lib/_Noreturn.h
lib/accept.c
lib/alloca.c
lib/alloca.in.h
lib/allocator.c
lib/allocator.h
lib/areadlink.c
lib/areadlink.h
lib/arg-nonnull.h
lib/arpa_inet.in.h
lib/asnprintf.c
lib/asprintf.c
lib/assure.h
lib/base64.c
lib/base64.h
lib/basename-lgpl.c
lib/binary-io.c
lib/binary-io.h
lib/bind.c
lib/bitrotate.c
lib/bitrotate.h
lib/btowc.c
lib/byteswap.in.h
lib/c++defs.h
lib/c-ctype.c
lib/c-ctype.h
lib/c-strcase.h
lib/c-strcasecmp.c
lib/c-strcasestr.c
lib/c-strcasestr.h
lib/c-strncasecmp.c
lib/calloc.c
lib/canonicalize-lgpl.c
lib/careadlinkat.c
lib/careadlinkat.h
lib/chown.c
lib/cloexec.c
lib/cloexec.h
lib/close.c
lib/connect.c
lib/count-leading-zeros.c
lib/count-leading-zeros.h
lib/count-one-bits.c
lib/count-one-bits.h
lib/dirname-lgpl.c
lib/dirname.h
lib/dosname.h
lib/dup2.c
lib/errno.in.h
lib/execinfo.c
lib/execinfo.in.h
lib/fchown-stub.c
lib/fclose.c
lib/fcntl.c
lib/fcntl.in.h
lib/fd-hook.c
lib/fd-hook.h
lib/fdatasync.c
lib/fflush.c
lib/ffs.c
lib/ffsl.c
lib/ffsl.h
lib/filename.h
lib/flexmember.h
lib/float+.h
lib/float.c
lib/float.in.h
lib/fnmatch.c
lib/fnmatch.in.h
lib/fnmatch_loop.c
lib/fpurge.c
lib/freading.c
lib/freading.h
lib/fseek.c
lib/fseeko.c
lib/fstat.c
lib/fsync.c
lib/ftell.c
lib/ftello.c
lib/gai_strerror.c
lib/getaddrinfo.c
lib/getcwd-lgpl.c
lib/getdelim.c
lib/getdtablesize.c
lib/getgroups.c
lib/gethostname.c
lib/getline.c
lib/getopt-cdefs.in.h
lib/getopt-core.h
lib/getopt-ext.h
lib/getopt-pfx-core.h
lib/getopt-pfx-ext.h
lib/getopt.c
lib/getopt.in.h
lib/getopt1.c
lib/getopt_int.h
lib/getpass.c
lib/getpass.h
lib/getpeername.c
lib/getsockname.c
lib/gettext.h
lib/gettimeofday.c
lib/getugroups.c
lib/getugroups.h
lib/glthread/lock.c
lib/glthread/lock.h
lib/glthread/threadlib.c
lib/hard-locale.c
lib/hard-locale.h
lib/ignore-value.h
lib/inet_ntop.c
lib/inet_pton.c
lib/intprops.h
lib/ioctl.c
lib/isatty.c
lib/itold.c
lib/langinfo.in.h
lib/limits.in.h
lib/listen.c
lib/localcharset.c
lib/localcharset.h
lib/locale.in.h
lib/localeconv.c
lib/localtime-buffer.c
lib/localtime-buffer.h
lib/lseek.c
lib/lstat.c
lib/malloc.c
lib/malloca.c
lib/malloca.h
lib/mbrtowc.c
lib/mbsinit.c
lib/mbsrtowcs-impl.h
lib/mbsrtowcs-state.c
lib/mbsrtowcs.c
lib/mbtowc-impl.h
lib/mbtowc.c
lib/memchr.c
lib/memchr.valgrind
lib/mgetgroups.c
lib/mgetgroups.h
lib/mkdtemp.c
lib/mkostemp.c
lib/mkostemps.c
lib/mktime-internal.h
lib/mktime.c
lib/msvc-inval.c
lib/msvc-inval.h
lib/msvc-nothrow.c
lib/msvc-nothrow.h
lib/net_if.in.h
lib/netdb.in.h
lib/netinet_in.in.h
lib/nl_langinfo.c
lib/nonblocking.c
lib/nonblocking.h
lib/open.c
lib/openpty.c
lib/passfd.c
lib/passfd.h
lib/pathmax.h
lib/perror.c
lib/physmem.c
lib/physmem.h
lib/pipe.c
lib/pipe2.c
lib/poll.c
lib/poll.in.h
lib/posix_openpt.c
lib/printf-args.c
lib/printf-args.h
lib/printf-parse.c
lib/printf-parse.h
lib/pthread.c
lib/pthread.in.h
lib/pthread_sigmask.c
lib/pty.in.h
lib/raise.c
lib/rawmemchr.c
lib/rawmemchr.valgrind
lib/readlink.c
lib/realloc.c
lib/recv.c
lib/regcomp.c
lib/regex.c
lib/regex.h
lib/regex_internal.c
lib/regex_internal.h
lib/regexec.c
lib/sched.in.h
lib/secure_getenv.c
lib/select.c
lib/send.c
lib/setenv.c
lib/setsockopt.c
lib/sig-handler.c
lib/sig-handler.h
lib/sigaction.c
lib/signal.in.h
lib/sigprocmask.c
lib/size_max.h
lib/sleep.c
lib/snprintf.c
lib/socket.c
lib/sockets.c
lib/sockets.h
lib/stat-time.c
lib/stat-time.h
lib/stat-w32.c
lib/stat-w32.h
lib/stat.c
lib/stdalign.in.h
lib/stdarg.in.h
lib/stdbool.in.h
lib/stddef.in.h
lib/stdint.in.h
lib/stdio-impl.h
lib/stdio-read.c
lib/stdio-write.c
lib/stdio.in.h
lib/stdlib.in.h
lib/stpcpy.c
lib/str-two-way.h
lib/strcasecmp.c
lib/strchrnul.c
lib/strchrnul.valgrind
lib/strdup.c
lib/streq.h
lib/strerror-override.c
lib/strerror-override.h
lib/strerror.c
lib/strerror_r.c
lib/string.in.h
lib/strings.in.h
lib/stripslash.c
lib/strncasecmp.c
lib/strndup.c
lib/strnlen.c
lib/strnlen1.c
lib/strnlen1.h
lib/strptime.c
lib/strsep.c
lib/strtok_r.c
lib/sys_ioctl.in.h
lib/sys_select.in.h
lib/sys_socket.c
lib/sys_socket.in.h
lib/sys_stat.in.h
lib/sys_time.in.h
lib/sys_types.in.h
lib/sys_uio.in.h
lib/sys_utsname.in.h
lib/sys_wait.in.h
lib/tempname.c
lib/tempname.h
lib/termios.in.h
lib/time.in.h
lib/time_r.c
lib/timegm.c
lib/ttyname_r.c
lib/uname.c
lib/unistd.c
lib/unistd.in.h
lib/unsetenv.c
lib/unused-parameter.h
lib/usleep.c
lib/vasnprintf.c
lib/vasnprintf.h
lib/vasprintf.c
lib/verify.h
lib/vsnprintf.c
lib/w32sock.h
lib/waitpid.c
lib/warn-on-use.h
lib/wchar.in.h
lib/wcrtomb.c
lib/wctype-h.c
lib/wctype.in.h
lib/xalloc-oversized.h
lib/xsize.c
lib/xsize.h
m4/00gnulib.m4
m4/absolute-header.m4
m4/alloca.m4
m4/arpa_inet_h.m4
m4/asm-underscore.m4
m4/autobuild.m4
m4/base64.m4
m4/btowc.m4
m4/builtin-expect.m4
m4/byteswap.m4
m4/calloc.m4
m4/canonicalize.m4
m4/chown.m4
m4/clock_time.m4
m4/close.m4
m4/codeset.m4
m4/configmake.m4
m4/count-leading-zeros.m4
m4/count-one-bits.m4
m4/ctype.m4
m4/dirname.m4
m4/double-slash-root.m4
m4/dup.m4
m4/dup2.m4
m4/eealloc.m4
m4/environ.m4
m4/errno_h.m4
m4/error.m4
m4/execinfo.m4
m4/exponentd.m4
m4/exponentf.m4
m4/exponentl.m4
m4/extensions.m4
m4/extern-inline.m4
m4/fatal-signal.m4
m4/fclose.m4
m4/fcntl-o.m4
m4/fcntl.m4
m4/fcntl_h.m4
m4/fdatasync.m4
m4/fdopen.m4
m4/fflush.m4
m4/ffs.m4
m4/ffsl.m4
m4/flexmember.m4
m4/float_h.m4
m4/fnmatch.m4
m4/fpieee.m4
m4/fpurge.m4
m4/freading.m4
m4/fseek.m4
m4/fseeko.m4
m4/fstat.m4
m4/fsync.m4
m4/ftell.m4
m4/ftello.m4
m4/ftruncate.m4
m4/func.m4
m4/getaddrinfo.m4
m4/getcwd.m4
m4/getdelim.m4
m4/getdtablesize.m4
m4/getgroups.m4
m4/gethostname.m4
m4/getline.m4
m4/getopt.m4
m4/getpagesize.m4
m4/getpass.m4
m4/getprogname.m4
m4/gettimeofday.m4
m4/getugroups.m4
m4/glibc21.m4
m4/gnulib-common.m4
m4/grantpt.m4
m4/host-cpu-c-abi.m4
m4/hostent.m4
m4/include_next.m4
m4/inet_ntop.m4
m4/inet_pton.m4
m4/intlmacosx.m4
m4/intmax_t.m4
m4/inttypes-pri.m4
m4/inttypes.m4
m4/inttypes_h.m4
m4/ioctl.m4
m4/isatty.m4
m4/isblank.m4
m4/isnand.m4
m4/isnanf.m4
m4/isnanl.m4
m4/langinfo_h.m4
m4/largefile.m4
m4/lcmessage.m4
m4/ldexp.m4
m4/lib-ld.m4
m4/lib-link.m4
m4/lib-prefix.m4
m4/limits-h.m4
m4/localcharset.m4
m4/locale-fr.m4
m4/locale-ja.m4
m4/locale-tr.m4
m4/locale-zh.m4
m4/locale_h.m4
m4/localeconv.m4
m4/localename.m4
m4/localtime-buffer.m4
m4/lock.m4
m4/longlong.m4
m4/lseek.m4
m4/lstat.m4
m4/malloc.m4
m4/malloca.m4
m4/manywarnings-c++.m4
m4/manywarnings.m4
m4/math_h.m4
m4/mbrtowc.m4
m4/mbsinit.m4
m4/mbsrtowcs.m4
m4/mbstate_t.m4
m4/mbtowc.m4
m4/memchr.m4
m4/mgetgroups.m4
m4/mkdtemp.m4
m4/mkostemp.m4
m4/mkostemps.m4
m4/mktime.m4
m4/mmap-anon.m4
m4/mode_t.m4
m4/msvc-inval.m4
m4/msvc-nothrow.m4
m4/multiarch.m4
m4/nanosleep.m4
m4/net_if_h.m4
m4/netdb_h.m4
m4/netinet_in_h.m4
m4/nl_langinfo.m4
m4/nocrash.m4
m4/nonblocking.m4
m4/off_t.m4
m4/onceonly.m4
m4/open-cloexec.m4
m4/open.m4
m4/passfd.m4
m4/pathmax.m4
m4/perror.m4
m4/physmem.m4
m4/pipe.m4
m4/pipe2.m4
m4/poll.m4
m4/poll_h.m4
m4/posix-shell.m4
m4/posix_openpt.m4
m4/posix_spawn.m4
m4/printf.m4
m4/pthread.m4
m4/pthread_rwlock_rdlock.m4
m4/pthread_sigmask.m4
m4/ptsname.m4
m4/ptsname_r.m4
m4/pty.m4
m4/pty_h.m4
m4/putenv.m4
m4/raise.m4
m4/rawmemchr.m4
m4/read.m4
m4/readlink.m4
m4/realloc.m4
m4/regex.m4
m4/sched_h.m4
m4/secure_getenv.m4
m4/select.m4
m4/servent.m4
m4/setenv.m4
m4/setlocale.m4
m4/sig_atomic_t.m4
m4/sigaction.m4
m4/signal_h.m4
m4/signalblocking.m4
m4/signbit.m4
m4/sigpipe.m4
m4/size_max.m4
m4/sleep.m4
m4/snprintf.m4
m4/socketlib.m4
m4/sockets.m4
m4/socklen.m4
m4/sockpfaf.m4
m4/spawn_h.m4
m4/ssize_t.m4
m4/stat-time.m4
m4/stat.m4
m4/stdalign.m4
m4/stdarg.m4
m4/stdbool.m4
m4/stddef_h.m4
m4/stdint.m4
m4/stdint_h.m4
m4/stdio_h.m4
m4/stdlib_h.m4
m4/stpcpy.m4
m4/strcase.m4
m4/strchrnul.m4
m4/strdup.m4
m4/strerror.m4
m4/strerror_r.m4
m4/string_h.m4
m4/strings_h.m4
m4/strndup.m4
m4/strnlen.m4
m4/strptime.m4
m4/strsep.m4
m4/strtok_r.m4
m4/symlink.m4
m4/sys_ioctl_h.m4
m4/sys_select_h.m4
m4/sys_socket_h.m4
m4/sys_stat_h.m4
m4/sys_time_h.m4
m4/sys_types_h.m4
m4/sys_uio_h.m4
m4/sys_utsname_h.m4
m4/sys_wait_h.m4
m4/tempname.m4
m4/termios_h.m4
m4/thread.m4
m4/threadlib.m4
m4/time_h.m4
m4/time_r.m4
m4/timegm.m4
m4/tm_gmtoff.m4
m4/ttyname_r.m4
m4/uname.m4
m4/ungetc.m4
m4/unistd_h.m4
m4/unlockpt.m4
m4/usleep.m4
m4/vasnprintf.m4
m4/vasprintf.m4
m4/vsnprintf.m4
m4/wait-process.m4
m4/waitpid.m4
m4/warn-on-use.m4
m4/warnings.m4
m4/wchar_h.m4
m4/wchar_t.m4
m4/wcrtomb.m4
m4/wctob.m4
m4/wctomb.m4
m4/wctype_h.m4
m4/wint_t.m4
m4/write.m4
m4/xalloc.m4
m4/xsize.m4
tests/infinity.h
tests/init.sh
tests/macros.h
tests/minus-zero.h
tests/nan.h
tests/nap.h
tests/null-ptr.h
tests/randomd.c
tests/signature.h
tests/socket-client.h
tests/socket-server.h
tests/test-accept.c
tests/test-alloca-opt.c
tests/test-areadlink.c
tests/test-areadlink.h
tests/test-arpa_inet.c
tests/test-base64.c
tests/test-binary-io.c
tests/test-binary-io.sh
tests/test-bind.c
tests/test-bitrotate.c
tests/test-btowc.c
tests/test-btowc1.sh
tests/test-btowc2.sh
tests/test-byteswap.c
tests/test-c-ctype.c
tests/test-c-strcase.sh
tests/test-c-strcasecmp.c
tests/test-c-strcasestr.c
tests/test-c-strncasecmp.c
tests/test-canonicalize-lgpl.c
tests/test-chown.c
tests/test-chown.h
tests/test-cloexec.c
tests/test-close.c
tests/test-connect.c
tests/test-count-leading-zeros.c
tests/test-count-one-bits.c
tests/test-ctype.c
tests/test-dup.c
tests/test-dup2.c
tests/test-environ.c
tests/test-errno.c
tests/test-fclose.c
tests/test-fcntl-h.c
tests/test-fcntl.c
tests/test-fdatasync.c
tests/test-fdopen.c
tests/test-fflush.c
tests/test-fflush2.c
tests/test-fflush2.sh
tests/test-ffs.c
tests/test-ffsl.c
tests/test-fgetc.c
tests/test-float.c
tests/test-fnmatch.c
tests/test-fpurge.c
tests/test-fputc.c
tests/test-fread.c
tests/test-freading.c
tests/test-fseek.c
tests/test-fseek.sh
tests/test-fseek2.sh
tests/test-fseeko.c
tests/test-fseeko.sh
tests/test-fseeko2.sh
tests/test-fseeko3.c
tests/test-fseeko3.sh
tests/test-fseeko4.c
tests/test-fseeko4.sh
tests/test-fstat.c
tests/test-fsync.c
tests/test-ftell.c
tests/test-ftell.sh
tests/test-ftell2.sh
tests/test-ftell3.c
tests/test-ftello.c
tests/test-ftello.sh
tests/test-ftello2.sh
tests/test-ftello3.c
tests/test-ftello4.c
tests/test-ftello4.sh
tests/test-ftruncate.c
tests/test-ftruncate.sh
tests/test-func.c
tests/test-fwrite.c
tests/test-getaddrinfo.c
tests/test-getcwd-lgpl.c
tests/test-getdelim.c
tests/test-getdtablesize.c
tests/test-getgroups.c
tests/test-gethostname.c
tests/test-getline.c
tests/test-getopt-main.h
tests/test-getopt-posix.c
tests/test-getopt.h
tests/test-getpeername.c
tests/test-getprogname.c
tests/test-getsockname.c
tests/test-getsockopt.c
tests/test-gettimeofday.c
tests/test-grantpt.c
tests/test-ignore-value.c
tests/test-inet_ntop.c
tests/test-inet_pton.c
tests/test-init.sh
tests/test-intprops.c
tests/test-inttypes.c
tests/test-ioctl.c
tests/test-isatty.c
tests/test-isblank.c
tests/test-isnand-nolibm.c
tests/test-isnand.h
tests/test-isnanf-nolibm.c
tests/test-isnanf.h
tests/test-isnanl-nolibm.c
tests/test-isnanl.h
tests/test-langinfo.c
tests/test-ldexp.c
tests/test-ldexp.h
tests/test-limits-h.c
tests/test-listen.c
tests/test-localcharset.c
tests/test-locale.c
tests/test-localeconv.c
tests/test-localename.c
tests/test-lseek.c
tests/test-lseek.sh
tests/test-lstat.c
tests/test-lstat.h
tests/test-malloca.c
tests/test-math.c
tests/test-mbrtowc-w32-1.sh
tests/test-mbrtowc-w32-2.sh
tests/test-mbrtowc-w32-3.sh
tests/test-mbrtowc-w32-4.sh
tests/test-mbrtowc-w32-5.sh
tests/test-mbrtowc-w32.c
tests/test-mbrtowc.c
tests/test-mbrtowc1.sh
tests/test-mbrtowc2.sh
tests/test-mbrtowc3.sh
tests/test-mbrtowc4.sh
tests/test-mbrtowc5.sh
tests/test-mbsinit.c
tests/test-mbsinit.sh
tests/test-mbsrtowcs.c
tests/test-mbsrtowcs1.sh
tests/test-mbsrtowcs2.sh
tests/test-mbsrtowcs3.sh
tests/test-mbsrtowcs4.sh
tests/test-memchr.c
tests/test-nanosleep.c
tests/test-net_if.c
tests/test-netdb.c
tests/test-netinet_in.c
tests/test-nl_langinfo.c
tests/test-nl_langinfo.sh
tests/test-nonblocking-misc.h
tests/test-nonblocking-pipe-child.c
tests/test-nonblocking-pipe-main.c
tests/test-nonblocking-pipe.h
tests/test-nonblocking-pipe.sh
tests/test-nonblocking-reader.h
tests/test-nonblocking-socket-child.c
tests/test-nonblocking-socket-main.c
tests/test-nonblocking-socket.h
tests/test-nonblocking-socket.sh
tests/test-nonblocking-writer.h
tests/test-nonblocking.c
tests/test-open.c
tests/test-open.h
tests/test-openpty.c
tests/test-passfd.c
tests/test-pathmax.c
tests/test-perror.c
tests/test-perror.sh
tests/test-perror2.c
tests/test-pipe.c
tests/test-pipe2.c
tests/test-poll-h.c
tests/test-poll.c
tests/test-posix_openpt.c
tests/test-posix_spawn1.c
tests/test-posix_spawn1.in.sh
tests/test-posix_spawn2.c
tests/test-posix_spawn2.in.sh
tests/test-posix_spawn_file_actions_addclose.c
tests/test-posix_spawn_file_actions_adddup2.c
tests/test-posix_spawn_file_actions_addopen.c
tests/test-pthread_sigmask1.c
tests/test-pthread_sigmask2.c
tests/test-ptsname.c
tests/test-ptsname_r.c
tests/test-raise.c
tests/test-rawmemchr.c
tests/test-read.c
tests/test-readlink.c
tests/test-readlink.h
tests/test-recv.c
tests/test-regex.c
tests/test-sched.c
tests/test-select-fd.c
tests/test-select-in.sh
tests/test-select-out.sh
tests/test-select-stdin.c
tests/test-select.c
tests/test-select.h
tests/test-send.c
tests/test-setenv.c
tests/test-setlocale1.c
tests/test-setlocale1.sh
tests/test-setlocale2.c
tests/test-setlocale2.sh
tests/test-setsockopt.c
tests/test-sigaction.c
tests/test-signal-h.c
tests/test-signbit.c
tests/test-sigpipe.c
tests/test-sigpipe.sh
tests/test-sigprocmask.c
tests/test-sleep.c
tests/test-snprintf.c
tests/test-sockets.c
tests/test-spawn.c
tests/test-stat-time.c
tests/test-stat.c
tests/test-stat.h
tests/test-stdalign.c
tests/test-stdbool.c
tests/test-stddef.c
tests/test-stdint.c
tests/test-stdio.c
tests/test-stdlib.c
tests/test-strchrnul.c
tests/test-strerror.c
tests/test-strerror_r.c
tests/test-string.c
tests/test-strings.c
tests/test-strnlen.c
tests/test-symlink.c
tests/test-symlink.h
tests/test-sys_ioctl.c
tests/test-sys_select.c
tests/test-sys_socket.c
tests/test-sys_stat.c
tests/test-sys_time.c
tests/test-sys_types.c
tests/test-sys_uio.c
tests/test-sys_utsname.c
tests/test-sys_wait.c
tests/test-sys_wait.h
tests/test-termios.c
tests/test-thread_create.c
tests/test-thread_self.c
tests/test-time.c
tests/test-ttyname_r.c
tests/test-uname.c
tests/test-unistd.c
tests/test-unlockpt.c
tests/test-unsetenv.c
tests/test-usleep.c
tests/test-vasnprintf.c
tests/test-vasprintf.c
tests/test-vc-list-files-cvs.sh
tests/test-vc-list-files-git.sh
tests/test-verify-try.c
tests/test-verify.c
tests/test-verify.sh
tests/test-vsnprintf.c
tests/test-wchar.c
tests/test-wcrtomb-w32-1.sh
tests/test-wcrtomb-w32-2.sh
tests/test-wcrtomb-w32-3.sh
tests/test-wcrtomb-w32-4.sh
tests/test-wcrtomb-w32-5.sh
tests/test-wcrtomb-w32.c
tests/test-wcrtomb.c
tests/test-wcrtomb.sh
tests/test-wctype-h.c
tests/test-write.c
tests/test-xalloc-die.c
tests/test-xalloc-die.sh
tests/zerosize-ptr.h
lib/_Noreturn.h -> tests/_Noreturn.h
lib/arg-nonnull.h -> tests/arg-nonnull.h
lib/c++defs.h -> tests/c++defs.h
lib/ctype.in.h -> tests/ctype.in.h
lib/dup.c -> tests/dup.c
lib/error.c -> tests/error.c
lib/error.h -> tests/error.h
lib/exitfail.c -> tests/exitfail.c
lib/exitfail.h -> tests/exitfail.h
lib/fatal-signal.c -> tests/fatal-signal.c
lib/fatal-signal.h -> tests/fatal-signal.h
lib/fdopen.c -> tests/fdopen.c
lib/float+.h -> tests/float+.h
lib/fpucw.h -> tests/fpucw.h
lib/ftruncate.c -> tests/ftruncate.c
lib/getpagesize.c -> tests/getpagesize.c
lib/getprogname.c -> tests/getprogname.c
lib/getprogname.h -> tests/getprogname.h
lib/getsockopt.c -> tests/getsockopt.c
lib/glthread/thread.c -> tests/glthread/thread.c
lib/glthread/thread.h -> tests/glthread/thread.h
lib/grantpt.c -> tests/grantpt.c
lib/inttypes.in.h -> tests/inttypes.in.h
lib/isblank.c -> tests/isblank.c
lib/isnan.c -> tests/isnan.c
lib/isnand-nolibm.h -> tests/isnand-nolibm.h
lib/isnand.c -> tests/isnand.c
lib/isnanf-nolibm.h -> tests/isnanf-nolibm.h
lib/isnanf.c -> tests/isnanf.c
lib/isnanl-nolibm.h -> tests/isnanl-nolibm.h
lib/isnanl.c -> tests/isnanl.c
lib/localename.c -> tests/localename.c
lib/localename.h -> tests/localename.h
lib/math.c -> tests/math.c
lib/math.in.h -> tests/math.in.h
lib/nanosleep.c -> tests/nanosleep.c
lib/ptsname.c -> tests/ptsname.c
lib/ptsname_r.c -> tests/ptsname_r.c
lib/pty-private.h -> tests/pty-private.h
lib/putenv.c -> tests/putenv.c
lib/read.c -> tests/read.c
lib/same-inode.h -> tests/same-inode.h
lib/setlocale.c -> tests/setlocale.c
lib/signbitd.c -> tests/signbitd.c
lib/signbitf.c -> tests/signbitf.c
lib/signbitl.c -> tests/signbitl.c
lib/spawn.in.h -> tests/spawn.in.h
lib/spawn_faction_addclose.c -> tests/spawn_faction_addclose.c
lib/spawn_faction_adddup2.c -> tests/spawn_faction_adddup2.c
lib/spawn_faction_addopen.c -> tests/spawn_faction_addopen.c
lib/spawn_faction_destroy.c -> tests/spawn_faction_destroy.c
lib/spawn_faction_init.c -> tests/spawn_faction_init.c
lib/spawn_int.h -> tests/spawn_int.h
lib/spawnattr_destroy.c -> tests/spawnattr_destroy.c
lib/spawnattr_init.c -> tests/spawnattr_init.c
lib/spawnattr_setflags.c -> tests/spawnattr_setflags.c
lib/spawnattr_setsigmask.c -> tests/spawnattr_setsigmask.c
lib/spawni.c -> tests/spawni.c
lib/spawnp.c -> tests/spawnp.c
lib/symlink.c -> tests/symlink.c
lib/unlockpt.c -> tests/unlockpt.c
lib/unused-parameter.h -> tests/unused-parameter.h
lib/w32sock.h -> tests/w32sock.h
lib/wait-process.c -> tests/wait-process.c
lib/wait-process.h -> tests/wait-process.h
lib/warn-on-use.h -> tests/warn-on-use.h
lib/wctob.c -> tests/wctob.c
lib/wctomb-impl.h -> tests/wctomb-impl.h
lib/wctomb.c -> tests/wctomb.c
lib/write.c -> tests/write.c
lib/xalloc-die.c -> tests/xalloc-die.c
lib/xalloc.h -> tests/xalloc.h
lib/xmalloc.c -> tests/xmalloc.c
top/GNUmakefile
top/maint.mk
Creating directory ./gnulib/lib/glthread
Creating directory ./gnulib/tests/glthread
Copying file GNUmakefile
Copying file build-aux/config.rpath
Copying file build-aux/gitlog-to-changelog
Copying file build-aux/mktempd
Copying file build-aux/useless-if-before-free
Copying file build-aux/vc-list-files
Copying file gnulib/lib/_Noreturn.h
Copying file gnulib/lib/accept.c
Copying file gnulib/lib/alloca.c
Copying file gnulib/lib/alloca.in.h
Copying file gnulib/lib/allocator.c
Copying file gnulib/lib/allocator.h
Copying file gnulib/lib/areadlink.c
Copying file gnulib/lib/areadlink.h
Copying file gnulib/lib/arg-nonnull.h
Copying file gnulib/lib/arpa_inet.in.h
Copying file gnulib/lib/asnprintf.c
Copying file gnulib/lib/asprintf.c
Copying file gnulib/lib/assure.h
Copying file gnulib/lib/base64.c
Copying file gnulib/lib/base64.h
Copying file gnulib/lib/basename-lgpl.c
Copying file gnulib/lib/binary-io.c
Copying file gnulib/lib/binary-io.h
Copying file gnulib/lib/bind.c
Copying file gnulib/lib/bitrotate.c
Copying file gnulib/lib/bitrotate.h
Copying file gnulib/lib/btowc.c
Copying file gnulib/lib/byteswap.in.h
Copying file gnulib/lib/c++defs.h
Copying file gnulib/lib/c-ctype.c
Copying file gnulib/lib/c-ctype.h
Copying file gnulib/lib/c-strcase.h
Copying file gnulib/lib/c-strcasecmp.c
Copying file gnulib/lib/c-strcasestr.c
Copying file gnulib/lib/c-strcasestr.h
Copying file gnulib/lib/c-strncasecmp.c
Copying file gnulib/lib/calloc.c
Copying file gnulib/lib/canonicalize-lgpl.c
Copying file gnulib/lib/careadlinkat.c
Copying file gnulib/lib/careadlinkat.h
Copying file gnulib/lib/chown.c
Copying file gnulib/lib/cloexec.c
Copying file gnulib/lib/cloexec.h
Copying file gnulib/lib/close.c
Copying file gnulib/lib/connect.c
Copying file gnulib/lib/count-leading-zeros.c
Copying file gnulib/lib/count-leading-zeros.h
Copying file gnulib/lib/count-one-bits.c
Copying file gnulib/lib/count-one-bits.h
Copying file gnulib/lib/dirname-lgpl.c
Copying file gnulib/lib/dirname.h
Copying file gnulib/lib/dosname.h
Copying file gnulib/lib/dup2.c
Copying file gnulib/lib/errno.in.h
Copying file gnulib/lib/execinfo.c
Copying file gnulib/lib/execinfo.in.h
Copying file gnulib/lib/fchown-stub.c
Copying file gnulib/lib/fclose.c
Copying file gnulib/lib/fcntl.c
Copying file gnulib/lib/fcntl.in.h
Copying file gnulib/lib/fd-hook.c
Copying file gnulib/lib/fd-hook.h
Copying file gnulib/lib/fdatasync.c
Copying file gnulib/lib/fflush.c
Copying file gnulib/lib/ffs.c
Copying file gnulib/lib/ffsl.c
Copying file gnulib/lib/ffsl.h
Copying file gnulib/lib/filename.h
Copying file gnulib/lib/flexmember.h
Copying file gnulib/lib/float+.h
Copying file gnulib/lib/float.c
Copying file gnulib/lib/float.in.h
Copying file gnulib/lib/fnmatch.c
Copying file gnulib/lib/fnmatch.in.h
Copying file gnulib/lib/fnmatch_loop.c
Copying file gnulib/lib/fpurge.c
Copying file gnulib/lib/freading.c
Copying file gnulib/lib/freading.h
Copying file gnulib/lib/fseek.c
Copying file gnulib/lib/fseeko.c
Copying file gnulib/lib/fstat.c
Copying file gnulib/lib/fsync.c
Copying file gnulib/lib/ftell.c
Copying file gnulib/lib/ftello.c
Copying file gnulib/lib/gai_strerror.c
Copying file gnulib/lib/getaddrinfo.c
Copying file gnulib/lib/getcwd-lgpl.c
Copying file gnulib/lib/getdelim.c
Copying file gnulib/lib/getdtablesize.c
Copying file gnulib/lib/getgroups.c
Copying file gnulib/lib/gethostname.c
Copying file gnulib/lib/getline.c
Copying file gnulib/lib/getopt-cdefs.in.h
Copying file gnulib/lib/getopt-core.h
Copying file gnulib/lib/getopt-ext.h
Copying file gnulib/lib/getopt-pfx-core.h
Copying file gnulib/lib/getopt-pfx-ext.h
Copying file gnulib/lib/getopt.c
Copying file gnulib/lib/getopt.in.h
Copying file gnulib/lib/getopt1.c
Copying file gnulib/lib/getopt_int.h
Copying file gnulib/lib/getpass.c
Copying file gnulib/lib/getpass.h
Copying file gnulib/lib/getpeername.c
Copying file gnulib/lib/getsockname.c
Copying file gnulib/lib/gettext.h
Copying file gnulib/lib/gettimeofday.c
Copying file gnulib/lib/getugroups.c
Copying file gnulib/lib/getugroups.h
Copying file gnulib/lib/glthread/lock.c
Copying file gnulib/lib/glthread/lock.h
Copying file gnulib/lib/glthread/threadlib.c
Copying file gnulib/lib/hard-locale.c
Copying file gnulib/lib/hard-locale.h
Copying file gnulib/lib/ignore-value.h
Copying file gnulib/lib/inet_ntop.c
Copying file gnulib/lib/inet_pton.c
Copying file gnulib/lib/intprops.h
Copying file gnulib/lib/ioctl.c
Copying file gnulib/lib/isatty.c
Copying file gnulib/lib/itold.c
Copying file gnulib/lib/langinfo.in.h
Copying file gnulib/lib/limits.in.h
Copying file gnulib/lib/listen.c
Copying file gnulib/lib/localcharset.c
Copying file gnulib/lib/localcharset.h
Copying file gnulib/lib/locale.in.h
Copying file gnulib/lib/localeconv.c
Copying file gnulib/lib/localtime-buffer.c
Copying file gnulib/lib/localtime-buffer.h
Copying file gnulib/lib/lseek.c
Copying file gnulib/lib/lstat.c
Copying file gnulib/lib/malloc.c
Copying file gnulib/lib/malloca.c
Copying file gnulib/lib/malloca.h
Copying file gnulib/lib/mbrtowc.c
Copying file gnulib/lib/mbsinit.c
Copying file gnulib/lib/mbsrtowcs-impl.h
Copying file gnulib/lib/mbsrtowcs-state.c
Copying file gnulib/lib/mbsrtowcs.c
Copying file gnulib/lib/mbtowc-impl.h
Copying file gnulib/lib/mbtowc.c
Copying file gnulib/lib/memchr.c
Copying file gnulib/lib/memchr.valgrind
Copying file gnulib/lib/mgetgroups.c
Copying file gnulib/lib/mgetgroups.h
Copying file gnulib/lib/mkdtemp.c
Copying file gnulib/lib/mkostemp.c
Copying file gnulib/lib/mkostemps.c
Copying file gnulib/lib/mktime-internal.h
Copying file gnulib/lib/mktime.c
Copying file gnulib/lib/msvc-inval.c
Copying file gnulib/lib/msvc-inval.h
Copying file gnulib/lib/msvc-nothrow.c
Copying file gnulib/lib/msvc-nothrow.h
Copying file gnulib/lib/net_if.in.h
Copying file gnulib/lib/netdb.in.h
Copying file gnulib/lib/netinet_in.in.h
Copying file gnulib/lib/nl_langinfo.c
Copying file gnulib/lib/nonblocking.c
Copying file gnulib/lib/nonblocking.h
Copying file gnulib/lib/open.c
Copying file gnulib/lib/openpty.c
Copying file gnulib/lib/passfd.c
Copying file gnulib/lib/passfd.h
Copying file gnulib/lib/pathmax.h
Copying file gnulib/lib/perror.c
Copying file gnulib/lib/physmem.c
Copying file gnulib/lib/physmem.h
Copying file gnulib/lib/pipe.c
Copying file gnulib/lib/pipe2.c
Copying file gnulib/lib/poll.c
Copying file gnulib/lib/poll.in.h
Copying file gnulib/lib/posix_openpt.c
Copying file gnulib/lib/printf-args.c
Copying file gnulib/lib/printf-args.h
Copying file gnulib/lib/printf-parse.c
Copying file gnulib/lib/printf-parse.h
Copying file gnulib/lib/pthread.c
Copying file gnulib/lib/pthread.in.h
Copying file gnulib/lib/pthread_sigmask.c
Copying file gnulib/lib/pty.in.h
Copying file gnulib/lib/raise.c
Copying file gnulib/lib/rawmemchr.c
Copying file gnulib/lib/rawmemchr.valgrind
Copying file gnulib/lib/readlink.c
Copying file gnulib/lib/realloc.c
Copying file gnulib/lib/recv.c
Copying file gnulib/lib/regcomp.c
Copying file gnulib/lib/regex.c
Copying file gnulib/lib/regex.h
Copying file gnulib/lib/regex_internal.c
Copying file gnulib/lib/regex_internal.h
Copying file gnulib/lib/regexec.c
Copying file gnulib/lib/sched.in.h
Copying file gnulib/lib/secure_getenv.c
Copying file gnulib/lib/select.c
Copying file gnulib/lib/send.c
Copying file gnulib/lib/setenv.c
Copying file gnulib/lib/setsockopt.c
Copying file gnulib/lib/sig-handler.c
Copying file gnulib/lib/sig-handler.h
Copying file gnulib/lib/sigaction.c
Copying file gnulib/lib/signal.in.h
Copying file gnulib/lib/sigprocmask.c
Copying file gnulib/lib/size_max.h
Copying file gnulib/lib/sleep.c
Copying file gnulib/lib/snprintf.c
Copying file gnulib/lib/socket.c
Copying file gnulib/lib/sockets.c
Copying file gnulib/lib/sockets.h
Copying file gnulib/lib/stat-time.c
Copying file gnulib/lib/stat-time.h
Copying file gnulib/lib/stat-w32.c
Copying file gnulib/lib/stat-w32.h
Copying file gnulib/lib/stat.c
Copying file gnulib/lib/stdalign.in.h
Copying file gnulib/lib/stdarg.in.h
Copying file gnulib/lib/stdbool.in.h
Copying file gnulib/lib/stddef.in.h
Copying file gnulib/lib/stdint.in.h
Copying file gnulib/lib/stdio-impl.h
Copying file gnulib/lib/stdio-read.c
Copying file gnulib/lib/stdio-write.c
Copying file gnulib/lib/stdio.in.h
Copying file gnulib/lib/stdlib.in.h
Copying file gnulib/lib/stpcpy.c
Copying file gnulib/lib/str-two-way.h
Copying file gnulib/lib/strcasecmp.c
Copying file gnulib/lib/strchrnul.c
Copying file gnulib/lib/strchrnul.valgrind
Copying file gnulib/lib/strdup.c
Copying file gnulib/lib/streq.h
Copying file gnulib/lib/strerror-override.c
Copying file gnulib/lib/strerror-override.h
Copying file gnulib/lib/strerror.c
Copying file gnulib/lib/strerror_r.c
Copying file gnulib/lib/string.in.h
Copying file gnulib/lib/strings.in.h
Copying file gnulib/lib/stripslash.c
Copying file gnulib/lib/strncasecmp.c
Copying file gnulib/lib/strndup.c
Copying file gnulib/lib/strnlen.c
Copying file gnulib/lib/strnlen1.c
Copying file gnulib/lib/strnlen1.h
Copying file gnulib/lib/strptime.c
Copying file gnulib/lib/strsep.c
Copying file gnulib/lib/strtok_r.c
Copying file gnulib/lib/sys_ioctl.in.h
Copying file gnulib/lib/sys_select.in.h
Copying file gnulib/lib/sys_socket.c
Copying file gnulib/lib/sys_socket.in.h
Copying file gnulib/lib/sys_stat.in.h
Copying file gnulib/lib/sys_time.in.h
Copying file gnulib/lib/sys_types.in.h
Copying file gnulib/lib/sys_uio.in.h
Copying file gnulib/lib/sys_utsname.in.h
Copying file gnulib/lib/sys_wait.in.h
Copying file gnulib/lib/tempname.c
Copying file gnulib/lib/tempname.h
Copying file gnulib/lib/termios.in.h
Copying file gnulib/lib/time.in.h
Copying file gnulib/lib/time_r.c
Copying file gnulib/lib/timegm.c
Copying file gnulib/lib/ttyname_r.c
Copying file gnulib/lib/uname.c
Copying file gnulib/lib/unistd.c
Copying file gnulib/lib/unistd.in.h
Copying file gnulib/lib/unsetenv.c
Copying file gnulib/lib/unused-parameter.h
Copying file gnulib/lib/usleep.c
Copying file gnulib/lib/vasnprintf.c
Copying file gnulib/lib/vasnprintf.h
Copying file gnulib/lib/vasprintf.c
Copying file gnulib/lib/verify.h
Copying file gnulib/lib/vsnprintf.c
Copying file gnulib/lib/w32sock.h
Copying file gnulib/lib/waitpid.c
Copying file gnulib/lib/warn-on-use.h
Copying file gnulib/lib/wchar.in.h
Copying file gnulib/lib/wcrtomb.c
Copying file gnulib/lib/wctype-h.c
Copying file gnulib/lib/wctype.in.h
Copying file gnulib/lib/xalloc-oversized.h
Copying file gnulib/lib/xsize.c
Copying file gnulib/lib/xsize.h
Copying file gnulib/tests/_Noreturn.h
Copying file gnulib/tests/arg-nonnull.h
Copying file gnulib/tests/c++defs.h
Copying file gnulib/tests/ctype.in.h
Copying file gnulib/tests/dup.c
Copying file gnulib/tests/error.c
Copying file gnulib/tests/error.h
Copying file gnulib/tests/exitfail.c
Copying file gnulib/tests/exitfail.h
Copying file gnulib/tests/fatal-signal.c
Copying file gnulib/tests/fatal-signal.h
Copying file gnulib/tests/fdopen.c
Copying file gnulib/tests/float+.h
Copying file gnulib/tests/fpucw.h
Copying file gnulib/tests/ftruncate.c
Copying file gnulib/tests/getpagesize.c
Copying file gnulib/tests/getprogname.c
Copying file gnulib/tests/getprogname.h
Copying file gnulib/tests/getsockopt.c
Copying file gnulib/tests/glthread/thread.c
Copying file gnulib/tests/glthread/thread.h
Copying file gnulib/tests/grantpt.c
Copying file gnulib/tests/infinity.h
Copying file gnulib/tests/init.sh
Copying file gnulib/tests/inttypes.in.h
Copying file gnulib/tests/isblank.c
Copying file gnulib/tests/isnan.c
Copying file gnulib/tests/isnand-nolibm.h
Copying file gnulib/tests/isnand.c
Copying file gnulib/tests/isnanf-nolibm.h
Copying file gnulib/tests/isnanf.c
Copying file gnulib/tests/isnanl-nolibm.h
Copying file gnulib/tests/isnanl.c
Copying file gnulib/tests/localename.c
Copying file gnulib/tests/localename.h
Copying file gnulib/tests/macros.h
Copying file gnulib/tests/math.c
Copying file gnulib/tests/math.in.h
Copying file gnulib/tests/minus-zero.h
Copying file gnulib/tests/nan.h
Copying file gnulib/tests/nanosleep.c
Copying file gnulib/tests/nap.h
Copying file gnulib/tests/null-ptr.h
Copying file gnulib/tests/ptsname.c
Copying file gnulib/tests/ptsname_r.c
Copying file gnulib/tests/pty-private.h
Copying file gnulib/tests/putenv.c
Copying file gnulib/tests/randomd.c
Copying file gnulib/tests/read.c
Copying file gnulib/tests/same-inode.h
Copying file gnulib/tests/setlocale.c
Copying file gnulib/tests/signature.h
Copying file gnulib/tests/signbitd.c
Copying file gnulib/tests/signbitf.c
Copying file gnulib/tests/signbitl.c
Copying file gnulib/tests/socket-client.h
Copying file gnulib/tests/socket-server.h
Copying file gnulib/tests/spawn.in.h
Copying file gnulib/tests/spawn_faction_addclose.c
Copying file gnulib/tests/spawn_faction_adddup2.c
Copying file gnulib/tests/spawn_faction_addopen.c
Copying file gnulib/tests/spawn_faction_destroy.c
Copying file gnulib/tests/spawn_faction_init.c
Copying file gnulib/tests/spawn_int.h
Copying file gnulib/tests/spawnattr_destroy.c
Copying file gnulib/tests/spawnattr_init.c
Copying file gnulib/tests/spawnattr_setflags.c
Copying file gnulib/tests/spawnattr_setsigmask.c
Copying file gnulib/tests/spawni.c
Copying file gnulib/tests/spawnp.c
Copying file gnulib/tests/symlink.c
Copying file gnulib/tests/test-accept.c
Copying file gnulib/tests/test-alloca-opt.c
Copying file gnulib/tests/test-areadlink.c
Copying file gnulib/tests/test-areadlink.h
Copying file gnulib/tests/test-arpa_inet.c
Copying file gnulib/tests/test-base64.c
Copying file gnulib/tests/test-binary-io.c
Copying file gnulib/tests/test-binary-io.sh
Copying file gnulib/tests/test-bind.c
Copying file gnulib/tests/test-bitrotate.c
Copying file gnulib/tests/test-btowc.c
Copying file gnulib/tests/test-btowc1.sh
Copying file gnulib/tests/test-btowc2.sh
Copying file gnulib/tests/test-byteswap.c
Copying file gnulib/tests/test-c-ctype.c
Copying file gnulib/tests/test-c-strcase.sh
Copying file gnulib/tests/test-c-strcasecmp.c
Copying file gnulib/tests/test-c-strcasestr.c
Copying file gnulib/tests/test-c-strncasecmp.c
Copying file gnulib/tests/test-canonicalize-lgpl.c
Copying file gnulib/tests/test-chown.c
Copying file gnulib/tests/test-chown.h
Copying file gnulib/tests/test-cloexec.c
Copying file gnulib/tests/test-close.c
Copying file gnulib/tests/test-connect.c
Copying file gnulib/tests/test-count-leading-zeros.c
Copying file gnulib/tests/test-count-one-bits.c
Copying file gnulib/tests/test-ctype.c
Copying file gnulib/tests/test-dup.c
Copying file gnulib/tests/test-dup2.c
Copying file gnulib/tests/test-environ.c
Copying file gnulib/tests/test-errno.c
Copying file gnulib/tests/test-fclose.c
Copying file gnulib/tests/test-fcntl-h.c
Copying file gnulib/tests/test-fcntl.c
Copying file gnulib/tests/test-fdatasync.c
Copying file gnulib/tests/test-fdopen.c
Copying file gnulib/tests/test-fflush.c
Copying file gnulib/tests/test-fflush2.c
Copying file gnulib/tests/test-fflush2.sh
Copying file gnulib/tests/test-ffs.c
Copying file gnulib/tests/test-ffsl.c
Copying file gnulib/tests/test-fgetc.c
Copying file gnulib/tests/test-float.c
Copying file gnulib/tests/test-fnmatch.c
Copying file gnulib/tests/test-fpurge.c
Copying file gnulib/tests/test-fputc.c
Copying file gnulib/tests/test-fread.c
Copying file gnulib/tests/test-freading.c
Copying file gnulib/tests/test-fseek.c
Copying file gnulib/tests/test-fseek.sh
Copying file gnulib/tests/test-fseek2.sh
Copying file gnulib/tests/test-fseeko.c
Copying file gnulib/tests/test-fseeko.sh
Copying file gnulib/tests/test-fseeko2.sh
Copying file gnulib/tests/test-fseeko3.c
Copying file gnulib/tests/test-fseeko3.sh
Copying file gnulib/tests/test-fseeko4.c
Copying file gnulib/tests/test-fseeko4.sh
Copying file gnulib/tests/test-fstat.c
Copying file gnulib/tests/test-fsync.c
Copying file gnulib/tests/test-ftell.c
Copying file gnulib/tests/test-ftell.sh
Copying file gnulib/tests/test-ftell2.sh
Copying file gnulib/tests/test-ftell3.c
Copying file gnulib/tests/test-ftello.c
Copying file gnulib/tests/test-ftello.sh
Copying file gnulib/tests/test-ftello2.sh
Copying file gnulib/tests/test-ftello3.c
Copying file gnulib/tests/test-ftello4.c
Copying file gnulib/tests/test-ftello4.sh
Copying file gnulib/tests/test-ftruncate.c
Copying file gnulib/tests/test-ftruncate.sh
Copying file gnulib/tests/test-func.c
Copying file gnulib/tests/test-fwrite.c
Copying file gnulib/tests/test-getaddrinfo.c
Copying file gnulib/tests/test-getcwd-lgpl.c
Copying file gnulib/tests/test-getdelim.c
Copying file gnulib/tests/test-getdtablesize.c
Copying file gnulib/tests/test-getgroups.c
Copying file gnulib/tests/test-gethostname.c
Copying file gnulib/tests/test-getline.c
Copying file gnulib/tests/test-getopt-main.h
Copying file gnulib/tests/test-getopt-posix.c
Copying file gnulib/tests/test-getopt.h
Copying file gnulib/tests/test-getpeername.c
Copying file gnulib/tests/test-getprogname.c
Copying file gnulib/tests/test-getsockname.c
Copying file gnulib/tests/test-getsockopt.c
Copying file gnulib/tests/test-gettimeofday.c
Copying file gnulib/tests/test-grantpt.c
Copying file gnulib/tests/test-ignore-value.c
Copying file gnulib/tests/test-inet_ntop.c
Copying file gnulib/tests/test-inet_pton.c
Copying file gnulib/tests/test-init.sh
Copying file gnulib/tests/test-intprops.c
Copying file gnulib/tests/test-inttypes.c
Copying file gnulib/tests/test-ioctl.c
Copying file gnulib/tests/test-isatty.c
Copying file gnulib/tests/test-isblank.c
Copying file gnulib/tests/test-isnand-nolibm.c
Copying file gnulib/tests/test-isnand.h
Copying file gnulib/tests/test-isnanf-nolibm.c
Copying file gnulib/tests/test-isnanf.h
Copying file gnulib/tests/test-isnanl-nolibm.c
Copying file gnulib/tests/test-isnanl.h
Copying file gnulib/tests/test-langinfo.c
Copying file gnulib/tests/test-ldexp.c
Copying file gnulib/tests/test-ldexp.h
Copying file gnulib/tests/test-limits-h.c
Copying file gnulib/tests/test-listen.c
Copying file gnulib/tests/test-localcharset.c
Copying file gnulib/tests/test-locale.c
Copying file gnulib/tests/test-localeconv.c
Copying file gnulib/tests/test-localename.c
Copying file gnulib/tests/test-lseek.c
Copying file gnulib/tests/test-lseek.sh
Copying file gnulib/tests/test-lstat.c
Copying file gnulib/tests/test-lstat.h
Copying file gnulib/tests/test-malloca.c
Copying file gnulib/tests/test-math.c
Copying file gnulib/tests/test-mbrtowc-w32-1.sh
Copying file gnulib/tests/test-mbrtowc-w32-2.sh
Copying file gnulib/tests/test-mbrtowc-w32-3.sh
Copying file gnulib/tests/test-mbrtowc-w32-4.sh
Copying file gnulib/tests/test-mbrtowc-w32-5.sh
Copying file gnulib/tests/test-mbrtowc-w32.c
Copying file gnulib/tests/test-mbrtowc.c
Copying file gnulib/tests/test-mbrtowc1.sh
Copying file gnulib/tests/test-mbrtowc2.sh
Copying file gnulib/tests/test-mbrtowc3.sh
Copying file gnulib/tests/test-mbrtowc4.sh
Copying file gnulib/tests/test-mbrtowc5.sh
Copying file gnulib/tests/test-mbsinit.c
Copying file gnulib/tests/test-mbsinit.sh
Copying file gnulib/tests/test-mbsrtowcs.c
Copying file gnulib/tests/test-mbsrtowcs1.sh
Copying file gnulib/tests/test-mbsrtowcs2.sh
Copying file gnulib/tests/test-mbsrtowcs3.sh
Copying file gnulib/tests/test-mbsrtowcs4.sh
Copying file gnulib/tests/test-memchr.c
Copying file gnulib/tests/test-nanosleep.c
Copying file gnulib/tests/test-net_if.c
Copying file gnulib/tests/test-netdb.c
Copying file gnulib/tests/test-netinet_in.c
Copying file gnulib/tests/test-nl_langinfo.c
Copying file gnulib/tests/test-nl_langinfo.sh
Copying file gnulib/tests/test-nonblocking-misc.h
Copying file gnulib/tests/test-nonblocking-pipe-child.c
Copying file gnulib/tests/test-nonblocking-pipe-main.c
Copying file gnulib/tests/test-nonblocking-pipe.h
Copying file gnulib/tests/test-nonblocking-pipe.sh
Copying file gnulib/tests/test-nonblocking-reader.h
Copying file gnulib/tests/test-nonblocking-socket-child.c
Copying file gnulib/tests/test-nonblocking-socket-main.c
Copying file gnulib/tests/test-nonblocking-socket.h
Copying file gnulib/tests/test-nonblocking-socket.sh
Copying file gnulib/tests/test-nonblocking-writer.h
Copying file gnulib/tests/test-nonblocking.c
Copying file gnulib/tests/test-open.c
Copying file gnulib/tests/test-open.h
Copying file gnulib/tests/test-openpty.c
Copying file gnulib/tests/test-passfd.c
Copying file gnulib/tests/test-pathmax.c
Copying file gnulib/tests/test-perror.c
Copying file gnulib/tests/test-perror.sh
Copying file gnulib/tests/test-perror2.c
Copying file gnulib/tests/test-pipe.c
Copying file gnulib/tests/test-pipe2.c
Copying file gnulib/tests/test-poll-h.c
Copying file gnulib/tests/test-poll.c
Copying file gnulib/tests/test-posix_openpt.c
Copying file gnulib/tests/test-posix_spawn1.c
Copying file gnulib/tests/test-posix_spawn1.in.sh
Copying file gnulib/tests/test-posix_spawn2.c
Copying file gnulib/tests/test-posix_spawn2.in.sh
Copying file gnulib/tests/test-posix_spawn_file_actions_addclose.c
Copying file gnulib/tests/test-posix_spawn_file_actions_adddup2.c
Copying file gnulib/tests/test-posix_spawn_file_actions_addopen.c
Copying file gnulib/tests/test-pthread_sigmask1.c
Copying file gnulib/tests/test-pthread_sigmask2.c
Copying file gnulib/tests/test-ptsname.c
Copying file gnulib/tests/test-ptsname_r.c
Copying file gnulib/tests/test-raise.c
Copying file gnulib/tests/test-rawmemchr.c
Copying file gnulib/tests/test-read.c
Copying file gnulib/tests/test-readlink.c
Copying file gnulib/tests/test-readlink.h
Copying file gnulib/tests/test-recv.c
Copying file gnulib/tests/test-regex.c
Copying file gnulib/tests/test-sched.c
Copying file gnulib/tests/test-select-fd.c
Copying file gnulib/tests/test-select-in.sh
Copying file gnulib/tests/test-select-out.sh
Copying file gnulib/tests/test-select-stdin.c
Copying file gnulib/tests/test-select.c
Copying file gnulib/tests/test-select.h
Copying file gnulib/tests/test-send.c
Copying file gnulib/tests/test-setenv.c
Copying file gnulib/tests/test-setlocale1.c
Copying file gnulib/tests/test-setlocale1.sh
Copying file gnulib/tests/test-setlocale2.c
Copying file gnulib/tests/test-setlocale2.sh
Copying file gnulib/tests/test-setsockopt.c
Copying file gnulib/tests/test-sigaction.c
Copying file gnulib/tests/test-signal-h.c
Copying file gnulib/tests/test-signbit.c
Copying file gnulib/tests/test-sigpipe.c
Copying file gnulib/tests/test-sigpipe.sh
Copying file gnulib/tests/test-sigprocmask.c
Copying file gnulib/tests/test-sleep.c
Copying file gnulib/tests/test-snprintf.c
Copying file gnulib/tests/test-sockets.c
Copying file gnulib/tests/test-spawn.c
Copying file gnulib/tests/test-stat-time.c
Copying file gnulib/tests/test-stat.c
Copying file gnulib/tests/test-stat.h
Copying file gnulib/tests/test-stdalign.c
Copying file gnulib/tests/test-stdbool.c
Copying file gnulib/tests/test-stddef.c
Copying file gnulib/tests/test-stdint.c
Copying file gnulib/tests/test-stdio.c
Copying file gnulib/tests/test-stdlib.c
Copying file gnulib/tests/test-strchrnul.c
Copying file gnulib/tests/test-strerror.c
Copying file gnulib/tests/test-strerror_r.c
Copying file gnulib/tests/test-string.c
Copying file gnulib/tests/test-strings.c
Copying file gnulib/tests/test-strnlen.c
Copying file gnulib/tests/test-symlink.c
Copying file gnulib/tests/test-symlink.h
Copying file gnulib/tests/test-sys_ioctl.c
Copying file gnulib/tests/test-sys_select.c
Copying file gnulib/tests/test-sys_socket.c
Copying file gnulib/tests/test-sys_stat.c
Copying file gnulib/tests/test-sys_time.c
Copying file gnulib/tests/test-sys_types.c
Copying file gnulib/tests/test-sys_uio.c
Copying file gnulib/tests/test-sys_utsname.c
Copying file gnulib/tests/test-sys_wait.c
Copying file gnulib/tests/test-sys_wait.h
Copying file gnulib/tests/test-termios.c
Copying file gnulib/tests/test-thread_create.c
Copying file gnulib/tests/test-thread_self.c
Copying file gnulib/tests/test-time.c
Copying file gnulib/tests/test-ttyname_r.c
Copying file gnulib/tests/test-uname.c
Copying file gnulib/tests/test-unistd.c
Copying file gnulib/tests/test-unlockpt.c
Copying file gnulib/tests/test-unsetenv.c
Copying file gnulib/tests/test-usleep.c
Copying file gnulib/tests/test-vasnprintf.c
Copying file gnulib/tests/test-vasprintf.c
Copying file gnulib/tests/test-vc-list-files-cvs.sh
Copying file gnulib/tests/test-vc-list-files-git.sh
Copying file gnulib/tests/test-verify-try.c
Copying file gnulib/tests/test-verify.c
Copying file gnulib/tests/test-verify.sh
Copying file gnulib/tests/test-vsnprintf.c
Copying file gnulib/tests/test-wchar.c
Copying file gnulib/tests/test-wcrtomb-w32-1.sh
Copying file gnulib/tests/test-wcrtomb-w32-2.sh
Copying file gnulib/tests/test-wcrtomb-w32-3.sh
Copying file gnulib/tests/test-wcrtomb-w32-4.sh
Copying file gnulib/tests/test-wcrtomb-w32-5.sh
Copying file gnulib/tests/test-wcrtomb-w32.c
Copying file gnulib/tests/test-wcrtomb.c
Copying file gnulib/tests/test-wcrtomb.sh
Copying file gnulib/tests/test-wctype-h.c
Copying file gnulib/tests/test-write.c
Copying file gnulib/tests/test-xalloc-die.c
Copying file gnulib/tests/test-xalloc-die.sh
Copying file gnulib/tests/unlockpt.c
Copying file gnulib/tests/unused-parameter.h
Copying file gnulib/tests/w32sock.h
Copying file gnulib/tests/wait-process.c
Copying file gnulib/tests/wait-process.h
Copying file gnulib/tests/warn-on-use.h
Copying file gnulib/tests/wctob.c
Copying file gnulib/tests/wctomb-impl.h
Copying file gnulib/tests/wctomb.c
Copying file gnulib/tests/write.c
Copying file gnulib/tests/xalloc-die.c
Copying file gnulib/tests/xalloc.h
Copying file gnulib/tests/xmalloc.c
Copying file gnulib/tests/zerosize-ptr.h
Copying file m4/00gnulib.m4
Copying file m4/absolute-header.m4
Copying file m4/alloca.m4
Copying file m4/arpa_inet_h.m4
Copying file m4/asm-underscore.m4
Copying file m4/autobuild.m4
Copying file m4/base64.m4
Copying file m4/btowc.m4
Copying file m4/builtin-expect.m4
Copying file m4/byteswap.m4
Copying file m4/calloc.m4
Copying file m4/canonicalize.m4
Copying file m4/chown.m4
Copying file m4/clock_time.m4
Copying file m4/close.m4
Copying file m4/codeset.m4
Copying file m4/configmake.m4
Copying file m4/count-leading-zeros.m4
Copying file m4/count-one-bits.m4
Copying file m4/ctype.m4
Copying file m4/dirname.m4
Copying file m4/double-slash-root.m4
Copying file m4/dup.m4
Copying file m4/dup2.m4
Copying file m4/eealloc.m4
Copying file m4/environ.m4
Copying file m4/errno_h.m4
Copying file m4/error.m4
Copying file m4/execinfo.m4
Copying file m4/exponentd.m4
Copying file m4/exponentf.m4
Copying file m4/exponentl.m4
Copying file m4/extensions.m4
Copying file m4/extern-inline.m4
Copying file m4/fatal-signal.m4
Copying file m4/fclose.m4
Copying file m4/fcntl-o.m4
Copying file m4/fcntl.m4
Copying file m4/fcntl_h.m4
Copying file m4/fdatasync.m4
Copying file m4/fdopen.m4
Copying file m4/fflush.m4
Copying file m4/ffs.m4
Copying file m4/ffsl.m4
Copying file m4/flexmember.m4
Copying file m4/float_h.m4
Copying file m4/fnmatch.m4
Copying file m4/fpieee.m4
Copying file m4/fpurge.m4
Copying file m4/freading.m4
Copying file m4/fseek.m4
Copying file m4/fseeko.m4
Copying file m4/fstat.m4
Copying file m4/fsync.m4
Copying file m4/ftell.m4
Copying file m4/ftello.m4
Copying file m4/ftruncate.m4
Copying file m4/func.m4
Copying file m4/getaddrinfo.m4
Copying file m4/getcwd.m4
Copying file m4/getdelim.m4
Copying file m4/getdtablesize.m4
Copying file m4/getgroups.m4
Copying file m4/gethostname.m4
Copying file m4/getline.m4
Copying file m4/getopt.m4
Copying file m4/getpagesize.m4
Copying file m4/getpass.m4
Copying file m4/getprogname.m4
Copying file m4/gettimeofday.m4
Copying file m4/getugroups.m4
Copying file m4/glibc21.m4
Copying file m4/gnulib-common.m4
Copying file m4/gnulib-tool.m4
Copying file m4/grantpt.m4
Copying file m4/host-cpu-c-abi.m4
Copying file m4/hostent.m4
Copying file m4/include_next.m4
Copying file m4/inet_ntop.m4
Copying file m4/inet_pton.m4
Copying file m4/intlmacosx.m4
Copying file m4/intmax_t.m4
Copying file m4/inttypes-pri.m4
Copying file m4/inttypes.m4
Copying file m4/inttypes_h.m4
Copying file m4/ioctl.m4
Copying file m4/isatty.m4
Copying file m4/isblank.m4
Copying file m4/isnand.m4
Copying file m4/isnanf.m4
Copying file m4/isnanl.m4
Copying file m4/langinfo_h.m4
Copying file m4/largefile.m4
Copying file m4/lcmessage.m4
Copying file m4/ldexp.m4
Copying file m4/lib-ld.m4
Copying file m4/lib-link.m4
Copying file m4/lib-prefix.m4
Copying file m4/limits-h.m4
Copying file m4/localcharset.m4
Copying file m4/locale-fr.m4
Copying file m4/locale-ja.m4
Copying file m4/locale-tr.m4
Copying file m4/locale-zh.m4
Copying file m4/locale_h.m4
Copying file m4/localeconv.m4
Copying file m4/localename.m4
Copying file m4/localtime-buffer.m4
Copying file m4/lock.m4
Copying file m4/longlong.m4
Copying file m4/lseek.m4
Copying file m4/lstat.m4
Copying file m4/malloc.m4
Copying file m4/malloca.m4
Copying file m4/manywarnings-c++.m4
Copying file m4/manywarnings.m4
Copying file m4/math_h.m4
Copying file m4/mbrtowc.m4
Copying file m4/mbsinit.m4
Copying file m4/mbsrtowcs.m4
Copying file m4/mbstate_t.m4
Copying file m4/mbtowc.m4
Copying file m4/memchr.m4
Copying file m4/mgetgroups.m4
Copying file m4/mkdtemp.m4
Copying file m4/mkostemp.m4
Copying file m4/mkostemps.m4
Copying file m4/mktime.m4
Copying file m4/mmap-anon.m4
Copying file m4/mode_t.m4
Copying file m4/msvc-inval.m4
Copying file m4/msvc-nothrow.m4
Copying file m4/multiarch.m4
Copying file m4/nanosleep.m4
Copying file m4/net_if_h.m4
Copying file m4/netdb_h.m4
Copying file m4/netinet_in_h.m4
Copying file m4/nl_langinfo.m4
Copying file m4/nocrash.m4
Copying file m4/nonblocking.m4
Copying file m4/off_t.m4
Copying file m4/onceonly.m4
Copying file m4/open-cloexec.m4
Copying file m4/open.m4
Copying file m4/passfd.m4
Copying file m4/pathmax.m4
Copying file m4/perror.m4
Copying file m4/physmem.m4
Copying file m4/pipe.m4
Copying file m4/pipe2.m4
Copying file m4/poll.m4
Copying file m4/poll_h.m4
Copying file m4/posix-shell.m4
Copying file m4/posix_openpt.m4
Copying file m4/posix_spawn.m4
Copying file m4/printf.m4
Copying file m4/pthread.m4
Copying file m4/pthread_rwlock_rdlock.m4
Copying file m4/pthread_sigmask.m4
Copying file m4/ptsname.m4
Copying file m4/ptsname_r.m4
Copying file m4/pty.m4
Copying file m4/pty_h.m4
Copying file m4/putenv.m4
Copying file m4/raise.m4
Copying file m4/rawmemchr.m4
Copying file m4/read.m4
Copying file m4/readlink.m4
Copying file m4/realloc.m4
Copying file m4/regex.m4
Copying file m4/sched_h.m4
Copying file m4/secure_getenv.m4
Copying file m4/select.m4
Copying file m4/servent.m4
Copying file m4/setenv.m4
Copying file m4/setlocale.m4
Copying file m4/sig_atomic_t.m4
Copying file m4/sigaction.m4
Copying file m4/signal_h.m4
Copying file m4/signalblocking.m4
Copying file m4/signbit.m4
Copying file m4/sigpipe.m4
Copying file m4/size_max.m4
Copying file m4/sleep.m4
Copying file m4/snprintf.m4
Copying file m4/socketlib.m4
Copying file m4/sockets.m4
Copying file m4/socklen.m4
Copying file m4/sockpfaf.m4
Copying file m4/spawn_h.m4
Copying file m4/ssize_t.m4
Copying file m4/stat-time.m4
Copying file m4/stat.m4
Copying file m4/stdalign.m4
Copying file m4/stdarg.m4
Copying file m4/stdbool.m4
Copying file m4/stddef_h.m4
Copying file m4/stdint.m4
Copying file m4/stdint_h.m4
Copying file m4/stdio_h.m4
Copying file m4/stdlib_h.m4
Copying file m4/stpcpy.m4
Copying file m4/strcase.m4
Copying file m4/strchrnul.m4
Copying file m4/strdup.m4
Copying file m4/strerror.m4
Copying file m4/strerror_r.m4
Copying file m4/string_h.m4
Copying file m4/strings_h.m4
Copying file m4/strndup.m4
Copying file m4/strnlen.m4
Copying file m4/strptime.m4
Copying file m4/strsep.m4
Copying file m4/strtok_r.m4
Copying file m4/symlink.m4
Copying file m4/sys_ioctl_h.m4
Copying file m4/sys_select_h.m4
Copying file m4/sys_socket_h.m4
Copying file m4/sys_stat_h.m4
Copying file m4/sys_time_h.m4
Copying file m4/sys_types_h.m4
Copying file m4/sys_uio_h.m4
Copying file m4/sys_utsname_h.m4
Copying file m4/sys_wait_h.m4
Copying file m4/tempname.m4
Copying file m4/termios_h.m4
Copying file m4/thread.m4
Copying file m4/threadlib.m4
Copying file m4/time_h.m4
Copying file m4/time_r.m4
Copying file m4/timegm.m4
Copying file m4/tm_gmtoff.m4
Copying file m4/ttyname_r.m4
Copying file m4/uname.m4
Copying file m4/ungetc.m4
Copying file m4/unistd_h.m4
Copying file m4/unlockpt.m4
Copying file m4/usleep.m4
Copying file m4/vasnprintf.m4
Copying file m4/vasprintf.m4
Copying file m4/vsnprintf.m4
Copying file m4/wait-process.m4
Copying file m4/waitpid.m4
Copying file m4/warn-on-use.m4
Copying file m4/warnings.m4
Copying file m4/wchar_h.m4
Copying file m4/wchar_t.m4
Copying file m4/wcrtomb.m4
Copying file m4/wctob.m4
Copying file m4/wctomb.m4
Copying file m4/wctype_h.m4
Copying file m4/wint_t.m4
Copying file m4/write.m4
Copying file m4/xalloc.m4
Copying file m4/xsize.m4
Copying file maint.mk
Creating gnulib/lib/gnulib.mk
Creating m4/gnulib-cache.m4
Creating m4/gnulib-comp.m4
Creating gnulib/tests/gnulib.mk
Updating ./build-aux/.gitignore (backup in ./build-aux/.gitignore~)
Creating ./gnulib/lib/.gitignore
Creating ./gnulib/lib/glthread/.gitignore
Creating ./gnulib/tests/.gitignore
Creating ./gnulib/tests/glthread/.gitignore
Updating ./m4/.gitignore (backup in ./m4/.gitignore~)
Finished.
You may need to add #include directives for the following .h files.
#include <arpa/inet.h>
#include <byteswap.h>
#include <execinfo.h>
#include <fcntl.h>
#include <fnmatch.h>
#include <locale.h>
#include <math.h>
#include <net/if.h>
#include <netdb.h>
#include <poll.h>
#include <pthread.h>
#include <pty.h>
#include <regex.h>
#include <sched.h>
#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/utsname.h>
#include <sys/wait.h>
#include <termios.h>
#include <time.h>
#include <unistd.h>
/* Include only after all system include files. */
#include "areadlink.h"
#include "base64.h"
#include "bitrotate.h"
#include "c-ctype.h"
#include "c-strcase.h"
#include "c-strcasestr.h"
#include "configmake.h"
#include "count-leading-zeros.h"
#include "count-one-bits.h"
#include "dirname.h"
#include "getpass.h"
#include "ignore-value.h"
#include "intprops.h"
#include "mgetgroups.h"
#include "nonblocking.h"
#include "passfd.h"
#include "physmem.h"
#include "stat-time.h"
#include "verify.h"
You may need to use the following Makefile variables when linking.
Use them in <program>_LDADD when linking a program, or
in <library>_a_LDFLAGS or <library>_la_LDFLAGS when linking a library.
$(GETADDRINFO_LIB)
$(GETHOSTNAME_LIB)
$(HOSTENT_LIB)
$(INET_NTOP_LIB)
$(INET_PTON_LIB)
$(LDEXP_LIBM)
$(LIBSOCKET)
$(LIB_CLOCK_GETTIME)
$(LIB_EXECINFO)
$(LIB_FDATASYNC)
$(LIB_POLL)
$(LIB_PTHREAD)
$(LIB_PTHREAD_SIGMASK)
$(LIB_SELECT)
$(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise
$(LTLIBTHREAD) when linking with libtool, $(LIBTHREAD) otherwise
$(PTY_LIB)
$(SERVENT_LIB)
Don't forget to
- "include gnulib.mk" from within "gnulib/lib/Makefile.am",
- "include gnulib.mk" from within "gnulib/tests/Makefile.am",
- mention "-I m4" in ACLOCAL_AMFLAGS in Makefile.am,
- mention "m4/gnulib-cache.m4" in EXTRA_DIST in Makefile.am,
- invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC,
- invoke gl_INIT in ./configure.ac.
running: AUTOPOINT=true LIBTOOLIZE=true autoreconf --verbose --install --force -I m4 --no-recursive
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal -I m4 --force -I m4
autoreconf: configure.ac: tracing
autoreconf: running: true --copy --force
autoreconf: running: /usr/bin/autoconf --include=m4 --force
autoreconf: running: /usr/bin/autoheader --include=m4 --force
autoreconf: running: automake --add-missing --copy --force-missing
configure.ac:116: installing 'build-aux/compile'
configure.ac:27: installing 'build-aux/missing'
Makefile.am: installing './INSTALL'
examples/Makefile.am: installing 'build-aux/depcomp'
parallel-tests: installing 'build-aux/test-driver'
autoreconf: Leaving directory `.'
./bootstrap: ln -fs ../.gnulib/build-aux/install-sh build-aux/install-sh
./bootstrap: ln -fs ../.gnulib/build-aux/depcomp build-aux/depcomp
./bootstrap: ln -fs ../.gnulib/build-aux/config.guess build-aux/config.guess
./bootstrap: ln -fs ../.gnulib/build-aux/config.sub build-aux/config.sub
./bootstrap: ln -fs .gnulib/doc/INSTALL INSTALL
./bootstrap: done. Now you can run './configure'.
I am going to run configure with no arguments - if you wish
to pass any to it, please specify them on the ./autogen.sh command line.
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking how to create a pax tar archive... gnutar
checking whether make supports nested variables... (cached) yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking whether _XOPEN_SOURCE should be defined... no
checking for Minix Amsterdam compiler... no
checking for ar... ar
checking for ranlib... ranlib
checking for _LARGEFILE_SOURCE value needed for large files... no
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
checking for gcc option to accept ISO C99... none needed
checking for gcc option to accept ISO Standard C... (cached) none needed
configure: autobuild project... libvirt
configure: autobuild revision... v2.1.0-rc1-7126-gfdb4f1fcde
configure: autobuild hostname... patchew-fedora
configure: autobuild timestamp... 20180827T060432Z
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking arpa/inet.h usability... yes
checking arpa/inet.h presence... yes
checking for arpa/inet.h... yes
checking features.h usability... yes
checking features.h presence... yes
checking for features.h... yes
checking sys/param.h usability... yes
checking sys/param.h presence... yes
checking for sys/param.h... yes
checking for unistd.h... (cached) yes
checking execinfo.h usability... yes
checking execinfo.h presence... yes
checking for execinfo.h... yes
checking wctype.h usability... yes
checking wctype.h presence... yes
checking for wctype.h... yes
checking for sys/stat.h... (cached) yes
checking netdb.h usability... yes
checking netdb.h presence... yes
checking for netdb.h... yes
checking netinet/in.h usability... yes
checking netinet/in.h presence... yes
checking for netinet/in.h... yes
checking getopt.h usability... yes
checking getopt.h presence... yes
checking for getopt.h... yes
checking sys/cdefs.h usability... yes
checking sys/cdefs.h presence... yes
checking for sys/cdefs.h... yes
checking stdio_ext.h usability... yes
checking stdio_ext.h presence... yes
checking for stdio_ext.h... yes
checking termios.h usability... yes
checking termios.h presence... yes
checking for termios.h... yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking grp.h usability... yes
checking grp.h presence... yes
checking for grp.h... yes
checking langinfo.h usability... yes
checking langinfo.h presence... yes
checking for langinfo.h... yes
checking limits.h usability... yes
checking limits.h presence... yes
checking for limits.h... yes
checking xlocale.h usability... yes
checking xlocale.h presence... yes
checking for xlocale.h... yes
checking sys/mman.h usability... yes
checking sys/mman.h presence... yes
checking for sys/mman.h... yes
checking pty.h usability... yes
checking pty.h presence... yes
checking for pty.h... yes
checking poll.h usability... yes
checking poll.h presence... yes
checking for poll.h... yes
checking sys/ioctl.h usability... yes
checking sys/ioctl.h presence... yes
checking for sys/ioctl.h... yes
checking sys/filio.h usability... no
checking sys/filio.h presence... no
checking for sys/filio.h... no
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking malloc.h usability... yes
checking malloc.h presence... yes
checking for malloc.h... yes
checking sys/select.h usability... yes
checking sys/select.h presence... yes
checking for sys/select.h... yes
checking wchar.h usability... yes
checking wchar.h presence... yes
checking for wchar.h... yes
checking for stdint.h... (cached) yes
checking for strings.h... (cached) yes
checking sys/uio.h usability... yes
checking sys/uio.h presence... yes
checking for sys/uio.h... yes
checking sys/utsname.h usability... yes
checking sys/utsname.h presence... yes
checking for sys/utsname.h... yes
checking sys/wait.h usability... yes
checking sys/wait.h presence... yes
checking for sys/wait.h... yes
checking crtdefs.h usability... no
checking crtdefs.h presence... no
checking for crtdefs.h... no
checking for inttypes.h... (cached) yes
checking math.h usability... yes
checking math.h presence... yes
checking for math.h... yes
checking for sys/types.h... (cached) yes
checking spawn.h usability... yes
checking spawn.h presence... yes
checking for spawn.h... yes
checking whether the preprocessor supports include_next... yes
checking whether system header files limit the line length... no
checking whether <sys/socket.h> is self-contained... yes
checking for shutdown... yes
checking whether <sys/socket.h> defines the SHUT_* macros... yes
checking for struct sockaddr_storage... yes
checking for sa_family_t... yes
checking for struct sockaddr_storage.ss_family... yes
checking for size_t... yes
checking for working alloca.h... yes
checking for alloca... yes
checking for C/C++ restrict keyword... __restrict
checking whether <wchar.h> uses 'inline' correctly... yes
checking for btowc... yes
checking for canonicalize_file_name... yes
checking for getcwd... yes
checking for readlink... yes
checking for realpath... yes
checking for readlinkat... yes
checking for chown... yes
checking for fchown... yes
checking for _set_invalid_parameter_handler... no
checking for fcntl... yes
checking for symlink... yes
checking for ffsl... yes
checking for isblank... yes
checking for iswctype... yes
checking for mbsrtowcs... yes
checking for mempcpy... yes
checking for wmemchr... yes
checking for wmemcpy... yes
checking for wmempcpy... yes
checking for fpurge... no
checking for __fpurge... yes
checking for __freading... yes
checking for fsync... yes
checking for getdelim... yes
checking for getdtablesize... yes
checking for __fsetlocking... yes
checking for gettimeofday... yes
checking for lstat... yes
checking for mbsinit... yes
checking for mbrtowc... yes
checking for mprotect... yes
checking for getgrouplist... yes
checking for mkostemp... yes
checking for mkostemps... yes
checking for tzset... yes
checking for nl_langinfo... yes
checking for recvmsg... yes
checking for sendmsg... yes
checking for strerror_r... yes
checking for __xpg_strerror_r... yes
checking for pipe... yes
checking for pipe2... yes
checking for posix_openpt... yes
checking for pthread_sigmask... no
checking for secure_getenv... yes
checking for getuid... yes
checking for geteuid... yes
checking for getgid... yes
checking for getegid... yes
checking for setenv... yes
checking for sigaction... yes
checking for sigaltstack... yes
checking for siginterrupt... yes
checking for sleep... yes
checking for snprintf... yes
checking for strdup... yes
checking for catgets... yes
checking for strndup... yes
checking for strptime... yes
checking for localtime_r... yes
checking for timegm... yes
checking for usleep... yes
checking for vasnprintf... no
checking for wcrtomb... yes
checking for iswcntrl... yes
checking for ftruncate... yes
checking for getprogname... no
checking for getexecname... no
checking for newlocale... yes
checking for socketpair... yes
checking for ptsname_r... yes
checking for shutdown... (cached) yes
checking for wctob... yes
checking for cfmakeraw... yes
checking for fallocate... yes
checking for getgrnam_r... yes
checking for getmntent_r... yes
checking for getpwuid_r... yes
checking for getrlimit... yes
checking for if_indextoname... yes
checking for kill... yes
checking for mmap... yes
checking for posix_fallocate... yes
checking for posix_memalign... yes
checking for prlimit... yes
checking for regexec... yes
checking for sched_getaffinity... yes
checking for setgroups... yes
checking for setns... yes
checking for setrlimit... yes
checking for sysctlbyname... no
checking for getifaddrs... yes
checking for sched_setscheduler... yes
checking for unshare... yes
checking for nl_langinfo and CODESET... yes
checking for a traditional french locale... fr_FR
checking whether malloc, realloc, calloc are POSIX compliant... yes
checking whether // is distinct from /... no
checking whether realpath works... yes
checking for uid_t in sys/types.h... yes
checking for unistd.h... (cached) yes
checking for working chown... yes
checking whether chown dereferences symlinks... yes
checking whether chown honors trailing slash... yes
checking whether chown always updates ctime... yes
checking for unsigned long long int... yes
checking if environ is properly declared... yes
checking for complete errno.h... yes
checking for working fcntl.h... yes
checking for pid_t... yes
checking for mode_t... yes
checking whether fdatasync is declared... yes
checking for mbstate_t... yes
checking whether stdin defaults to large file offsets... yes
checking whether fseeko is declared... yes
checking for fseeko... yes
checking whether fflush works on input streams... no
checking whether stat file-mode macros are broken... no
checking for nlink_t... yes
checking whether ftello is declared... yes
checking for ftello... yes
checking whether ftello works... yes
checking for library containing gethostbyname... none required
checking for gethostbyname... yes
checking for library containing getservbyname... none required
checking for getservbyname... yes
checking for library containing inet_ntop... none required
checking whether inet_ntop is declared... yes
checking for IPv4 sockets... yes
checking for IPv6 sockets... yes
checking whether getcwd (NULL, 0) allocates memory for result... yes
checking for getcwd with POSIX signature... yes
checking whether getdelim is declared... yes
checking whether getdtablesize is declared... yes
checking type of array argument to getgroups... gid_t
checking whether getline is declared... yes
checking whether getopt is POSIX compatible... yes
checking whether getpass is declared... yes
checking whether fflush_unlocked is declared... yes
checking whether flockfile is declared... yes
checking whether fputs_unlocked is declared... yes
checking whether funlockfile is declared... yes
checking whether putc_unlocked is declared... yes
checking for struct timeval... yes
checking for wide-enough struct timeval.tv_sec member... yes
checking host CPU and C ABI... x86_64
checking whether ldexp() can be used without linking with libm... yes
checking whether limits.h has ULLONG_WIDTH etc.... yes
checking for wchar_t... yes
checking for max_align_t... yes
checking whether NULL can be used in arbitrary expressions... yes
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for shared library run path origin... done
checking for the common suffixes of directories in the library search path... lib64,lib64
checking whether imported symbols can be declared weak... yes
checking whether the linker supports --as-needed... yes
checking whether the linker supports --push-state... yes
checking for pthread.h... (cached) yes
checking for multithread API to use... posix
checking whether lstat correctly handles trailing slash... yes
checking for a sed that does not truncate output... /usr/bin/sed
checking for stdlib.h... (cached) yes
checking for GNU libc compatible malloc... yes
checking for long long int... yes
checking for a traditional japanese locale... ja_JP
checking for a transitional chinese locale... zh_CN.GB18030
checking for a french Unicode locale... fr_FR.UTF-8
checking for inline... inline
checking for mmap... (cached) yes
checking for MAP_ANONYMOUS... yes
checking whether memchr works... yes
checking whether time_t is signed... yes
checking whether alarm is declared... yes
checking for working mktime... yes
checking whether C symbols are prefixed with underscore at the linker level... no
checking for O_CLOEXEC... yes
checking for promoted mode_t type... mode_t
checking for library containing forkpty... -lutil
checking whether strerror(0) succeeds... yes
checking for strerror_r with POSIX signature... no
checking whether __xpg_strerror_r works... yes
checking whether strerror_r is declared... yes
checking for external symbol _system_configuration... no
checking for library containing setsockopt... none needed
checking for sigset_t... yes
checking for SIGPIPE... yes
checking whether we are using the GNU C Library >= 2.1 or uClibc... yes
checking whether <sys/select.h> is self-contained... yes
checking whether setenv is declared... yes
checking search.h usability... yes
checking search.h presence... yes
checking for search.h... yes
checking for tsearch... yes
checking whether snprintf returns a byte count as in C99... yes
checking whether snprintf is declared... yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
checking for wint_t... yes
checking whether wint_t is too small... no
checking whether stdint.h conforms to C99... yes
checking whether stdint.h predates C++11... no
checking whether stdint.h has UINTMAX_WIDTH etc.... yes
checking whether strdup is declared... yes
checking whether strndup is declared... yes
checking whether strnlen is declared... yes
checking for struct tm.tm_gmtoff... yes
checking whether strtok_r is declared... yes
checking for struct timespec in <time.h>... yes
checking whether ttyname_r is declared... yes
checking whether unsetenv is declared... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for intmax_t... yes
checking where to find the exponent in a 'double'... word 1 bit 20
checking for snprintf... (cached) yes
checking for strnlen... yes
checking for wcslen... yes
checking for wcsnlen... yes
checking for mbrtowc... (cached) yes
checking for wcrtomb... (cached) yes
checking whether _snprintf is declared... no
checking whether vsnprintf is declared... yes
checking whether strerror_r is declared... (cached) yes
checking for strerror_r... (cached) yes
checking whether strerror_r returns char *... yes
checking for sig_atomic_t... yes
checking whether ungetc works on arbitrary bytes... yes
checking for inttypes.h... (cached) yes
checking whether the inttypes.h PRIxNN macros are broken... no
checking where to find the exponent in a 'float'... word 0 bit 23
checking whether byte ordering is bigendian... no
checking whether long double and double are the same... no
checking for LC_MESSAGES... yes
checking for CFPreferencesCopyAppValue... no
checking for CFLocaleCopyCurrent... no
checking for library containing posix_spawn... none required
checking for posix_spawn... yes
checking whether posix_spawn works... yes
checking whether posix_spawnattr_setschedpolicy is supported... yes
checking whether posix_spawnattr_setschedparam is supported... yes
checking sys/mkdev.h usability... no
checking sys/mkdev.h presence... no
checking for sys/mkdev.h... no
checking sys/sysmacros.h usability... yes
checking sys/sysmacros.h presence... yes
checking for sys/sysmacros.h... yes
checking for alloca as a compiler built-in... yes
checking whether btowc(0) is correct... yes
checking whether btowc(EOF) is correct... yes
checking for __builtin_expect... yes
checking byteswap.h usability... yes
checking byteswap.h presence... yes
checking for byteswap.h... yes
checking for library containing clock_gettime... none required
checking for clock_gettime... yes
checking for clock_settime... yes
checking whether // is distinct from /... (cached) no
checking whether dup2 works... yes
checking for library containing backtrace_symbols_fd... none required
checking whether fflush works on input streams... (cached) no
checking whether fcntl handles F_DUPFD correctly... yes
checking whether fcntl understands F_DUPFD_CLOEXEC... needs runtime check
checking for library containing fdatasync... none required
checking whether fflush works on input streams... (cached) no
checking for ffs... yes
checking for flexible array member... yes
checking whether conversion from 'int' to 'long double' works... yes
checking for working POSIX fnmatch... yes
checking whether fpurge is declared... no
checking for fseeko... (cached) yes
checking whether fflush works on input streams... (cached) no
checking for _fseeki64... no
checking for ftello... (cached) yes
checking whether ftello works... (cached) yes
checking whether __func__ is available... yes
checking how to do getaddrinfo, freeaddrinfo and getnameinfo... checking for library containing getaddrinfo... none required
checking for getaddrinfo... yes
checking whether gai_strerror is declared... yes
checking whether gai_strerrorA is declared... no
checking for gai_strerror with POSIX signature... yes
checking for struct sockaddr.sa_len... no
checking whether getaddrinfo is declared... yes
checking whether freeaddrinfo is declared... yes
checking whether getnameinfo is declared... yes
checking for struct addrinfo... yes
checking for working getdelim function... yes
checking whether getdtablesize works... yes
checking for getgroups... yes
checking for working getgroups... yes
checking whether getgroups handles negative values... yes
checking for gethostname... yes
checking for HOST_NAME_MAX... yes
checking for getline... yes
checking for working getline function... yes
checking for getpass... yes
checking whether gettimeofday clobbers localtime buffer... no
checking for gettimeofday with POSIX signature... almost
checking for library containing gethostbyname... (cached) none required
checking for gethostbyname... (cached) yes
checking for library containing inet_ntop... (cached) none required
checking whether inet_ntop is declared... (cached) yes
checking for library containing inet_pton... none required
checking whether inet_pton is declared... yes
checking for ioctl... yes
checking for ioctl with POSIX signature... no
checking whether langinfo.h defines CODESET... yes
checking whether langinfo.h defines T_FMT_AMPM... yes
checking whether langinfo.h defines ALTMON_1... no
checking whether langinfo.h defines ERA... yes
checking whether langinfo.h defines YESEXPR... yes
checking whether locale.h conforms to POSIX:2001... yes
checking whether locale.h defines locale_t... yes
checking whether struct lconv is properly defined... yes
checking for pthread_rwlock_t... yes
checking whether pthread_rwlock_rdlock prefers a writer to a reader... no
checking whether lseek detects pipes... yes
checking whether mbrtowc handles incomplete characters... yes
checking whether mbrtowc works as well as mbtowc... yes
checking whether mbrtowc handles a NULL pwc argument... yes
checking whether mbrtowc handles a NULL string argument... yes
checking whether mbrtowc has a correct return value... yes
checking whether mbrtowc returns 0 when parsing a NUL character... yes
checking whether mbrtowc works on empty input... yes
checking whether the C locale is free of encoding errors... no
checking whether mbrtowc handles incomplete characters... (cached) yes
checking whether mbrtowc works as well as mbtowc... (cached) yes
checking whether mbrtowc handles incomplete characters... (cached) yes
checking whether mbrtowc works as well as mbtowc... (cached) yes
checking whether mbsrtowcs works... yes
checking for mkdtemp... yes
checking for __mktime_internal... no
checking whether <net/if.h> is self-contained... yes
checking whether <netinet/in.h> is self-contained... yes
checking whether YESEXPR works... yes
checking whether open recognizes a trailing slash... yes
checking whether openpty is declared... yes
checking for const-safe openpty signature... yes
checking for struct msghdr.msg_accrights... no
checking whether perror matches strerror... yes
checking for sys/pstat.h... no
checking for sys/sysmp.h... no
checking for sys/sysinfo.h... yes
checking for machine/hal_sysinfo.h... no
checking for sys/table.h... no
checking for sys/param.h... (cached) yes
checking for sys/systemcfg.h... no
checking for sys/sysctl.h... yes
checking for pstat_getstatic... no
checking for pstat_getdynamic... no
checking for sysmp... no
checking for getsysinfo... no
checking for sysctl... yes
checking for table... no
checking for sysinfo... yes
checking for struct sysinfo.mem_unit... yes
checking for poll... yes
checking for a shell that conforms to POSIX... /bin/sh
checking whether <pthread.h> pollutes the namespace... no
checking for pthread_t... yes
checking for pthread_spinlock_t... yes
checking for library containing pthread_create and pthread_join... -pthread
checking for pthread_sigmask in -pthread -Wl,--push-state -Wl,--no-as-needed -lpthread -Wl,--pop-state... yes
checking whether pthread_sigmask is only a macro... no
checking whether pthread_sigmask returns error numbers... yes
checking whether pthread_sigmask unblocks signals correctly... guessing yes
checking for raise... yes
checking for sigprocmask... yes
checking for rawmemchr... yes
checking whether readlink signature is correct... yes
checking whether readlink handles trailing slash correctly... yes
checking for working re_compile_pattern... yes
checking whether select supports a 0 argument... yes
checking whether select detects invalid fds... yes
checking for library containing getservbyname... (cached) none required
checking for getservbyname... (cached) yes
checking whether setenv validates arguments... yes
checking for struct sigaction.sa_sigaction... yes
checking for volatile sig_atomic_t... yes
checking for sighandler_t... yes
checking for sigprocmask... (cached) yes
checking for stdint.h... (cached) yes
checking for SIZE_MAX... yes
checking whether sleep is declared... yes
checking for working sleep... yes
checking for snprintf... (cached) yes
checking whether snprintf respects a size of 1... yes
checking whether printf supports POSIX/XSI format strings with positions... yes
checking for socklen_t... yes
checking for ssize_t... yes
checking whether stat handles trailing slashes on files... yes
checking for struct stat.st_atim.tv_nsec... yes
checking whether struct stat.st_atim is of type struct timespec... yes
checking for struct stat.st_birthtimespec.tv_nsec... no
checking for struct stat.st_birthtimensec... no
checking for struct stat.st_birthtim.tv_nsec... no
checking for working stdalign.h... yes
checking for va_copy... yes
checking for max_align_t... (cached) yes
checking whether NULL can be used in arbitrary expressions... (cached) yes
checking which flavor of printf attribute matches inttypes macros... system
checking for stpcpy... yes
checking for strcasecmp... yes
checking for strncasecmp... yes
checking whether strncasecmp is declared... yes
checking for strchrnul... yes
checking whether strchrnul works... yes
checking for working strerror function... yes
checking for working strndup... yes
checking for working strnlen... yes
checking for strsep... yes
checking for strtok_r... yes
checking whether strtok_r works... yes
checking whether <sys/ioctl.h> declares ioctl... yes
checking for nlink_t... (cached) yes
checking for struct utsname... yes
checking whether localtime_r is declared... yes
checking whether localtime_r is compatible with its POSIX signature... yes
checking for ttyname_r... yes
checking whether ttyname_r is compatible with its POSIX signature... yes
checking whether ttyname_r works with small buffers... guessing yes
checking for uname... yes
checking for unsetenv... yes
checking for unsetenv() return type... int
checking whether unsetenv obeys POSIX... yes
checking for useconds_t... yes
checking whether usleep allows large arguments... yes
checking for ptrdiff_t... yes
checking for vasprintf... yes
checking for vsnprintf... yes
checking whether snprintf respects a size of 1... (cached) yes
checking whether printf supports POSIX/XSI format strings with positions... (cached) yes
checking whether mbrtowc handles incomplete characters... (cached) yes
checking whether mbrtowc works as well as mbtowc... (cached) yes
checking whether wcrtomb return value is correct... yes
checking whether iswcntrl works... yes
checking for towlower... yes
checking for wctype_t... yes
checking for wctrans_t... yes
checking for stdint.h... (cached) yes
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional french locale... (cached) fr_FR
checking for a turkish Unicode locale... tr_TR.UTF-8
checking whether dup works... yes
checking for error_at_line... yes
checking whether fdopen sets errno... yes
checking for getpagesize... yes
checking whether getpagesize is declared... yes
checking whether program_invocation_name is declared... yes
checking whether program_invocation_short_name is declared... yes
checking whether __argv is declared... no
checking for grantpt... yes
checking whether byte ordering is bigendian... (cached) no
checking whether byte ordering is bigendian... (cached) no
checking whether INT32_MAX < INTMAX_MAX... yes
checking whether INT64_MAX == LONG_MAX... yes
checking whether UINT32_MAX < UINTMAX_MAX... yes
checking whether UINT64_MAX == ULONG_MAX... yes
checking whether isnan(double) can be used without linking with libm... yes
checking where to find the exponent in a 'double'... (cached) word 1 bit 20
checking whether isnan(float) can be used without linking with libm... yes
checking whether isnan(float) works... yes
checking where to find the exponent in a 'float'... (cached) word 0 bit 23
checking whether isnan(long double) can be used without linking with libm... yes
checking whether isnanl works... yes
checking where to find the exponent in a 'long double'... word 2 bit 0
checking for setlocale... yes
checking for uselocale... yes
checking for getlocalename_l... no
checking whether NAN macro works... yes
checking whether HUGE_VAL works... yes
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional japanese locale... (cached) ja_JP
checking for a transitional chinese locale... (cached) zh_CN.GB18030
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional japanese locale... (cached) ja_JP
checking for a transitional chinese locale... (cached) zh_CN.GB18030
checking for mmap... (cached) yes
checking for MAP_ANONYMOUS... yes
checking for library containing nanosleep... none required
checking for working nanosleep... no (mishandles large arguments)
checking for library containing if_nameindex... none required
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking whether posix_spawn_file_actions_addclose works... yes
checking whether posix_spawn_file_actions_adddup2 works... yes
checking whether posix_spawn_file_actions_addopen works... yes
checking for ptsname... yes
checking whether ptsname sets errno on failure... yes
checking whether ptsname_r has the same signature as in glibc... yes
checking for putenv compatible with GNU and SVID... yes
checking for mmap... (cached) yes
checking for MAP_ANONYMOUS... yes
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional japanese locale... (cached) ja_JP
checking for a transitional chinese locale... (cached) zh_CN.GB18030
checking for signbit macro... yes
checking for signbit compiler built-ins... yes
checking for posix_spawnattr_t... yes
checking for posix_spawn_file_actions_t... yes
checking for mmap... (cached) yes
checking for MAP_ANONYMOUS... yes
checking whether symlink handles trailing slash correctly... yes
checking for pthread_atfork... yes
checking for unlockpt... yes
checking for waitid... yes
checking for a traditional french locale... (cached) fr_FR
checking for a french Unicode locale... (cached) fr_FR.UTF-8
checking for a traditional japanese locale... (cached) ja_JP
checking for a transitional chinese locale... (cached) zh_CN.GB18030
checking whether wctob works... yes
checking whether wctob is declared... yes
checking for uid_t in sys/types.h... (cached) yes
checking for sys/mkdev.h... (cached) no
checking for sys/sysmacros.h... (cached) yes
checking how to print strings... printf
checking for a sed that does not truncate output... (cached) /usr/bin/sed
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... dlltool
checking how to associate runtime and link libraries... printf %s\n
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... (cached) ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking for ld used by gcc... (cached) /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... (cached) yes
checking for how to mark DSO non-deletable at runtime... -Wl,-z -Wl,nodelete
checking for how to set DSO symbol versions... -Wl,--version-script=
checking whether C compiler handles -Werror -Wunknown-warning-option... no
checking whether the C compiler's -Wformat allows NULL strings... yes
checking whether pragma GCC diagnostic push works... yes
checking whether the C compiler's -Wlogical-op gives bogus warnings... no
checking whether gcc gives bogus warnings for -Wlogical-op... yes
checking whether clang gives bogus warnings for -Wdouble-promotion... no
checking whether -Wno-missing-field-initializers is supported... yes
checking whether -Wno-missing-field-initializers is needed... no
checking whether -Wuninitialized is supported... yes
checking max safe object size... 9223372036854775807
checking whether C compiler handles -Wframe-larger-than=4096... yes
checking whether C compiler handles -Wframe-larger-than=32768... yes
checking whether C compiler handles -fno-common... yes
checking whether C compiler handles -W... yes
checking whether C compiler handles -Waddress... yes
checking whether C compiler handles -Waggressive-loop-optimizations... yes
checking whether C compiler handles -Wall... yes
checking whether C compiler handles -Wattribute-alias... no
checking whether C compiler handles -Wattributes... yes
checking whether C compiler handles -Wbad-function-cast... yes
checking whether C compiler handles -Wbool-compare... yes
checking whether C compiler handles -Wbool-operation... yes
checking whether C compiler handles -Wbuiltin-declaration-mismatch... yes
checking whether C compiler handles -Wbuiltin-macro-redefined... yes
checking whether C compiler handles -Wcast-align... yes
checking whether C compiler handles -Wcast-align=strict... no
checking whether C compiler handles -Wcast-function-type... no
checking whether C compiler handles -Wchar-subscripts... yes
checking whether C compiler handles -Wclobbered... yes
checking whether C compiler handles -Wcomment... yes
checking whether C compiler handles -Wcomments... yes
checking whether C compiler handles -Wcoverage-mismatch... yes
checking whether C compiler handles -Wcpp... yes
checking whether C compiler handles -Wdangling-else... yes
checking whether C compiler handles -Wdate-time... yes
checking whether C compiler handles -Wdeprecated-declarations... yes
checking whether C compiler handles -Wdesignated-init... yes
checking whether C compiler handles -Wdiscarded-array-qualifiers... yes
checking whether C compiler handles -Wdiscarded-qualifiers... yes
checking whether C compiler handles -Wdiv-by-zero... yes
checking whether C compiler handles -Wdouble-promotion... yes
checking whether C compiler handles -Wduplicated-cond... yes
checking whether C compiler handles -Wduplicate-decl-specifier... yes
checking whether C compiler handles -Wempty-body... yes
checking whether C compiler handles -Wendif-labels... yes
checking whether C compiler handles -Wexpansion-to-defined... yes
checking whether C compiler handles -Wextra... yes
checking whether C compiler handles -Wformat-contains-nul... yes
checking whether C compiler handles -Wformat-extra-args... yes
checking whether C compiler handles -Wformat-security... yes
checking whether C compiler handles -Wformat-y2k... yes
checking whether C compiler handles -Wformat-zero-length... yes
checking whether C compiler handles -Wframe-address... yes
checking whether C compiler handles -Wfree-nonheap-object... yes
checking whether C compiler handles -Whsa... yes
checking whether C compiler handles -Wif-not-aligned... no
checking whether C compiler handles -Wignored-attributes... yes
checking whether C compiler handles -Wignored-qualifiers... yes
checking whether C compiler handles -Wimplicit... yes
checking whether C compiler handles -Wimplicit-function-declaration... yes
checking whether C compiler handles -Wimplicit-int... yes
checking whether C compiler handles -Wincompatible-pointer-types... yes
checking whether C compiler handles -Winit-self... yes
checking whether C compiler handles -Winline... yes
checking whether C compiler handles -Wint-conversion... yes
checking whether C compiler handles -Wint-in-bool-context... yes
checking whether C compiler handles -Wint-to-pointer-cast... yes
checking whether C compiler handles -Winvalid-memory-model... yes
checking whether C compiler handles -Winvalid-pch... yes
checking whether C compiler handles -Wlogical-not-parentheses... yes
checking whether C compiler handles -Wlogical-op... yes
checking whether C compiler handles -Wmain... yes
checking whether C compiler handles -Wmaybe-uninitialized... yes
checking whether C compiler handles -Wmemset-elt-size... yes
checking whether C compiler handles -Wmemset-transposed-args... yes
checking whether C compiler handles -Wmisleading-indentation... yes
checking whether C compiler handles -Wmissing-attributes... no
checking whether C compiler handles -Wmissing-braces... yes
checking whether C compiler handles -Wmissing-declarations... yes
checking whether C compiler handles -Wmissing-field-initializers... yes
checking whether C compiler handles -Wmissing-include-dirs... yes
checking whether C compiler handles -Wmissing-parameter-type... yes
checking whether C compiler handles -Wmissing-prototypes... yes
checking whether C compiler handles -Wmultichar... yes
checking whether C compiler handles -Wmultistatement-macros... no
checking whether C compiler handles -Wnarrowing... yes
checking whether C compiler handles -Wnested-externs... yes
checking whether C compiler handles -Wnonnull... yes
checking whether C compiler handles -Wnonnull-compare... yes
checking whether C compiler handles -Wnull-dereference... yes
checking whether C compiler handles -Wodr... yes
checking whether C compiler handles -Wold-style-declaration... yes
checking whether C compiler handles -Wold-style-definition... yes
checking whether C compiler handles -Wopenmp-simd... yes
checking whether C compiler handles -Woverflow... yes
checking whether C compiler handles -Woverride-init... yes
checking whether C compiler handles -Wpacked-bitfield-compat... yes
checking whether C compiler handles -Wpacked-not-aligned... no
checking whether C compiler handles -Wparentheses... yes
checking whether C compiler handles -Wpointer-arith... yes
checking whether C compiler handles -Wpointer-compare... yes
checking whether C compiler handles -Wpointer-sign... yes
checking whether C compiler handles -Wpointer-to-int-cast... yes
checking whether C compiler handles -Wpragmas... yes
checking whether C compiler handles -Wpsabi... yes
checking whether C compiler handles -Wrestrict... yes
checking whether C compiler handles -Wreturn-local-addr... yes
checking whether C compiler handles -Wreturn-type... yes
checking whether C compiler handles -Wscalar-storage-order... yes
checking whether C compiler handles -Wsequence-point... yes
checking whether C compiler handles -Wshadow... yes
checking whether C compiler handles -Wshift-count-negative... yes
checking whether C compiler handles -Wshift-count-overflow... yes
checking whether C compiler handles -Wshift-negative-value... yes
checking whether C compiler handles -Wsizeof-array-argument... yes
checking whether C compiler handles -Wsizeof-pointer-div... no
checking whether C compiler handles -Wsizeof-pointer-memaccess... yes
checking whether C compiler handles -Wstrict-aliasing... yes
checking whether C compiler handles -Wstrict-prototypes... yes
checking whether C compiler handles -Wstringop-truncation... no
checking whether C compiler handles -Wsuggest-attribute=cold... no
checking whether C compiler handles -Wsuggest-attribute=const... yes
checking whether C compiler handles -Wsuggest-attribute=format... yes
checking whether C compiler handles -Wsuggest-attribute=malloc... no
checking whether C compiler handles -Wsuggest-attribute=noreturn... yes
checking whether C compiler handles -Wsuggest-attribute=pure... yes
checking whether C compiler handles -Wsuggest-final-methods... yes
checking whether C compiler handles -Wsuggest-final-types... yes
checking whether C compiler handles -Wswitch... yes
checking whether C compiler handles -Wswitch-bool... yes
checking whether C compiler handles -Wswitch-unreachable... yes
checking whether C compiler handles -Wsync-nand... yes
checking whether C compiler handles -Wtautological-compare... yes
checking whether C compiler handles -Wtrampolines... yes
checking whether C compiler handles -Wtrigraphs... yes
checking whether C compiler handles -Wtype-limits... yes
checking whether C compiler handles -Wuninitialized... yes
checking whether C compiler handles -Wunknown-pragmas... yes
checking whether C compiler handles -Wunused... yes
checking whether C compiler handles -Wunused-but-set-parameter... yes
checking whether C compiler handles -Wunused-but-set-variable... yes
checking whether C compiler handles -Wunused-function... yes
checking whether C compiler handles -Wunused-label... yes
checking whether C compiler handles -Wunused-local-typedefs... yes
checking whether C compiler handles -Wunused-parameter... yes
checking whether C compiler handles -Wunused-result... yes
checking whether C compiler handles -Wunused-value... yes
checking whether C compiler handles -Wunused-variable... yes
checking whether C compiler handles -Wvarargs... yes
checking whether C compiler handles -Wvariadic-macros... yes
checking whether C compiler handles -Wvector-operation-performance... yes
checking whether C compiler handles -Wvolatile-register-var... yes
checking whether C compiler handles -Wwrite-strings... yes
checking whether C compiler handles -Walloc-size-larger-than=9223372036854775807... yes
checking whether C compiler handles -Warray-bounds=2... yes
checking whether C compiler handles -Wformat-overflow=2... yes
checking whether C compiler handles -Wformat-truncation=2... yes
checking whether C compiler handles -Wimplicit-fallthrough=5... yes
checking whether C compiler handles -Wnormalized=nfc... yes
checking whether C compiler handles -Wshift-overflow=2... yes
checking whether C compiler handles -Wstringop-overflow=2... yes
checking whether C compiler handles -Wunused-const-variable=2... yes
checking whether C compiler handles -Wvla-larger-than=4031... yes
checking whether C compiler handles -Wno-sign-compare... yes
checking whether C compiler handles -Wno-cast-function-type... no
checking whether C compiler handles -Wjump-misses-init... yes
checking whether C compiler handles -Wswitch-enum... yes
checking whether C compiler handles -Wno-format-nonliteral... yes
checking whether C compiler handles -Wno-format-truncation... yes
checking whether C compiler handles -fstack-protector-strong... yes
checking whether C compiler handles -fexceptions... yes
checking whether C compiler handles -fasynchronous-unwind-tables... yes
checking whether C compiler handles -fipa-pure-const... yes
checking whether C compiler handles -Wno-suggest-attribute=pure... yes
checking whether C compiler handles -Wno-suggest-attribute=const... yes
checking whether C compiler handles -Werror... yes
checking whether C compiler handles -fPIE -DPIE -pie... yes
checking for how to force completely read-only GOT table... -Wl,-z -Wl,relro -Wl,-z -Wl,now
checking for how to avoid indirect lib deps... -Wl,--no-copy-dt-needed-entries
checking for how to stop undefined symbols at link time... -Wl,-z -Wl,defs
checking sys/acl.h usability... yes
checking sys/acl.h presence... yes
checking for sys/acl.h... yes
checking for aa_change_profile in -lapparmor... no
checking for pthread_mutexattr_init... yes
checking for pthread.h... (cached) yes
checking whether pthread_sigmask does anything... yes
checking for atomic ops implementation... gcc
checking for getxattr in -lattr... yes
checking sys/xattr.h usability... yes
checking sys/xattr.h presence... yes
checking for sys/xattr.h... yes
checking for audit_encode_nv_string in -laudit... yes
checking libaudit.h usability... yes
checking libaudit.h presence... yes
checking for libaudit.h... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for AVAHI... yes
checking for library containing tgetent... -lncurses
checking whether rl_completion_quote_character is declared... yes
checking for readline in -lreadline... yes
checking readline/readline.h usability... yes
checking readline/readline.h presence... yes
checking for readline/readline.h... yes
checking for rl_initialize in -lreadline... yes
checking for BASH_COMPLETION... no
checking for BLKID... yes
checking for capng_updatev in -lcap-ng... yes
checking cap-ng.h usability... yes
checking cap-ng.h presence... yes
checking for cap-ng.h... yes
checking for CURL... yes
checking for DBUS... yes
checking for dbus_watch_get_unix_fd... yes
checking for DBusBasicValue... yes
checking for DEVMAPPER... yes
checking for dlfcn.h... (cached) yes
checking for library containing dlopen... -ldl
checking for FUSE... yes
checking for GLUSTERFS... yes
checking for GNUTLS... yes
checking for HAL... no
checking for LIBISCSI... no
checking for NETCF... yes
checking for ncf_change_begin... yes
checking whether to compile with macvtap support... yes
checking whether MACVLAN_MODE_PASSTHRU is declared... yes
checking for LIBNL... yes
checking for LIBNL_ROUTE3... yes
checking for LIBPARTED... yes
checking for parted... /sbin/parted
checking libpcap pcap-config >= 1.0.0 ... yes
checking for LIBSSH... yes
checking for ssh_get_server_publickey... no
checking for LIBXML... yes
checking for struct _xmlURI.query_raw... yes
checking whether to compile with macvtap support... yes
checking whether MACVLAN_MODE_PASSTHRU is declared... (cached) yes
checking for NETCF... yes
checking for ncf_change_begin... (cached) yes
checking for gettext... yes
checking libintl.h usability... yes
checking libintl.h presence... yes
checking for libintl.h... yes
checking for xgettext... xgettext
checking for msgfmt... msgfmt
checking for msgmerge... msgmerge
checking msgfmt is GNU tool... yes
checking for numa_available in -lnuma... yes
checking numa.h usability... yes
checking numa.h presence... yes
checking for numa.h... yes
checking for numa_bitmask_isbitset in -lnuma... yes
checking for OPENWSMAN... yes
checking for PCIACCESS... yes
checking for init script type... systemd
checking for pkcheck... /usr/bin/pkcheck
checking for pthread_mutexattr_init... (cached) yes
checking for pthread.h... (cached) yes
checking whether pthread_sigmask does anything... (cached) yes
checking for library containing tgetent... (cached) -lncurses
checking whether rl_completion_quote_character is declared... (cached) yes
checking for readline in -lreadline... (cached) yes
checking for readline/readline.h... (cached) yes
checking for rl_initialize in -lreadline... (cached) yes
checking for sanlock_init in -lsanlock_client... yes
checking sanlock.h usability... yes
checking sanlock.h presence... yes
checking for sanlock.h... yes
checking whether SANLK_INQ_WAIT is declared... yes
checking for sanlock_killpath in -lsanlock_client... yes
checking for sanlock_inq_lockspace in -lsanlock_client... yes
checking for sanlock_write_lockspace in -lsanlock_client... yes
checking for sanlock_strerror in -lsanlock_client... yes
checking for sasl_client_init in -lsasl2... yes
checking sasl/sasl.h usability... yes
checking sasl/sasl.h presence... yes
checking for sasl/sasl.h... yes
checking for fgetfilecon_raw in -lselinux... yes
checking selinux/selinux.h usability... yes
checking selinux/selinux.h presence... yes
checking for selinux/selinux.h... yes
checking for selinux setcon parameter type... const
checking for selinux selabel_open parameter type... const
checking SELinux mount point... /selinux
checking selinux/label.h usability... yes
checking selinux/label.h presence... yes
checking for selinux/label.h... yes
checking for SSH2... yes
checking for UDEV... yes
checking for udev_monitor_set_receive_buffer_size... yes
checking whether to compile with virtual port support... yes
checking for WIRESHARK_DISSECTOR... yes
checking for xdrmem_create in -lportablexdr... no
checking for library containing xdrmem_create... none required
checking for xdr_u_int64_t... no
checking where to find <rpc/rpc.h>... none
checking for qemu-kvm... no
checking for qemu... no
checking for kvm... no
checking for qemu-system-x86_64... no
checking for yajl_parse_complete in -lyajl... no
checking for yajl_tree_parse in -lyajl... yes
checking yajl/yajl_common.h usability... yes
checking yajl/yajl_common.h presence... yes
checking for yajl/yajl_common.h... yes
checking size of long... 8
checking pwd.h usability... yes
checking pwd.h presence... yes
checking for pwd.h... yes
checking regex.h usability... yes
checking regex.h presence... yes
checking for regex.h... yes
checking sys/un.h usability... yes
checking sys/un.h presence... yes
checking for sys/un.h... yes
checking sys/poll.h usability... yes
checking sys/poll.h presence... yes
checking for sys/poll.h... yes
checking syslog.h usability... yes
checking syslog.h presence... yes
checking for syslog.h... yes
checking mntent.h usability... yes
checking mntent.h presence... yes
checking for mntent.h... yes
checking net/ethernet.h usability... yes
checking net/ethernet.h presence... yes
checking for net/ethernet.h... yes
checking linux/magic.h usability... yes
checking linux/magic.h presence... yes
checking for linux/magic.h... yes
checking for sys/un.h... (cached) yes
checking sys/syscall.h usability... yes
checking sys/syscall.h presence... yes
checking for sys/syscall.h... yes
checking for sys/sysctl.h... (cached) yes
checking netinet/tcp.h usability... yes
checking netinet/tcp.h presence... yes
checking for netinet/tcp.h... yes
checking ifaddrs.h usability... yes
checking ifaddrs.h presence... yes
checking for ifaddrs.h... yes
checking libtasn1.h usability... yes
checking libtasn1.h presence... yes
checking for libtasn1.h... yes
checking sys/ucred.h usability... no
checking sys/ucred.h presence... no
checking for sys/ucred.h... no
checking sys/mount.h usability... yes
checking sys/mount.h presence... yes
checking for sys/mount.h... yes
checking stdarg.h usability... yes
checking stdarg.h presence... yes
checking for stdarg.h... yes
checking whether htole64 is declared... yes
checking for stat... yes
checking for stat64... yes
checking for __xstat... yes
checking for __xstat64... yes
checking for lstat... (cached) yes
checking for lstat64... yes
checking for __lxstat... yes
checking for __lxstat64... yes
checking for struct ifreq... yes
checking for struct sockpeercred... no
checking whether ETH_FLAG_TXVLAN is declared... yes
checking whether ETH_FLAG_NTUPLE is declared... yes
checking whether ETH_FLAG_RXHASH is declared... yes
checking whether ETH_FLAG_LRO is declared... yes
checking whether ETHTOOL_GGSO is declared... yes
checking whether ETHTOOL_GGRO is declared... yes
checking whether ETHTOOL_GFLAGS is declared... yes
checking whether ETHTOOL_GFEATURES is declared... yes
checking whether ETHTOOL_SCOALESCE is declared... yes
checking whether ETHTOOL_GCOALESCE is declared... yes
checking whether SEEK_HOLE is declared... yes
checking for gettext in -lintl... no
checking for rpcgen... /usr/bin/rpcgen
checking for xmllint... /usr/bin/xmllint
checking for xsltproc... /usr/bin/xsltproc
checking for augparse... /usr/bin/augparse
checking whether ln -s works... yes
checking for dmidecode... dmidecode
checking for dnsmasq... /sbin/dnsmasq
checking for radvd... /sbin/radvd
checking for tc... tc
checking for udevadm... /usr/bin/udevadm
checking for udevsettle... no
checking for modprobe... /sbin/modprobe
checking for rmmod... /sbin/rmmod
checking for mm-ctl... mm-ctl
checking for ovs-vsctl... ovs-vsctl
checking for scrub... /usr/bin/scrub
checking for addr2line... /usr/bin/addr2line
checking for ip... /sbin/ip
checking for iptables... /sbin/iptables
checking for ip6tables... /sbin/ip6tables
checking for ebtables... /sbin/ebtables
checking for qemu-bridge-helper... /usr/libexec/qemu-bridge-helper
checking for qemu-pr-helper... /usr/bin/qemu-pr-helper
checking for xen_vm_start in -lxenserver... no
checking for LIBXL... no
checking for libxl_ctx_alloc in -lxenlight... yes
checking libxl.h usability... yes
checking libxl.h presence... yes
checking for libxl.h... yes
checking libxlutil.h usability... yes
checking libxlutil.h presence... yes
checking for libxlutil.h... yes
checking for xtl_createlogger_stdiostream in -lxentoollog... yes
checking for libxl_domain_config_from_json... yes
checking for PARALLELS_SDK... no
checking for bhyve... no
checking for bhyvectl... no
checking for bhyveload... no
checking sys/inotify.h usability... yes
checking sys/inotify.h presence... yes
checking for sys/inotify.h... yes
checking for dtrace... /usr/bin/dtrace
checking for numad... /usr/bin/numad
checking for init script type... systemd
checking for whether to install sysctl config... yes
checking nss.h usability... yes
checking nss.h presence... yes
checking for nss.h... yes
checking for struct gaih_addrtuple... yes
checking for ns_mtab... no
checking for nss_module_unregister_fn... no
checking linux/kvm.h usability... yes
checking linux/kvm.h presence... yes
checking for linux/kvm.h... yes
checking whether <linux/*.h> and <netinet/*.h> headers are compatible... yes
checking for linux/param.h... yes
checking for linux/sockios.h... yes
checking for linux/if_bridge.h... yes
checking for linux/if_tun.h... yes
checking for pkg-config... (cached) /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for selinux_virtual_domain_context_path... yes
checking for selinux_virtual_image_context_path... yes
checking for selinux_lxc_contexts_path... yes
checking for mntent.h... (cached) yes
checking for mount... /usr/bin/mount
checking for umount... /usr/bin/umount
checking for mkfs... /sbin/mkfs
checking for showmount... /sbin/showmount
checking for pvcreate... /sbin/pvcreate
checking for vgcreate... /sbin/vgcreate
checking for lvcreate... /sbin/lvcreate
checking for pvremove... /sbin/pvremove
checking for vgremove... /sbin/vgremove
checking for lvremove... /sbin/lvremove
checking for lvchange... /sbin/lvchange
checking for vgchange... /sbin/vgchange
checking for vgscan... /sbin/vgscan
checking for pvs... /sbin/pvs
checking for vgs... /sbin/vgs
checking for lvs... /sbin/lvs
checking for iscsiadm... /sbin/iscsiadm
checking rbd/librbd.h usability... yes
checking rbd/librbd.h presence... yes
checking for rbd/librbd.h... yes
checking for rbd_get_features... yes
checking for collie... no
checking for dog... /usr/bin/dog
checking for zfs... /sbin/zfs
checking for zpool... /sbin/zpool
checking for vstorage... no
checking for vstorage-mount... no
checking for umount... (cached) /usr/bin/umount
checking linux/btrfs.h usability... yes
checking linux/btrfs.h presence... yes
checking for linux/btrfs.h... yes
checking xfs/xfs.h usability... no
checking xfs/xfs.h presence... no
checking for xfs/xfs.h... no
checking linux/devlink.h usability... yes
checking linux/devlink.h presence... yes
checking for linux/devlink.h... yes
checking whether DEVLINK_CMD_ESWITCH_GET is declared... yes
checking whether VHOST_VSOCK_SET_GUEST_CID is declared... yes
checking for python3... /usr/bin/python3
checking for perl... /usr/bin/perl
checking Whether to build test suite by default... yes
checking whether GET_VLAN_VID_CMD is declared... yes
checking for struct ifreq.ifr_newname... yes
checking for struct ifreq.ifr_ifindex... yes
checking for struct ifreq.ifr_index... no
checking for struct ifreq.ifr_hwaddr... yes
checking whether BRDGSFD is declared... no
checking whether BRDGADD is declared... no
checking whether BRDGDEL is declared... no
checking whether cpuset_getaffinity is declared... no
checking for struct if_data.ifi_oqdrops... no
checking whether clock_serv_t is declared... no
checking whether host_get_clock_service is declared... no
checking whether clock_get_time is declared... no
checking whether this build is done by a static analysis tool... no
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating run
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating include/libvirt/Makefile
config.status: creating docs/Makefile
config.status: creating gnulib/lib/Makefile
config.status: creating gnulib/tests/Makefile
config.status: creating .color_coded
config.status: creating .ycm_extra_conf.py
config.status: creating libvirt.pc
config.status: creating libvirt-qemu.pc
config.status: creating libvirt-lxc.pc
config.status: creating libvirt-admin.pc
config.status: creating src/libvirt.pc
config.status: creating src/libvirt-qemu.pc
config.status: creating src/libvirt-lxc.pc
config.status: creating libvirt.spec
config.status: creating mingw-libvirt.spec
config.status: creating po/Makefile
config.status: creating include/libvirt/libvirt-common.h
config.status: creating examples/Makefile
config.status: creating tests/Makefile
config.status: creating tools/Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
configure:
configure: Configuration summary
configure: =====================
configure:
configure: Drivers
configure:
configure: QEMU: yes
configure: UML: yes
configure: OpenVZ: yes
configure: VMware: yes
configure: VBox: yes
configure: XenAPI: no
configure: libxl: yes
configure: LXC: yes
configure: PHYP: yes
configure: ESX: yes
configure: Hyper-V: yes
configure: vz: no
configure: Bhyve: no
configure: Test: yes
configure: Remote: yes
configure: Network: yes
configure: Libvirtd: yes
configure: Interface: yes
configure:
configure: Storage Drivers
configure:
configure: Dir: yes
configure: FS: yes
configure: NetFS: yes
configure: LVM: yes
configure: iSCSI: yes
configure: iscsi-direct: no
configure: SCSI: yes
configure: mpath: yes
configure: Disk: yes
configure: RBD: yes
configure: Sheepdog: yes
configure: Gluster: yes
configure: ZFS: yes
configure: Virtuozzo storage: no
configure:
configure: Security Drivers
configure:
configure: SELinux: yes
configure: AppArmor: no
configure:
configure: Driver Loadable Modules
configure:
configure: driver_modules: yes (CFLAGS='' LIBS='-ldl')
configure:
configure: Libraries
configure:
configure: acl: yes (CFLAGS='' LIBS='-lacl')
configure: apparmor: no
configure: attr: yes (CFLAGS='' LIBS='-lattr')
configure: audit: yes (CFLAGS='' LIBS='-laudit')
configure: avahi: yes (CFLAGS='-D_REENTRANT ' LIBS='-lavahi-common -lavahi-client ')
configure: bash_completion: no
configure: blkid: yes (CFLAGS='-I/usr/include/blkid -I/usr/include/uuid ' LIBS='-lblkid ')
configure: capng: yes (CFLAGS='' LIBS='-lcap-ng')
configure: curl: yes (CFLAGS='-DCURL_DISABLE_TYPECHECK ' LIBS='-lcurl ')
configure: dbus: yes (CFLAGS='-I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include ' LIBS='-ldbus-1 ')
configure: dlopen: yes (CFLAGS='' LIBS='-ldl')
configure: firewalld: yes (CFLAGS='' LIBS='')
configure: fuse: yes (CFLAGS='-I/usr/include/fuse -D_FILE_OFFSET_BITS=64 ' LIBS='-lfuse -pthread ')
configure: glusterfs: yes (CFLAGS='-I/usr/include/glusterfs -D_FILE_OFFSET_BITS=64 -D__USE_FILE_OFFSET64 -DUSE_POSIX_ACLS=1 -I/usr/include/uuid ' LIBS='-lacl -lgfapi -lglusterfs -lgfrpc -lgfxdr -luuid ')
configure: gnutls: yes (CFLAGS='-I/usr/include/p11-kit-1 ' LIBS='-lgnutls ')
configure: hal: no
configure: libiscsi: no
configure: libnl: yes (CFLAGS='-I/usr/include/libnl3 -I/usr/include/libnl3 ' LIBS='-lnl-3 -lnl-route-3 -lnl-3 ')
configure: libpcap: yes (CFLAGS='' LIBS='-lpcap')
configure: libssh: yes (CFLAGS='' LIBS='-lssh ')
configure: libxl: yes (CFLAGS=' -DLIBXL_API_VERSION=0x040400' LIBS='-lxenlight -lxlutil -lxenstore -lxentoollog')
configure: libxml: yes (CFLAGS='-I/usr/include/libxml2 ' LIBS='-lxml2 ')
configure: macvtap: yes (CFLAGS='' LIBS='')
configure: netcf: yes (CFLAGS='' LIBS='-lnetcf ')
configure: NLS: yes
configure: nss: yes
configure: numactl: yes (CFLAGS='' LIBS='-lnuma')
configure: openwsman: yes (CFLAGS='-I/usr/include/openwsman ' LIBS='-lwsman -lwsman_client -lwsman_curl_client_transport ')
configure: pciaccess: yes (CFLAGS='' LIBS='-lpciaccess ')
configure: pm_utils: no
configure: polkit: yes
configure: rbd: yes (CFLAGS='' LIBS='-lrbd -lrados')
configure: readline: yes (CFLAGS='-D_FUNCTION_DEF ' LIBS='-lreadline')
configure: sanlock: yes (CFLAGS='' LIBS='-lsanlock_client')
configure: sasl: yes (CFLAGS='' LIBS='-lsasl2')
configure: selinux: yes (CFLAGS='' LIBS='-lselinux')
configure: ssh2: yes (CFLAGS='' LIBS='-lssh2 ')
configure: udev: yes (CFLAGS='' LIBS='-ludev ')
configure: virtualport: yes (CFLAGS='' LIBS='')
configure: xdr: yes (CFLAGS='' LIBS='')
configure: xenapi: no
configure: yajl: yes (CFLAGS='' LIBS='-lyajl')
configure:
configure: Windows
configure:
configure: Cygwin: no
configure: MinGW: no
configure: MSVC: no
configure: windres: no
configure:
configure: Test suite
configure:
configure: Coverage: no
configure: Alloc OOM: no
configure:
configure: Miscellaneous
configure:
configure: Debug: yes
configure: Use -Werror: yes
configure: Warning Flags: -fno-common -W -Waddress -Waggressive-loop-optimizations -Wall -Wattributes -Wbad-function-cast -Wbool-compare -Wbool-operation -Wbuiltin-declaration-mismatch -Wbuiltin-macro-redefined -Wcast-align -Wchar-subscripts -Wclobbered -Wcomment -Wcomments -Wcoverage-mismatch -Wcpp -Wdangling-else -Wdate-time -Wdeprecated-declarations -Wdesignated-init -Wdiscarded-array-qualifiers -Wdiscarded-qualifiers -Wdiv-by-zero -Wdouble-promotion -Wduplicated-cond -Wduplicate-decl-specifier -Wempty-body -Wendif-labels -Wexpansion-to-defined -Wextra -Wformat-contains-nul -Wformat-extra-args -Wformat-security -Wformat-y2k -Wformat-zero-length -Wframe-address -Wfree-nonheap-object -Whsa -Wignored-attributes -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wincompatible-pointer-types -Winit-self -Winline -Wint-conversion -Wint-in-bool-context -Wint-to-pointer-cast -Winvalid-memory-model -Winvalid-pch -Wlogical-not-parentheses -Wlogical-op -Wmain -Wmaybe-uninitialized -Wmemset-elt-size -Wmemset-transposed-args -Wmisleading-indentation -Wmissing-braces -Wmissing-declarations -Wmissing-field-initializers -Wmissing-include-dirs -Wmissing-parameter-type -Wmissing-prototypes -Wmultichar -Wnarrowing -Wnested-externs -Wnonnull -Wnonnull-compare -Wnull-dereference -Wodr -Wold-style-declaration -Wold-style-definition -Wopenmp-simd -Woverflow -Woverride-init -Wpacked-bitfield-compat -Wparentheses -Wpointer-arith -Wpointer-compare -Wpointer-sign -Wpointer-to-int-cast -Wpragmas -Wpsabi -Wrestrict -Wreturn-local-addr -Wreturn-type -Wscalar-storage-order -Wsequence-point -Wshadow -Wshift-count-negative -Wshift-count-overflow -Wshift-negative-value -Wsizeof-array-argument -Wsizeof-pointer-memaccess -Wstrict-aliasing -Wstrict-prototypes -Wsuggest-attribute=const -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure -Wsuggest-final-methods -Wsuggest-final-types -Wswitch -Wswitch-bool -Wswitch-unreachable -Wsync-nand -Wtautological-compare -Wtrampolines -Wtrigraphs
-Wtype-limits -Wuninitialized -Wunknown-pragmas -Wunused -Wunused-but-set-parameter -Wunused-but-set-variable -Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-parameter -Wunused-result -Wunused-value -Wunused-variable -Wvarargs -Wvariadic-macros -Wvector-operation-performance -Wvolatile-register-var -Wwrite-strings -Walloc-size-larger-than=9223372036854775807 -Warray-bounds=2 -Wformat-overflow=2 -Wformat-truncation=2 -Wimplicit-fallthrough=5 -Wnormalized=nfc -Wshift-overflow=2 -Wstringop-overflow=2 -Wunused-const-variable=2 -Wvla-larger-than=4031 -Wno-sign-compare -Wjump-misses-init -Wswitch-enum -Wno-format-nonliteral -Wno-format-truncation -fstack-protector-strong -fexceptions -fasynchronous-unwind-tables -fipa-pure-const -Wno-suggest-attribute=pure -Wno-suggest-attribute=const -Werror
configure: DTrace: yes
configure: numad: yes
configure: Init script: systemd
configure: Char device locks: /var/lock
configure: Default Editor: vi
configure: Loader/NVRAM:
configure: virt-login-shell: yes
configure: virt-host-validate: yes
configure: TLS priority: NORMAL
configure:
configure: Developer Tools
configure:
configure: wireshark_dissector: yes (CFLAGS='-I/usr/include/wireshark -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -pthread ' LIBS='-lwireshark -Wl,--export-dynamic -lgmodule-2.0 -lgthread-2.0 -pthread -lglib-2.0 ')
configure:
configure: Privileges
configure:
configure: QEMU: root:root
configure:
Now type 'make' to compile libvirt.
GEN spacing-check
Curly brackets around single-line body:
src/conf/domain_addr.c:198-200:
if (virDomainZPCIAddressReserveUid(zpciIds->uids, addr) < 0) {
return -1;
}
maint.mk: incorrect formatting
make: *** [cfg.mk:1129: spacing-check] Error 1
real 10m43.680s
user 9m0.399s
sys 3m55.869s
=== OUTPUT END ===
Test command exited with code: 2
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
Hi @Andrea, Is there any chance that these patches catch up with 4.7.0 release? I see it's entering freeze. Expecting your comments. Thanks very much! Yi Min 在 2018/8/27 下午1:48, Yi Min Zhao 写道:
Abstract ======== The PCI representation in QEMU has recently been extended for S390 allowing configuration of zPCI attributes like uid (user-defined identifier) and fid (PCI function identifier). The details can be found here: https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg07262.html
To support the new zPCI feature of the S390 platform, two new XML attributes, @uid and @fid, are introduced for device addresses of type 'pci', i.e.: <hostdev mode='subsystem' type='pci'> <driver name='vfio'/> <source> <address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/> </source> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0' uid='0x0003' fid='0x00000027'/> </hostdev>
uid and fid are optional attributes. If they are defined by the user, unique values within the guest domain must be used. If they are not specified and the architecture requires them, they are automatically generated with non-conflicting values.
Current implementation is the most seamless one for the user as it unites the address specific data of a PCI device on one XML element. It could accommodate both specifying our special parameters (uid and fid) and re-using standard statements (domain, bus, slot and function) for PCI devices. User can still specify bus/slot/function for the virtualized PCI devices in the XML.
Thus uid/fid act as an extension to the PCI address and are stored in a new structure 'virZPCIDeviceAddress' which is a member of common PCI Address structure. Additionally, two hashtables are used for assignment and reservation of uid/fid.
In support of extending the PCI address, a new PCI address extension flag is introduced. This extension flag allows is not only dedicated for the S390 platform but also other architectures needing certain extensions to PCI address space.
Code Base ========= commit in master: 3b89e1f962 docs: api_extension: Don't encourage other tools than git
Change Log ========== v3->v4: 1. Update docs. 2. Format code style. 3. Optimize zPCI support check. 4. Move the check of zPCI defined in xml but unsupported by Qemu to qemuDomainDeviceDefValidate(). 5. Change zpci address member of PCI address struct from pointer to instance. 6. Modify zpci address definition principle. Currently the user must either define both of uid and fid or not.
v2->v3: 1. Revise code style. 2. Update test cases. 3. Introduce qemuDomainCollectPCIAddressExtension() to collect PCI extension addresses. 4. Introduce virDeviceInfoPCIAddressExtensionPresent() to check if zPCI address exists. 5. Optimize zPCI address check logic. 6. Optimize passed parameters of zPCI addr alloc/release/reserve functions. 7. Report enum range error in qemuDomainDeviceSupportZPCI(). 8. Update commit messages.
v1->v2: 1. Separate test commit and merge testcases into corresponding commits that introduce the functionalities firstly. 2. Spare some checks for zpci device. 3. Add vsock and controller support. 4. Add uin32 type schema. 5. Rename zpciuid and zpcifid to zpci_uid and zpci_fid. 6. Always return multibus support on S390.
Yi Min Zhao (12): conf: Add definitions for 'uid' and 'fid' PCI address attributes qemu: Introduce zPCI capability conf: Introduce a new PCI address extension flag qemu: Enable PCI multi bus for S390 guests qemu: Auto add pci-root for s390/s390x guests conf: Introduce address caching for PCI extensions conf: Introduce parser, formatter for uid and fid conf: Allocate/release 'uid' and 'fid' in PCI address qemu: Generate and use zPCI device in QEMU command line qemu: Add hotpluging support for PCI devices on S390 guests docs: Add 'uid' and 'fid' information news: Update news for PCI address extension attributes
cfg.mk | 1 + docs/formatdomain.html.in | 9 +- docs/news.xml | 10 + docs/schemas/basictypes.rng | 23 ++ docs/schemas/domaincommon.rng | 1 + src/conf/device_conf.c | 62 ++++ src/conf/device_conf.h | 14 + src/conf/domain_addr.c | 331 +++++++++++++++++++++ src/conf/domain_addr.h | 29 ++ src/conf/domain_conf.c | 6 + src/libvirt_private.syms | 4 + src/qemu/qemu_capabilities.c | 6 + src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 95 ++++++ src/qemu/qemu_command.h | 2 + src/qemu/qemu_domain.c | 27 ++ src/qemu/qemu_domain_address.c | 205 ++++++++++++- src/qemu/qemu_hotplug.c | 151 +++++++++- src/util/virpci.h | 11 + tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml | 1 + tests/qemuxml2argvdata/disk-virtio-s390-zpci.args | 26 ++ tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml | 17 ++ .../hostdev-vfio-zpci-autogenerate.args | 25 ++ .../hostdev-vfio-zpci-autogenerate.xml | 18 ++ .../hostdev-vfio-zpci-boundaries.args | 29 ++ .../hostdev-vfio-zpci-boundaries.xml | 26 ++ .../hostdev-vfio-zpci-multidomain-many.args | 39 +++ .../hostdev-vfio-zpci-multidomain-many.xml | 67 +++++ tests/qemuxml2argvdata/hostdev-vfio-zpci.args | 25 ++ tests/qemuxml2argvdata/hostdev-vfio-zpci.xml | 19 ++ tests/qemuxml2argvtest.c | 20 ++ tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml | 29 ++ .../hostdev-vfio-zpci-autogenerate.xml | 30 ++ .../hostdev-vfio-zpci-boundaries.xml | 42 +++ .../hostdev-vfio-zpci-multidomain-many.xml | 79 +++++ tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml | 30 ++ tests/qemuxml2xmltest.c | 17 ++ 42 files changed, 1518 insertions(+), 14 deletions(-) create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.args create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.xml create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.args create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.xml create mode 100644 tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-multidomain-many.xml create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml
-- Yi Min
On Wed, 2018-08-29 at 13:32 +0800, Yi Min Zhao wrote:
Hi @Andrea,
Is there any chance that these patches catch up with 4.7.0 release?
I see it's entering freeze.
We're already frozen, which means only fixes can be merged. I'll review the patches in the next few days and if everything is fine we can push them as soon as the tree opens again, which is good because it gives us plenty of time to spot any lingering issues. -- Andrea Bolognani / Red Hat / Virtualization
在 2018/8/29 下午4:19, Andrea Bolognani 写道:
On Wed, 2018-08-29 at 13:32 +0800, Yi Min Zhao wrote:
Hi @Andrea,
Is there any chance that these patches catch up with 4.7.0 release?
I see it's entering freeze. We're already frozen, which means only fixes can be merged.
I'll review the patches in the next few days and if everything is fine we can push them as soon as the tree opens again, which is good because it gives us plenty of time to spot any lingering issues.
Got it. Thanks for your effort! -- Yi Min
participants (3)
-
Andrea Bolognani -
no-reply@patchew.org -
Yi Min Zhao